VFP 愛用者社區 首頁 VFP 愛用者社區
本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
 
 常見問題常見問題   搜尋搜尋   會員列表會員列表   會員群組會員群組   會員註冊會員註冊 
 個人資料個人資料   登入檢查您的私人訊息登入檢查您的私人訊息   登入登入

MSSQL菜鳥需要您的指導...^^"
前往頁面 上一頁  1, 2, 3, 4, 5, 6, 7  下一頁
 
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區
上一篇主題 :: 下一篇主題  
發表人 內容
jerryclt



註冊時間: 2009-03-10
文章: 334
來自: 佛心來的

第 31 樓

發表發表於: 星期一 九月 16, 2013 4:48 pm    文章主題: 引言回覆

所以小弟只想略懂一下就去應徵 @@"
回頂端
檢視會員個人資料 發送私人訊息
jerryclt



註冊時間: 2009-03-10
文章: 334
來自: 佛心來的

第 32 樓

發表發表於: 星期六 九月 21, 2013 7:42 am    文章主題: 引言回覆

抱歉,
小弟又傻眼了...@@

在VFP可以這樣:
SELECT 0
USE a_table ALIAS aa ORDER f_001
(這部份承蒙教導,在SQL SERVER端已經可以INSERT,UPDATE了)
SELECT 0
USE a_table ALIAS ab AGAIN ORDER f_001 DESC

這個 ab 在SQL中要如何下?
回頂端
檢視會員個人資料 發送私人訊息
ckp6250



註冊時間: 2004-07-30
文章: 1642


第 33 樓

發表發表於: 星期六 九月 21, 2013 11:08 am    文章主題: 引言回覆

建議您把 syntech 所寫的都再仔細看三遍
就有答案了
回頂端
檢視會員個人資料 發送私人訊息 參觀發表人的個人網站
jerryclt



註冊時間: 2009-03-10
文章: 334
來自: 佛心來的

第 34 樓

發表發表於: 星期日 九月 22, 2013 9:13 am    文章主題: 引言回覆

恕小弟愚魯,
再看三遍也看不出有和小弟欲請教之事有關...

可以點明是哪一段嗎?
回頂端
檢視會員個人資料 發送私人訊息
syntech



註冊時間: 2003-05-16
文章: 4211
來自: Taipei,Taiwan

第 35 樓

發表發表於: 星期日 九月 22, 2013 9:50 am    文章主題: 引言回覆

應該是 要用MS SQL 的T-SQL 語法那段. ^.^
而不是用 FOXPRO 語法直接搬.

因為 T-SQL 的INDEX 用法與FOXPRO 的xBASE 語法不一樣,
(但是VFP9 的 SQL 語法與 M$ SQL SERVER 2000 以後的版本已經很接近)

你可以使用" SELECT * FROM A_TABLE WITH (INDEX(F_001))",
強制使用某個INDEX,
但是所有的書上都會告訴你不要這樣作,
除非你很了解SQL SERVER 的內部運作機制
實際運作上,通常你並不需要指定INDEX,
而是事先建立好數個INDEX,
SQL SERVER 會自動取用或是建立合適的INDEX(這點FOXPRO也一樣)


你的問題在於,SQL 的處理是以CURSOR為單位的,
而不是以TABLE為單位的.

在SQL SERVER或是FOXPRO對某個TABLE 可以直接下
select * into cursor aa from a_table order by Field001
select * into cursor ab from a_table order by Field001 DESC
這樣就會產生兩個CURSOR.

換成用SQLEXEC,取回兩個CURSOR的話,就是
SQLEXEC(x,"select * from a_table order by Field001 ","aa")
SQLEXEC(x,"select * from a_table order by Field001 DESC","ab")
(當然你可以把兩個SQL 命令合在一起,再用SQLMORERESULT()兩個CURSOR,
但我記得第二個以後的CURSOR不能自由命名)

不管是SQL SERVER或是FOXRPO,
CURSOR都是定義為"取自於某個TABLE/VIEW/CURSOR的一部分獨立的資料"
與原來的TABLE無關,
可以想作每個CURSOR都是 "COPY TO AA.DBF FIELDS .... WHILE ..... FOR ...... "作出來的,
當然沒有什麼 USE AGAIN 的情況.
也都需要重新給定INDEX.

因為SQL SERVER ,不管是哪一家,
處理的單位都是CURSOR,
不是傳統XBASE的DBF或是RECORD,
所以你要改掉你的習慣.
中毒越深越痛苦.


---
我的T-SQL 程度只有一般般.

_________________
如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問

請聯絡我們,也許我們幫得上忙
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 AIM Address
jerryclt



註冊時間: 2009-03-10
文章: 334
來自: 佛心來的

第 36 樓

發表發表於: 星期一 九月 23, 2013 1:58 am    文章主題: 引言回覆

感謝回覆...解說得非常詳細!

