各位高手:
我遇到一個問題,我安裝一個用 Delphi 寫的小程式后,原本能用的PB程式就不能連接上資料庫了。
請教各位高手,PB連接SQLserver資料的原理是什么?牽涉到哪些動態庫檔案或系統配置資訊?請各位不吝賜教。謝謝!
uj5u.com熱心網友回復:
PB與各種資料庫連接!!1.Power script 語言里的事務處理物件怎么理解
PowerBuilder
程式與資料庫之間傳遞資訊的一個結構變數,共有15個成員.你可以詳細串列它的所有成員看看它的組成,PB的應用程式會初始化一個全域的結構體變數,SQLCA,當然你也可以自定義一個自己的事務物件.
1 DBMS string 所使用的資料庫管理系統的名字,如Sybase,Oracle,ODBC。
2 Database string 要連接的資料庫名字。
3 UserID string 連接資料庫所用的用戶名。有的DBMS不需要此項。
4 DBPass string 用戶連接資料庫的口令。
5 Lock string 這是資料庫的保護級別,一般不必給出。
6 LogID string 登錄到資料庫服務器上的用戶名,有的DBMS不需要此項,但Sybase和Oracle需要指定這個引數。
7 LogPass string 登錄到資料庫服務器上的用戶口令。這個屬性可設可不設,但Sybase和Oracle需要指定口令。
8 ServerName string 資料庫服務器名。
9 AutoCommit boolean
指定是否將資料庫設定成自動提交所有事務。默認是False,也就是說,必須在應用程式中進行事務管理,并在適當的時候對資料庫提交事務。如果選擇True,則每個事務都由系統自動提交。
10 DBParm string 用于向資料庫傳遞特殊資訊的屬性。
11 SQLCode long 指示最近一次SQL操作失敗或成功。它的取值為: 回傳結果 0 無錯誤。 -1 出現一個錯誤。 100
沒有檢索到資料。
12 SQLNRows long 最近一次SQL操作影響的行數,資料庫不同其含義也不同。
13 SQLDBCode long 資料庫錯誤代碼。不同的資料庫的含義不同。
14 SQLErrText string 相應于SQLDBCode屬性中錯誤碼的文字說明。
15 SQLReturnData string 回傳DBMS執行SQL的附加資訊,不同的DBMS其值不同。
2.我常見到做好的PB程式使用.ini檔案來控制與資料庫連接,可以方便的進行應用程式移植只需修改其中與資料庫連接引數即可,我想問這些.ini檔案只能使用手工撰寫嗎,我見到很多.ini檔案引數極多不象手寫好象是機器生成的,不知道如何生成啊?請大家指教
1、其實PB中在新建---點TOOL----FILE EDIT 可以生成(編輯)INI檔案。最直接就是工具列中的EDIT圖示。
2、機器生成代碼是:點DATABASE圖示-----選擇連接方式。如:選 MSS MICROSOFT SQL SERVER 右鍵-NEW
PROFILE 按要求填定一些引數后在--PREVIEW中可以看到代碼,把它復制到INI檔案中就行了。
3.編程經驗--PB資料庫連接
通常在使用PB和資料庫管理系統(DBMS)連接時,使用兩種方式:
一、開放資料源介面(ODBC)連接
ODBC是通過支持美國微軟公司開放服務結構(WOSA,Windows Open Services
Architecture)中的一部分.在PB 中通過配置
SQLCA.DBMS=‘ODBC’物件的屬性可使應用程式通過ODBC連接到資料庫。
ODBC的具體配置包含了資料源、驅動程式型別、緩沖池等各種細節引數。
例子:
SQLCA.DBMS = "ODBC"
SQLCA.AutoCommit = False
SQLCA.DBParm="ConnectString='DSN=xxx_dsn;UID=xxx;PWD="',ConnectOption='SQL_DRIVER_CONNECT,SQL_DRIVER_NOPROMPT'"
二、專用資料庫介面
每個資料庫管理系統(DBMS)均提供相應的客戶端驅動,為了更好的服務于資料庫。
在這里我們使用的是Microsoft sqlserver 2000 的客戶端程式。通過設定 SQLCA.DBMS ="MSS
Microsoft SQL Server" 使客戶端通過專用資料庫介面連接到資料庫。
該類介面的引數配置除了服務器名、資料庫名、LogId、LogPass外還包含了連接協議等用戶驗證方式等,可通過服務器端或客戶端的配置程式進行配置。
SQLCA.dbms= "MSS Microsoft SQL Server" //介面型別
SQLCA.database= "master" //資料庫
SQLCA.userid= ""
SQLCA.dbpass= ""
SQLCA.logid= "sa"
SQLCA.logpass= "xxxx"
SQLCA.serverName= ".\xxx"//服務器名
SQLCA.dbparm= "CommitOnDisconnect='No'"
SQLCA.autocommit= false
以上介紹的是PB與資料庫連接時常用的方法。
往往根據不同的應用環境選擇連接方式,
在單機環境下多采用的是ODBC連接,因為在發行環節上相對要容易些。在網路環境下多采用專用資料庫連接,這樣可以提高系統的可靠性與執行效率。專用資料庫的發行環節往往要配上相應DBMS客戶端的動態連接庫(DLL),并把它存放在應用程式當前路徑,或存放在%SYSTEM%下面。
我在開發中用到了對BLOB型別的資料進行存取,大家都知道POWERBUILDER
對BLOB欄位的支持是有限的,每次只能處理32KB的資料塊,如果一個檔案大于32K必須撰寫相應的程式進行處理。當時的開發環境是PWOERBUILDER
9.0 + MS SQL SERVER 2000 +WINDOWS2000 。
當通過ODBC連接資料讀取BLOB欄位時,通過MESSAGEBOX彈出的位元組數,觀察到只要超過32K的檔案出現,LEN(BLOB)就會出錯,始侄訓傳是32K位元組的長度。當時很令人費解,隨即懷疑系統問題,檢查病毒,重新安裝相應的開發環境,結果依舊,這才懷疑到ODBC可能存在問題,因為微軟是問題專家,同時也是解決問題的專家。當通過SQLSERVER
專用介面連接后,一切正常。由此證明了ODBC 與專用資料庫介面之間存在著一定的問題。
由此可說明各種同類技術之間的細微差別,可能會給我們帶來意想不到的問題。在開發時還需謹慎、全面的考慮所用技術的可靠性。
uj5u.com熱心網友回復:
主要看你的pb是以何種方式連接sql server
odbc
ole db
pb專用介面
uj5u.com熱心網友回復:
有可能你的Delphi小程式修改了PB所需要的ODBC資料源uj5u.com熱心網友回復:
我就是不知道那個小程式修改了哪個檔案或是配置資訊?該如何處理?uj5u.com熱心網友回復:
個人感覺這2個程式好像沒有什么沖突。再檢查下PB連接資料庫的代碼uj5u.com熱心網友回復:
檢查下PB的源代碼,看看資料庫連接那塊是不是用的ODBC,然后打開電腦的ODBC資料源管理器,檢查下資料源是否正確uj5u.com熱心網友回復:
就是呼叫連接庫的API函式而已uj5u.com熱心網友回復:
感覺的從你的PB連接資料庫的方式來解決這個問題uj5u.com熱心網友回復:
謝謝諸位了!轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/85279.html
標籤:數據庫相關
上一篇:求PB申明API的工具
下一篇:如何將進度條從藍色改為綠色
