PowerBuilder DSN创作

时间:2009-10-08 07:27:03

标签: sql-server ms-access powerbuilder

我是PowerBuilder的新手。

我想从MSAccess表中检索数据并将其更新为相应的SQL表。我无法为MSAccess创建永久DSN,因为我必须选择具有相同表信息的不同MSAccess文件。我可以为SQL服务器创建一个永久DSN。

请帮助我在选择MSAccess文件时动态创建DSN,并使用PowerBuilder将所有表数据推送到SQL。

如果可能的话,还要提供完整的PowerBuilder代码来解决问题。

4 个答案:

答案 0 :(得分:4)

在Access中,我们强烈建议不要使用DSN,因为对于某人来说,配置必须少一些,而对于用户来说,减少一件事情就少了。 Using DSN-Less Connections你应该看看PowerBuilder是否有类似的选择。

答案 1 :(得分:1)

  • 在ODBC管理员中手动创建DSN
  • 在注册表中找到该条目
  • 将注册表语法导出为.reg文件
  • 在PB
  • 中动态读取和编辑.reg文件
  • 使用PB的RegistrySet ( key, valuename, valuetype, value )
  • 将其写回注册表

一旦设置了DSN,就有很多选项可以将数据从一个数据库推送到另一个数据库。

PB中需要两个transaction个对象,每个对象都指向自己的数据库。然后,您可以使用Data Pipeline对象来管理实际的数据传输。

答案 2 :(得分:1)

您想要执行Tony引用的DSN Less连接。我展示了在PBDJ执行此操作的示例,并在Sybase CodeXchange上提供了代码示例。

答案 3 :(得分: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