INDEX小弟是這樣用的:
sqlhandle=get_sqlconnect('MsSQL',UserID,PassWord,'My_loto')
IF !set_cursor(sqlhandle,'lt01','lt01_001,lt01_002','loto',;
  'lt01_001,lt01_002,lt01_003,lt01_004,lt01_005,'+;
  'lt01_006,lt01_007,lt01_008,lt01_009,lt01_010',;
  'lt01_001 lt01.lt01_001,lt01_002 lt01.lt01_002,lt01_003 lt01.lt01_003,lt01_004 lt01.lt01_004,lt01_005 lt01.lt01_005,'+;
  'lt01_006 lt01.lt01_006,lt01_007 lt01.lt01_007,lt01_008 lt01.lt01_008,lt01_009 lt01.lt01_009,lt01_010 lt01.lt01_010')
  DO errmess WITH 'CURSOR PROP 有錯誤產生!'
ELSE
  SELECT loto
  INDEX ON lt01_001+lt01_002 TAG lt01_001 ADDITIVE
ENDIF
.
.
.

FUNCTION set_cursor
PARAMETERS _sqlhandle,_tablen,_mkey,_cursorn,_dbase_field,_table_field
SQLEXEC(_sqlhandle,'SELECT * FROM '+_tablen,_cursorn)

SELECT &_cursorn
*IF CURSORSETPROP('Buffering',5,_cursorn)
  IF CURSORSETPROP('Tables',_tablen,_cursorn)
    IF CURSORSETPROP('KeyFieldList',_mkey,_cursorn)
      IF CURSORSETPROP('UpdatableFieldList',_dbase_field,_cursorn)
        IF CURSORSETPROP('UpdateNameList',_table_field,_cursorn)
          IF CURSORSETPROP('SendUpdates',.T.,_cursorn)
            RETURN .T.
          ENDIF
        ENDIF
      ENDIF
    ENDIF
  ENDIF
*ENDIF
RETURN .F.
ENDFUNC

小弟發問之前也是使用
SQLEXEC(x,"select * from a_table order by Field001 ","aa")
SQLEXEC(x,"select * from a_table order by Field001 DESC","ab")
的方式嚐試,
但是結果卻和 VFP 的方式不一樣,
儘管已經手動建立了底層對應,
也無法拿 aa 來用VFP的方式玩,
(USE aa ALIAS ab AGAIN .......)
雖然開啟a_table兩次,
可是只要針對任一個ALIAS做增刪動作,
另一個ALIAS也會跟著做增刪動作.

那麼,
依小弟目前對 SQL SERVER 的認知程度,
要達到 USE AGAIN 一樣的方式,
只能對每個 CURSOR 同時做增刪動作,
但只要 TABLEUPDATE(.T.) 其中一個 CURSOR 就好了!
是不是這樣?
回頂端
檢視會員個人資料 發送私人訊息
syntech



註冊時間: 2003-05-16
文章: 4211
來自: Taipei,Taiwan

第 37 樓

發表發表於: 星期一 九月 23, 2013 10:02 am    文章主題: 引言回覆

15樓就說了.
由SQL 取回來的CURSOR,並不是所有FOXPRO命令都可以用.
要先看HELP的說明,確認一下哪些可以用.

後面也說了,觀念要改,
不要把傳統XBASE那套直接搬到SQL CURSOR來用.
由SQL 上取回的CURSOR,
就是在那一刻SQL上的資料,
下一刻就可能發生變化,
不要設計隨時都要資料同步的機制.
會出現很多不必要的網路傳輸及SQL 資料變動(刪除或是更新).

通常我會開兩個CURSOR.
一個就是處理資料異動的,
這個要設計資料更新及衝突處理機制.
因為SQL SERVER上的資料可能已經發生變化,

一個就是用來顯示查詢資料(readonly).
每次執行都重新取回最新資料.
不會由處理資料異動的CURSOR在USE AGIAN來用.
理由一樣,因為SQL SERVER上的資料可能已經發生變化,

_________________
如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問

請聯絡我們,也許我們幫得上忙


syntech 在 星期一 九月 23, 2013 10:15 am 作了第 1 次修改
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 AIM Address
saint



註冊時間: 2003-07-14
文章: 211


第 38 樓

發表發表於: 星期一 九月 23, 2013 10:05 am    文章主題: 引言回覆

引言回覆:

SQLEXEC(x,"select * from a_table order by Field001 ","aa")
的方式嚐試,
但是結果卻和 VFP 的方式不一樣,
儘管已經手動建立了底層對應,
也無法拿 aa 來用VFP的方式玩,
(USE aa ALIAS ab AGAIN .......)
雖然開啟a_table兩次,
可是只要針對任一個ALIAS做增刪動作,
另一個ALIAS也會跟著做增刪動作.

如果要對這個aa 這個cursor 做異動
我會建議就直接下sql command 到後端去
異動成功後,再重新query 一次
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 MSN Messenger
jerryclt



註冊時間: 2009-03-10
文章: 334
來自: 佛心來的

第 39 樓

發表發表於: 星期一 九月 23, 2013 11:29 am    文章主題: 引言回覆

syntech 寫到:
15樓就說了.
由SQL 取回來的CURSOR,並不是所有FOXPRO命令都可以用.
要先看HELP的說明,確認一下哪些可以用.

