2010-11-09 43 views
4

我想在运行时创建的Access数据库和注册是使用下面的代码在ODBC.INI一个DSN注册为DSN:创建在运行时库和运行时

BOOL fCreated; 
fCreated = SQLConfigDataSource(NULL,ODBC_ADD_DSN, 
      "Microsoft Access Driver (*.mdb)", 
      "CREATE_DB=.\\ATest.mdb General\0"); 
printf("Database created : %d\n",fCreated); 

BOOL ReturnResult = SQLConfigDataSource (NULL, ODBC_CONFIG_DSN, 
      "Microsoft Access Driver (*.mdb)", 
      "DSN=TESTDSN_DSN\00DBQ=.\\ATest.mdb\ \ 
00FIL=MSAccess\00Description=TESTDSN_database\00UID=\00"); 

printf("Database registered : %d\n",ReturnResult); 

的第一个语句返回1,表示数据库已创建,但第二个返回0,表示它不能在ODBC.ini中注册为DataSourceName。任何人都可以告诉我为什么会发生这种情况,因为路径和名称都是正确的。

+0

尝试调用SQLInstallerError,看看是什么错误。 – 2010-11-09 19:23:50

+1

在第一次调用中不使用ODBC_ADD_SYS_DSN,或者第二次使用ODBC_CONFIG_DSN,即它们不应该匹配吗? – 2010-11-09 19:29:46

+0

我尝试过使用ODBC_CONFIG_DSN ....但仍不起作用 – Omayr 2010-11-09 19:31:47

回答

1

它在评论的问题已经提到,但我想提供一些更多的信息回答:

相反一些机器上创建的代码DSN的,它可能更容易对表DSN链接(以编程方式)在将访问数据库的客户端中。

如果客户端的MS Access,以及,你可以用DoCmd.TransferDatabase做到这一点:

Dim SourceDB As String 
Dim SourceTable As String 
Dim LocalTable As String 

'path to the database that contains the original table 
SourceDB = "C:\Your_Database.mdb" 

'name of the original table in the source database 
SourceTable = "Original_Table" 

'name of the linked table in the local database 
LocalTable = "Linked_Table"      

DoCmd.TransferDatabase acLink, "Microsoft Access", SourceDB, acTable, SourceTable, LocalTable