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

MSSQL菜鳥需要您的指導...^^"
前往頁面 1, 2, 3, 4, 5, 6, 7  下一頁
 
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區
上一篇主題 :: 下一篇主題  
發表人 內容
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
文章: 3832
來自: Taipei,Taiwan

第 2 樓

發表發表於: 星期四 九月 12, 2013 2:34 pm    文章主題: 引言回覆

本地端 CURSOR:
SQLEXEC (X,"SELECT * FROM lt01 ", "_tmpf")

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

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



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

第 3 樓

發表發表於: 星期四 九月 12, 2013 3:48 pm    文章主題: 引言回覆

小弟之前也是這麼下...
_sql=SQLEXEC(_sqlhandle,"select * from lt01","_tmpf")
傳回 (-1)

這樣算正常嗎?
回頂端
檢視會員個人資料 發送私人訊息
syntech



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

第 4 樓

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

你的情況我不了解,
但是下就是這樣下,
已經在VFP6驗證過了.
可以產生 "_tmpf" 的CURSOR,

如果有問題,你應該先去驗證SQL 命令有沒有錯,
或是開 SQL PROFILER 看看命令有沒有確實傳過去執行.
或是你根本不是使用 MY_LOTO 資料庫( ODBC default 資料庫不是指向 my_loto)等等問題

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

請聯絡我們,也許我們幫得上忙
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 AIM Address
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
文章: 3832
來自: 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. 想學習系統規劃,想找系統架構的顧問

請聯絡我們,也許我們幫得上忙
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 AIM Address
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
文章: 3832
來自: Taipei,Taiwan

第 8 樓

發表發表於: 星期五 九月 13, 2013 11:12 am    文章主題: 引言回覆

那就是找不到你的 "DE01" TABLE.
可能是你登入的使用者無法存取 dbo.de01
通常是用另一個低權限的使用者 aaa,
只能存取 aaa.de01 ,無法存取 dbo.de01


你的USER 是 SA 或是 最少是這個資料庫的DBO 等級嗎?



--------
參考:
http://blog.xuite.net/tolarku/blog/29614077-SQL%EF%BC%9ADB+%E7%89%A9%E4%BB%B6%E7%9A%84%E5%90%8D%E7%A8%B1+-+Server.DB.Schema.Table

在SQL中,其完整的物件名稱包含[Server Name].[DataBase Name].[Owner Name].[Table Name],因為大部分的專案的資料表都來自同一個資料庫(DataBase) ,所以大家也就習慣在叫用資料表(Data Table)時,直接使用資料表名稱,也就忽略的其實物件的完整名稱是包含四個部分的。

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

請聯絡我們,也許我們幫得上忙
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 AIM Address
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
文章: 1532


第 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
文章: 1532


第 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
文章: 3832
來自: Taipei,Taiwan

第 14 樓

發表發表於: 星期六 九月 14, 2013 8:57 am    文章主題: 引言回覆

那不就是第4樓最後一句?

你的使用者的預設資料庫不是MY_LOTO ?

你做了ODBC 資料來源 ,然後不用SQLCONNECT,
改用SQLSTRINGCONNECT, 但是沒指定使用資料庫,
變成用到預設資料庫,導致TABLE開不了?

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

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



註冊時間: 2003-05-16
文章: 3832
來自: 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 次修改
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 AIM Address
從之前的文章開始顯示:   
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區 所有的時間均為 台北時間 (GMT + 8 小時)
前往頁面 1, 2, 3, 4, 5, 6, 7  下一頁
1頁(共7頁)

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


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