|
VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
|
上一篇主題 :: 下一篇主題 |
發表人 |
內容 |
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 文章: 1644
第 33 樓
|
發表於: 星期六 九月 21, 2013 11:08 am 文章主題: |
|
|
建議您把 syntech 所寫的都再仔細看三遍
就有答案了 |
|
回頂端 |
|
|
jerryclt
註冊時間: 2009-03-10 文章: 334 來自: 佛心來的
第 34 樓
|
發表於: 星期日 九月 22, 2013 9:13 am 文章主題: |
|
|
恕小弟愚魯,
再看三遍也看不出有和小弟欲請教之事有關...
可以點明是哪一段嗎? |
|
回頂端 |
|
|
syntech
註冊時間: 2003-05-16 文章: 4212 來自: 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. 想學習系統規劃,想找系統架構的顧問
請聯絡我們,也許我們幫得上忙 |
|
回頂端 |
|
|
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 文章: 4212 來自: 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 次修改 |
|
回頂端 |
|
|
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 一次 |
|
回頂端 |
|
|
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 文章: 4212 來自: Taipei,Taiwan
第 40 樓
|
|
回頂端 |
|
|
saint
註冊時間: 2003-07-14 文章: 211
第 41 樓
|
發表於: 星期一 九月 23, 2013 1:20 pm 文章主題: |
|
|
引言回覆: |
這就是目前小弟測試的做法,
但已被衝突搞得七暈八素...
簡言之,
SQL就是沒有類似 USE AGAIN 這種方便麵就對了! |
其實早日學會SPT,對你未來換工具也會很有幫助的
就像當日張無忘學太極一樣
與其未來苦,不如趁現在想學,苦一次 |
|
回頂端 |
|
|
syntech
註冊時間: 2003-05-16 文章: 4212 來自: Taipei,Taiwan
第 42 樓
|
發表於: 星期一 九月 23, 2013 2:02 pm 文章主題: |
|
|
先備份記錄,
更新前,先刪掉異動的記錄,然後把備份記錄新增回去,
最後做TABLEUPDATE就不會發生錯誤了.
-----
看你敢不敢做..... _________________ 如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問
請聯絡我們,也許我們幫得上忙
syntech 在 星期一 九月 23, 2013 2:04 pm 作了第 1 次修改 |
|
回頂端 |
|
|
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 文章: 4212 來自: 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. 想學習系統規劃,想找系統架構的顧問
請聯絡我們,也許我們幫得上忙 |
|
回頂端 |
|
|
|
|
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
|
|