|
VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
|
上一篇主題 :: 下一篇主題 |
發表人 |
內容 |
jerryclt
註冊時間: 2009-03-10 文章: 334 來自: 佛心來的
第 1 樓
|
發表於: 星期四 九月 12, 2013 11:43 am 文章主題: MSSQL菜鳥需要您的指導...^^" |
|
|
小弟忘了不知怎麼搞的,
用VFP上移精靈將 Loto.dbc 丟給了 MsSQL server,如圖一
My_loto底下出現了兩個檔案:
dbo.br01 / dbo.lt01
接下來小弟在VFP命令列下:
_sqlhandle=SQLStringConnect('dsn=MsSQL; uid=SQSERVER; pwd=1234')
傳回 (1)
_sql=SQLSETPROP(_sqlhandle,"Transactions",2)
傳回 (1)
現在小弟想要下SELECT-SQL將 lt01 的資料放在一個 cursor _tmpf 裡,
請問該如何做? |
|
回頂端 |
|
|
syntech
註冊時間: 2003-05-16 文章: 4213 來自: Taipei,Taiwan
第 2 樓
|
發表於: 星期四 九月 12, 2013 2:34 pm 文章主題: |
|
|
本地端 CURSOR:
SQLEXEC (X,"SELECT * FROM lt01 ", "_tmpf") _________________ 如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問
請聯絡我們,也許我們幫得上忙 |
|
回頂端 |
|
|
jerryclt
註冊時間: 2009-03-10 文章: 334 來自: 佛心來的
第 3 樓
|
發表於: 星期四 九月 12, 2013 3:48 pm 文章主題: |
|
|
小弟之前也是這麼下...
_sql=SQLEXEC(_sqlhandle,"select * from lt01","_tmpf")
傳回 (-1)
這樣算正常嗎? |
|
回頂端 |
|
|
syntech
註冊時間: 2003-05-16 文章: 4213 來自: Taipei,Taiwan
第 4 樓
|
發表於: 星期四 九月 12, 2013 4:16 pm 文章主題: |
|
|
你的情況我不了解,
但是下就是這樣下,
已經在VFP6驗證過了.
可以產生 "_tmpf" 的CURSOR,
如果有問題,你應該先去驗證SQL 命令有沒有錯,
或是開 SQL PROFILER 看看命令有沒有確實傳過去執行.
或是你根本不是使用 MY_LOTO 資料庫( ODBC default 資料庫不是指向 my_loto)等等問題 _________________ 如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問
請聯絡我們,也許我們幫得上忙 |
|
回頂端 |
|
|
jerryclt
註冊時間: 2009-03-10 文章: 334 來自: 佛心來的
第 5 樓
|
發表於: 星期五 九月 13, 2013 10:17 am 文章主題: |
|
|
小弟的這邊是如下圖:
然後在命令列執行:
_sqlhandle=SQLSTRINGCONNECT('dsn=MsSQL; uid=id_name; pwd=1234')
?_sqlhandle ( = 1 應該是連上了沒問題吧? )
_sql=SQLSETPROP(_sqlhandle,"Transactions",2)
?_sql ( = 1 )
_sql=SQLEXEC(_sqlhandle,"select * from de01","_tmpf")
?_sql ( = -1 )
這是失敗了? |
|
回頂端 |
|
|
syntech
註冊時間: 2003-05-16 文章: 4213 來自: Taipei,Taiwan
第 6 樓
|
發表於: 星期五 九月 13, 2013 10:29 am 文章主題: |
|
|
你可以加上
代碼: |
IF _sql <0
=AERROR(sqlerr)
=MESSAGEBOX("ERROR CODE:"+STR(sqlerr[1]))
If sqlerr[1] = 1526 && ODBC 發生錯誤
=messagebox("ERROR CODE:"+STR(sqlerr[1,5])+" "+CHR(13)+sqlerr[1,2])
endif
ENDIF
|
看看真正的錯誤訊息是甚麼. _________________ 如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問
請聯絡我們,也許我們幫得上忙 |
|
回頂端 |
|
|
jerryclt
註冊時間: 2009-03-10 文章: 334 來自: 佛心來的
第 7 樓
|
發表於: 星期五 九月 13, 2013 10:50 am 文章主題: |
|
|
ERROR CODE: 208
Connectivity error: [Microsoft][ODBC SQL Server Driver][SQL Server]無效的物件名稱 'de01'。
= =" |
|
回頂端 |
|
|
syntech
註冊時間: 2003-05-16 文章: 4213 來自: Taipei,Taiwan
第 8 樓
|
|
回頂端 |
|
|
jerryclt
註冊時間: 2009-03-10 文章: 334 來自: 佛心來的
第 9 樓
|
發表於: 星期五 九月 13, 2013 5:00 pm 文章主題: |
|
|
_sql=SQLEXEC(_sqlhandle,"select * from lt01","_tmpf") --> -1
_sql=SQLEXEC(_sqlhandle,"select * from dbo.lt01","_tmpf") --> -1
_sql=SQLEXEC(_sqlhandle,"select * from My_loto.dbo.lt01","_tmpf") --> 1 成功了...(不知為什麼 ??) |
|
回頂端 |
|
|
jerryclt
註冊時間: 2009-03-10 文章: 334 來自: 佛心來的
第 10 樓
|
發表於: 星期五 九月 13, 2013 5:48 pm 文章主題: |
|
|
再請教一個觀念,
SQL SERVER的存在,
簡單來講是不是只有在 SELECT-SQL / UPDATE-SQL / DELETE-SQL 時才會去動用到 SQLEXEC()...這類的函式,
其他時候依然是用我們平常用的VFP一般函式/程序(像use,scatter,gather...等)?
比如可以
USE (SQLSERVER下的一個TABLE) ALIAS T1 ORDER field1
這樣嗎? |
|
回頂端 |
|
|
ckp6250
註冊時間: 2004-07-30 文章: 1645
第 11 樓
|
發表於: 星期五 九月 13, 2013 6:08 pm 文章主題: |
|
|
jerryclt 寫到: |
_sql=SQLEXEC(_sqlhandle,"select * from My_loto.dbo.lt01","_tmpf") --> 1 成功了...(不知為什麼 ??) |
問題大概或許可能是出在這
_sqlhandle=SQLSTRINGCONNECT('dsn=MsSQL; uid=id_name; pwd=1234')
沒有指定 database |
|
回頂端 |
|
|
ckp6250
註冊時間: 2004-07-30 文章: 1645
第 12 樓
|
發表於: 星期五 九月 13, 2013 6:10 pm 文章主題: |
|
|
jerryclt 寫到: |
比如可以
USE (SQLSERVER下的一個TABLE) ALIAS T1 ORDER field1
這樣嗎? |
remote view 可以做到一半
USE (SQLSERVER下的一個TABLE) ALIAS T1 (沒法下 order)
但,不很建議用 remote view |
|
回頂端 |
|
|
jerryclt
註冊時間: 2009-03-10 文章: 334 來自: 佛心來的
第 13 樓
|
發表於: 星期六 九月 14, 2013 6:48 am 文章主題: |
|
|
沒錯...
_sqlhandle=SQLSTRINGCONNECT('dsn=MsSQL; uid=id_name; pwd=1234; database=My_loto')
_sql=SQLEXEC(_sqlhandle,"select * from lt01","_tmpf")
這樣就OK了!
不過SQL應用上感覺還是有很多怪怪的地方,
待小弟先找找各方的說詞與用法研究一番,
再來請教經驗者! |
|
回頂端 |
|
|
syntech
註冊時間: 2003-05-16 文章: 4213 來自: Taipei,Taiwan
第 14 樓
|
發表於: 星期六 九月 14, 2013 8:57 am 文章主題: |
|
|
那不就是第4樓最後一句?
你的使用者的預設資料庫不是MY_LOTO ?
你做了ODBC 資料來源 ,然後不用SQLCONNECT,
改用SQLSTRINGCONNECT, 但是沒指定使用資料庫,
變成用到預設資料庫,導致TABLE開不了? _________________ 如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問
請聯絡我們,也許我們幫得上忙 |
|
回頂端 |
|
|
syntech
註冊時間: 2003-05-16 文章: 4213 來自: Taipei,Taiwan
第 15 樓
|
發表於: 星期六 九月 14, 2013 9:28 am 文章主題: |
|
|
jerryclt 寫到: | 再請教一個觀念,
SQL SERVER的存在,
簡單來講是不是只有在 SELECT-SQL / UPDATE-SQL / DELETE-SQL 時才會去動用到 SQLEXEC()...這類的函式,
其他時候依然是用我們平常用的VFP一般函式/程序(像use,scatter,gather...等)?
|
可以這樣說,
由 SQLEXEC() 抓回來的CURSOR可以像一般的CURSOR一樣以FOXPRO 的語法操作資料
(但是可以使用的語法是有限制的,有些命令不能用).
jerryclt 寫到: |
比如可以
USE (SQLSERVER下的一個TABLE) ALIAS T1 ORDER field1
這樣嗎? |
是,但是不是這麼簡單.
你說的是VFP的 Remote Dataset (相對於vfp自己的dbc資料庫的 (local)dataset ).
你可以用建立一個與遠端SQL資料庫一致的 DBC 資料庫操作資料,
開啟檔案就是直接用USE.
VFP 操作遠端資料有三種作法:
1.VFP 接手底層對應機制,限制也最多的 Remote Dataset.
2.自己操作底層對應機制的 SQL pass-through 技術
3.自己使用 SQLEXEX() 直接下命令操作資料
第一種方式利用VFP的精靈建立對應關係,
以後就可以像操作VFP DBC一樣,
新增,修改,查詢 都可以用傳統命令操作,
VFP會接手底層溝通,建立正確的INSERT,UPDATE,DELETE命令更新資料.
代碼: |
opendatabse sql001
use table001
append blank
replace field01 with 'a'
delete for field01 with 'b'
use in table01
closedatabase sql001
|
第二種方式其實就是不透過精靈,手動建立底層對應.
代碼: |
SET MULTILOCKS ON
store sqlstringconnect("dsn=sql001; userid=sa; pwd=123456") to xconnhandle
SQLEXEC(xconnhandle, 'use sql001')
SQLEXEC(xconnhandle, 'SELECT * FROM table001' ,'table001')
=CURSORSETPROP("Buffering", 5 , 'table001' )
=CURSORSETPROP("Tables",'table001.field01','table001')
=CURSORSETPROP("KeyFieldList",[自己看 SPT 說明..........],'table001')
=CURSORSETPROP("UpdatableFieldList" ,[自己看 SPT 說明..........],'table001')
=CURSORSETPROP("UpdateNameList",[自己看 SPT 說明..........],'table001')
=CURSORSETPROP("SendUpdates" ,.t.,'table001')
select TABLE001
append blank
replace field01 with 'a'
delete for field01 with 'b'
= TABLEUPDATE(.t. )
sqldisconnect(xconnhandle)
|
第三種就是手動下命令:
代碼: |
SET MULTILOCKS ON
store sqlstringconnect("dsn=sql001; userid=sa; pwd=123456") to xconnhandle
SQLEXEC(xconnhandle, 'use sql001')
SQLEXEC(xconnhandle, "INSERT INTO TABLE001 (FIELD01)VALUES ('a')" )
SQLEXEC(xconnhandle, "DELETE FROM TABLE001 WHERE FIELD01 = 'b' " )
sqldisconnect(xconnhandle)
|
_________________ 如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問
請聯絡我們,也許我們幫得上忙
syntech 在 星期六 九月 14, 2013 9:54 am 作了第 2 次修改 |
|
回頂端 |
|
|
|
|
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
|
|