2009-10-08 90 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