2009-10-08 61 views
1

我是PowerBuilder的新手。PowerBuilder DSN創建

我想從MSAccess表中檢索數據並將其更新到相應的SQL表。我無法爲MSAccess創建永久性DSN,因爲我必須使用相同的表信息選擇不同的MSAccess文件。我可以爲SQL服務器創建一個永久DSN。

當選擇MSAccess文件並使用PowerBuilder將所有表數據推送到SQL時,請幫助我動態創建DSN。

如果可能的話,也給完整的PowerBuilder代碼來完成問題。

回答

0
  • ODBC管理
  • 手動創建DSN在註冊表中找到
  • 導出註冊表語法爲.reg文件
  • 閱讀條目和PB
  • 動態編輯.reg文件採用PB的 RegistrySet (key, valuename, valuetype, value)

一旦你得到了你的DSN成立,有很多選擇,PU

  • 寫回註冊表將數據從一個數據庫傳輸到另一個數據庫

    你需要PB中有兩個transaction對象,每個對象指向它自己的數據庫。然後,您可以使用一個Data Pipeline對象來管理實際的數據傳輸。

  • 4

    在Access中,我們強烈建議不要使用DSN,因爲對於需要配置的用戶而言,這是一件少事,用戶需要做的事情更少。 Using DSN-Less Connections您應該看看PowerBuilder是否有類似的選項。

    +0

    我們停止使用,正是因爲DSN一直得到搞砸了,通常是通過誰找到的ODBC管理工具 - 「只是搞砸圍繞」用戶的DSN。我們已經使用動態構建的連接字符串進行了簡單的ODBC連接。見www.connectionstrings.com或幫助。 – DaveE 2009-10-20 05:38:10

    1

    您想要執行Tony引用的DSNLess連接。我在PBDJ上展示了一個例子,並在Sybase的CodeXchange上提供了一個代碼示例。

    0

    我正在使用這段代碼,試試吧!

    //// Profile access databases accdb format 
    SQLCA.DBMS = "OLE DB" 
    SQLCA.AutoCommit = False 
    SQLCA.DBParm = "PROVIDER='Microsoft.ACE.OLEDB.12.0',DATASOURCE='C:\databasename.accdb',DelimitIdentifier='No',CommitOnDisconnect='No'" 
    
    Connect using SQLCA; 
    If SQLCA.SQLCode = 0 Then 
        Open (w_rsre_frame) 
    else 
        MessageBox ("Cannot Connect to Database", SQLCA.SQLErrText) 
    End If 
    

    //// Profile access databases mdb format 
    transaction aTrx 
    long resu 
    string database 
    database = "C:\databasename.mdb" 
    aTrx = create transaction 
    aTrx.DBMS = "OLE DB" 
    aTrx.AutoCommit = True 
    aTrx.DBParm = "PROVIDER='Microsoft.Jet.OLEDB.4.0',DATASOURCE='"+database+"',PBMaxBlobSize=100000,StaticBind='No',PBNoCatalog='YES'" 
    connect using aTrx ; 
    if atrx.sqldbcode = 0 then 
        messagebox("","Connection success to database") 
    else 
        messagebox("Error code: "+string(atrx.sqlcode),atrx.sqlerrtext+ " DB Code Error: "+string(atrx.sqldbcode)) 
    end if 
    // do stuff... 
    destroy atrx