後面也說了,觀念要改,
不要把傳統XBASE那套直接搬到SQL CURSOR來用.
由SQL 上取回的CURSOR,
就是在那一刻SQL上的資料,
下一刻就可能發生變化,
不要設計隨時都要資料同步的機制.
會出現很多不必要的網路傳輸及SQL 資料變動(刪除或是更新).

通常我會開兩個CURSOR.
一個就是處理資料異動的,
這個要設計資料更新及衝突處理機制.
因為SQL SERVER上的資料可能已經發生變化,

一個就是用來顯示查詢資料(readonly).
每次執行都重新取回最新資料.

不會由處理資料異動的CURSOR在USE AGIAN來用.
理由一樣,因為SQL SERVER上的資料可能已經發生變化,


這就是目前小弟測試的做法,
但已被衝突搞得七暈八素...

簡言之,
SQL就是沒有類似 USE AGAIN 這種方便麵就對了!
回頂端
檢視會員個人資料 發送私人訊息
syntech



註冊時間: 2003-05-16
文章: 4211
來自: Taipei,Taiwan

第 40 樓

發表發表於: 星期一 九月 23, 2013 12:41 pm    文章主題: 引言回覆

快10年前的討論:

http://vfp.sunyear.com.tw/viewtopic.php?t=915&highlight=DBF%28


硬要做USE AGAIN的方法:
http://vfp.sunyear.com.tw/viewtopic.php?t=918&highlight=DBF%28

_________________
如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問

請聯絡我們,也許我們幫得上忙
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 AIM Address
saint



註冊時間: 2003-07-14
文章: 211


第 41 樓

發表發表於: 星期一 九月 23, 2013 1:20 pm    文章主題: 引言回覆

引言回覆:

這就是目前小弟測試的做法,
但已被衝突搞得七暈八素...

簡言之,
SQL就是沒有類似 USE AGAIN 這種方便麵就對了!


其實早日學會SPT,對你未來換工具也會很有幫助的
就像當日張無忘學太極一樣

與其未來苦,不如趁現在想學,苦一次
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 MSN Messenger
syntech



註冊時間: 2003-05-16
文章: 4211
來自: Taipei,Taiwan

第 42 樓

發表發表於: 星期一 九月 23, 2013 2:02 pm    文章主題: 引言回覆

先備份記錄,
更新前,先刪掉異動的記錄,然後把備份記錄新增回去,
最後做TABLEUPDATE就不會發生錯誤了.



-----
看你敢不敢做..... Twisted Evil Twisted Evil Twisted Evil

_________________
如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問

請聯絡我們,也許我們幫得上忙


syntech 在 星期一 九月 23, 2013 2:04 pm 作了第 1 次修改
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 AIM Address
jerryclt



註冊時間: 2009-03-10
文章: 334
來自: 佛心來的

第 43 樓

發表發表於: 星期一 九月 23, 2013 2:02 pm    文章主題: 引言回覆

小弟出自內心倒是有一句話:
如果真要搞熟SPT,
是不是也要順便換個跑道?
像VB.NET之類的......
回頂端
檢視會員個人資料 發送私人訊息
jerryclt



註冊時間: 2009-03-10
文章: 334
來自: 佛心來的

第 44 樓

發表發表於: 星期一 九月 23, 2013 2:04 pm    文章主題: 引言回覆

syntech 寫到:
先備份記錄,
更新前,先刪掉異動的記錄,然後把備份記錄新增回去,
然後做TABLEUPDATE就不會發生錯誤了.



-----
看你敢不敢做.....


刪掉異動的記錄----- 當機 ------TABLEUPDATE
這......會死得很難看耶!
回頂端
檢視會員個人資料 發送私人訊息
syntech



註冊時間: 2003-05-16
文章: 4211
來自: Taipei,Taiwan

第 45 樓

發表發表於: 星期一 九月 23, 2013 2:10 pm    文章主題: 引言回覆

jerryclt 寫到:
小弟出自內心倒是有一句話:
如果真要搞熟SPT,
是不是也要順便換個跑道?
像VB.NET之類的......


前面說的第三種方式,
實際上就是其他工具,PHP,JAVA,VB.NET,delphi 的操作方式.

因為沒有辦法做成TABLE CURSOR (dbf,paradox table),
其他工具就是做成array或是 linked list 以模擬記錄,
然後下sql 命令更新後端資料庫.

_________________
如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問

請聯絡我們,也許我們幫得上忙
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 AIM Address
從之前的文章開始顯示:   
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區 所有的時間均為 台北時間 (GMT + 8 小時)
前往頁面 上一頁  1, 2, 3, 4, 5, 6, 7  下一頁
3頁(共7頁)

 
前往:  
無法 在這個版面發表文章
無法 在這個版面回覆文章
無法 在這個版面編輯文章
無法 在這個版面刪除文章
無法 在這個版面進行投票
無法 在這個版面附加檔案
無法 在這個版面下載檔案


Powered by phpBB © 2001, 2005 phpBB Group
正體中文語系由 phpbb-tw 維護製作