天天看點

PB9使用ODBC連接配接MSSQLSERVER的問題

因工作需要,近期将PB9連接配接MSSQL的資料接口由專用的"MSS Microsoft SQL Server"改為“ODBC”,結果出現了一堆的問題,項目告一段落進行一下問題彙總。

1、SQL子查詢中有參數則該SQL不能執行

SELECT * FROM T1 WHERE ID IN(SELECT ID FROM T2 WHERE T2.NAME = :S)
           

該語句在子查詢中使用了一個參數,如果該SQL用于資料視窗中,則無法檢索資料,包括EXISTS子查詢也是如此

解決方法:

SQLCA.DBMS = "ODBC"
SQLCA.Database = ls_param[10]
SQLCA.ServerName = ls_param[7]
SQLCA.LogId = ls_param[8]
SQLCA.LogPass = ls_param[9]
SQLCA.AutoCommit = False
SQLCA.Lock = "RC"
SQLCA.DBParm = "ConnectString='" + &
                "UID=" + ls_param[8] + ";" + &
				"PWD=" + ls_param[9] + ";" + &
				"Driver={SQL Server Native Client 10.0};" + &
				"Server=" + ls_param[7] + ";" + &
				"Database=" + ls_param[10] + ";" + &
				"APP=MYAPP;" + &
				"WSID=" + gs_computer + "'," + &
				"CommitOnDisconnect='No',StaticBind=0,DisableBind=1"
           

在SQLCA.DBPARM的結尾處增加StaticBind=0,DisableBind=1兩個選項即可

2、SELECTBLOB一個IMAGE字段時,僅能傳回32767位元組

這個問題網上搜到的結果全部都是修改PBODB90.INI中的PBMaxBlobSize='32767'和PBMaxTextSize='32767'兩項,删除、注釋、修改為0等方法,嘗試過N次不行後,發現需要把pbodb90.dll檔案複制到程式所在檔案夾下就可以了,因為是一個老項目,該放入的DLL基本上都已經放入了,是以沒考慮過DLL檔案的問題,走了一夜的彎路。

3、當字段類型為VARCHAR(MAX)時,資料視窗不能識别資料寬度,檢索不到資料

SQL2008的VARCHAR類型寬度範圍是1-8000,NVARCHAR類型寬度範圍是1-4000,當使用MAX時可以達到2G,但資料視窗不能識别超過8000的字段,是以資料寬度會顯示為char(0),并且無資料傳回。隻能修改表結構,不要使用MAX或使用IMAGE字段存儲

繼續閱讀