динамически создавать таблицы ссылок и переименовывать их в доступе 2007/2003 с помощью c #

1

Я ищу, чтобы иметь возможность динамически создавать связанные таблицы с С# в существующем файле accdb/mdb. Это возможно? Идея заключалась бы в том, что для каждой связанной таблицы ALREADY в данной базе данных доступа динамически создается новая связанная таблица, а затем вторая часть проблемы будет состоять в том, чтобы затем переименовать имя этой вновь созданной таблицы в ранее существующую таблицу.

Если его еще не ясно, происходит миграция из одной базы данных в другую, поэтому каждая предварительно существующая таблица имеет эквивалентную таблицу в новой базе данных, но она должна иметь то же имя в базе данных Access, чтобы запросы работали и т.д.

Возможно ли это?

РЕДАКТИРОВАТЬ:

Я создал тестовую базу данных, которая содержит одну связанную таблицу с базой данных ODBC. Я также создал простой запрос, который просто подсчитывает строки. Мой код С# сначала запускает запрос, а затем пытается изменить строку соединения с кодом:

    var dbe = new DBEngine();
    Database db = dbe.OpenDatabase(@"C:\Users\x339\Documents\Test.accdb");
    foreach (TableDef tbd in db.TableDefs)
    {
        if (tbd.Connect.Length > 5)
        {
            if (tbd.Connect.Substring(0, 5).Equals("ODBC;"))
            {
                tbd.Connect = tbd.Connect.Replace("ODBC;DSN=ILACFEUC;UID=cloaseuc;DBQ=ILACFEUC;DBQ=W;APA=T;EXC=F;FEN=T;QTO=F;FRC=10;FDL=10;LOB=T;RST=T;BTD=F;BNF=F;BAM=IfAllSuccessful;NUM=NLS;DPM=F;MTS=F;MDI=F;CSR=F;FWC=F;FBS=64000;TLO=0;MLD=0;ODA=F;;TABLE=CLOASEUCDBA.T_BASIC_POLICY", "ODBC;DSN=ILACFEUC;UID=cloaseuc;DBQ=ILACFEUC;DBQ=W;APA=T;EXC=F;FEN=T;QTO=F;FRC=10;FDL=10;LOB=T;RST=T;BTD=F;BNF=F;BAM=IfAllSuccessful;NUM=NLS;DPM=F;MTS=F;MDI=F;CSR=F;FWC=F;FBS=64000;TLO=0;MLD=0;ODA=F;;TABLE=CLOASEUCDBA.T_BILLING_INFORMATION");
                tbd.RefreshLink();
            }
        }
    }

однако он не работает. Если я открою базу данных в доступе, строка подключения не изменится?

Теги:
ms-access-2007
ms-access
oledb

1 ответ

0

Похоже, вы действительно хотите изменить внешнюю базу данных, к которой подключены существующие связанные таблицы. В этом случае вы можете сделать это на С# следующим образом:

// 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

var dbe = new DBEngine();
Database db = dbe.OpenDatabase(@"C:\Users\Public\FrontEnd.accdb");
foreach (TableDef tbd in db.TableDefs)
{
    if (tbd.Connect.Length > 10)
    {
        if (tbd.Connect.Substring(0, 10).Equals(";DATABASE="))
        {
            tbd.Connect = tbd.Connect.Replace("oldBackEnd.accdb", "newBackEnd.accdb");
            tbd.RefreshLink();
        }
    }
}
db.Close();
  • 0
    какая ссылка в коде? Я добавил ссылку на COM. Также я вижу, что Replace () принимает файлы accdb. Эти связанные таблицы являются связанными таблицами оракула ODBC, мигрирующими в таблицы сервера ODBC sql. Это все еще применимо?
  • 0
    @Andy Для связанных таблиц ODBC принцип тот же, но свойства .Connect будут выглядеть по-разному (они будут начинаться с ODBC; вместо ;DATABASE= ).
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню