我有一个Access 2007数据库c:\myDb.accdb
,其中一个名为MASTER_TABLE
的表链接到名为TBL.MASTER_TABLE
的DB2数据库中名为PRODUCTION
的表。
当我打开MASTER_TABLE
时,系统会提示我输入PRODUCTION
数据库的登录凭据。
我在C#中编写了一个使用MASTER_TABLE
表的应用程序,当然它会提示用户登录。为了避免这种情况,我需要将链接表复制到LOCAL_MASTER_TABLE
中名为myDb.accdb
的现有本地表。
此副本需要自动化,因此需要以编程方式传递用户名/密码,而不是提示提示。
在Access中,我尝试了以下方法来创建本地副本,但是如果字段被编入索引则不会捕获:
DoCmd.TransferDatabase acImport, "ODBC Database", "ODBC; DSN=PRODUCTION; UID=username; PWD=password; LANGUAGE=us_english; Database=PRODUCTION", acTable, "TBL.MASTER_TABLE", "LOCAL_MASTER_TABLE"
我也试过这个:How to copy a linked table to a local table in Ms Access programmatically?
但我收到错误3001: Arguements are of the wrong type, are out of acceptable range, or are in conflict with one another
我正在使用以下内容调用CopySchemaAndData_ADOX
函数:
Call CopySchemaAndData_ADOX(TBL.MASTER_TABLE, LOCAL_MASTER_TABLE)
无论如何,任何人都可以想到在VBA或可能在C#中执行此操作的方法吗?或者为什么我在我试图使用的代码中收到错误?
谢谢!
答案 0 :(得分:3)
在Access会话中使用“make table”查询。
SELECT *
INTO LOCAL_MASTER_TABLE
FROM MASTER_TABLE;
执行该查询时,可能需要提供凭据。
由于MASTER_TABLE
是一个工作链接表,因此将使用与Access兼容的字段类型创建LOCAL_MASTER_TABLE
。
原则上该建议不合适,因为您希望自动化导入并避免每次都要求用户提供DB2凭据。
但是你确实有DoCmd.TransferDatabase
工作,除了它没有拉入索引。因此,我建议您执行TransferDatabase
,然后执行CREATE INDEX语句以获取所需内容。