繁体   English   中英

使用C#更改Access 2007中链接表的源表

[英]changing the sourcetable of a linked table in access 2007 with C#

我首先要问我是否正确地认为在下图中: 在此输入图像描述

'TABLE = CLOASEUCDBA.T_BASIC_POLICY'不是连接字符串的一部分? 实际上它是源表名?

我想将此更改为同一数据库上的另一个链接表。 连接字符串应该相同,并且ACCESS中显示的名称应该相同。 唯一的区别应该是它实际引用另一个表格,当然如果你打开表格,它将包含不同的字段和数据。

我的远程代码是:

    var dbe = new DBEngine();
    Database db = dbe.OpenDatabase(@"C:\Users\xxxx\Documents\Test.accdb");
    foreach (TableDef tbd in db.TableDefs)
    {

        if (tbd.Name.Contains("CLOASEUCDBA_T_BASIC_POLICY"))
        {
            tbd.SourceTableName = "CLOASEUCDBA_T_BILLING_INFORMATION"; 
        }
    }
    db.Close();

但是我得到了一个很大的胖COMException“一旦对象是集合的一部分,就无法设置此属性。” 我不确定为什么,我在网上找到的所有例子都是用VB / VBA编写的,而且我对此的曝光非常有限。 任何帮助表示赞赏。

编辑:我试图采用不同的路线,使用代码没有进一步的成功:

        if (tbd.Name.Contains("CLOASEUCDBA_T_BASIC_POLICY"))
        {
            var newtable = db.CreateTableDef("this is a new table");
            newtable.Name = "new table";
            newtable.Connect = tbd.Connect;
            newtable.SourceTableName = "CLOASEUCDBA_T_BILLING_INFORMATION";
            db.TableDefs.Append(newtable);
            //tbd.SourceTableName = "CLOASEUCDBA_T_BILLING_INFORMATION"; 
        }

在这种情况下,我收到错误“ODBC - 调用失败”。

由于我们不允许更改TableDefs集合中已存在的TableDef对象的SourceTableName ,因此我们需要创建一个新的TableDef对象, .Delete旧的对象,然后.Append新的对象:

// This code requires the following COM reference in your project:
//
//     Microsoft Office 14.0 Access Database Engine Object Library
//
// and the declaration
//
//     using Microsoft.Office.Interop.Access.Dao;
//
// at the top of the class file            

string tableDefName = "CLOASEUCDBA_T_BASIC_POLICY";
var dbe = new DBEngine();
Database db = dbe.OpenDatabase(@"C:\Users\xxxx\Documents\Test.accdb");
var tbdOld = db.TableDefs[tableDefName];
var tbdNew = db.CreateTableDef(tableDefName);
tbdNew.Connect = tbdOld.Connect;
tbdNew.SourceTableName = "CLOASEUCDBA_T_BILLING_INFORMATION";
db.TableDefs.Delete(tableDefName);  // remove the old TableDef ...
db.TableDefs.Append(tbdNew);        // ... and append the new one
db.Close();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM