Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Access
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.09.2016, 06:31   #1
ayselya1992
 
Регистрация: 09.08.2016
Сообщений: 6
По умолчанию Создание модулей VBA в Access

Всем доброго времени суток! У меня есть очень большая просьба тем кто работал с модулями VBA в Access. Дело в том что мне один знакомый человек написал модуль для слияния двух БД с одинаковой структурой и данными (БД прикреплена). Данный модуль сам создавал ключевые поля в таблицах, а также делал связь этих ключей так как привязаны поля в схеме связи. Все работало до тех пор пока не появилась необходимость сделать изменения в БД, то есть нужно было добавить еще одну таблицу и поменять схему связи... Я пыталась редактировать модуль под новую структуру... Гуглила, искала в интернете вроде бы сделала так как должно быть, но модуль все равно не работает.
Люди добрые помогите пожалуйста разобраться, что я сделала не так...
Вложения
Тип файла: rar DataBase1.0.rar (553.9 Кб, 22 просмотров)
ayselya1992 вне форума Ответить с цитированием
Старый 08.09.2016, 08:22   #2
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

У Вас количество полей в запросах не совпадает.
Для strTableName = FindTable(astrTables(0)) количесто полей в INSERT INTO = 48 и в SELECTe = 48, а для strTableName = FindTable(astrTables(1)) в INSERT INTO = 9, SELECT = 11
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 08.09.2016, 09:04   #3
ayselya1992
 
Регистрация: 09.08.2016
Сообщений: 6
По умолчанию

У меня для strTableName = FindTable(astrTables(0)) в INSERT INTO tDataBase10 (OldID, a, b, c, d, e, f, g, bb, cc, dd, h, i, kk, j, k, l, m, n, o, ll, p, q, r, s, t, u, v, mm, w, kkk, lll, mmm, nn, oo, qq, rr, ss, tt, uu, vv, ww, xx, yy, ff, gg, jj, hh) " & _ так написано, а в SELECT ID, a, b, c, d, e, f, g, bb, cc, dd, h, i, kk, j, k, l, m, n, o, ll, p, q, r, s, t, u, v, mm, w, kkk, lll, mmm, nn, oo, qq, rr, ss, tt, uu, vv, ww, xx, yy, ff, gg, jj, hh " & _ так написано. то есть мне переправить на INSERT INTO = 48 и в SELECTe = 48?
ayselya1992 вне форума Ответить с цитированием
Старый 08.09.2016, 09:37   #4
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Верно, для strTableName = FindTable(astrTables(0)) у Вас
Код:
strTableName = FindTable(astrTables(0))
        .CommandText = "INSERT INTO tDataBase10 (OldID, a, b, c, d, e, f, g, bb, cc, dd, h, i, kk, j, k, l, m, n, o, ll, p, q, r, 
s, t, u, v, mm, w, kkk, lll, mmm, nn, oo, qq, rr, ss, tt, uu, vv, ww, xx, yy, ff, gg, jj, hh) " & _
                       "SELECT ID, a, b, c, d, e, f, g, bb, cc, dd, h, i, kk, j, k, l, m, n, o, ll, p, q, r, 
s, t, u, v, mm, w, kkk, lll, mmm, nn, oo, qq, rr, ss, tt, uu, vv, ww, xx, yy, ff, gg, jj, hh " & _
                       "FROM [" & strTableName & "];"
тоесть
Код:
INSERT INTO tDataBase10 (OldID, a, b, c, d, e, f, g, bb, cc, dd, h, i, kk, j, k, l, m, n, o, ll, p,
 q, r, s, t, u, v, mm, w, kkk, lll, mmm, nn, oo, qq, rr, ss, tt, uu, vv, ww, xx, yy, ff, gg, jj, hh)
SELECT (ID, a, b, c, d, e, f, g, bb, cc, dd, h, i, kk, j, k, l, m, n, o, ll, p,
q, r, s, t, u, v, mm, w, kkk, lll, mmm, nn, oo, qq, rr, ss, tt, uu, vv, ww, xx, yy, ff, gg, jj, hh) 
FROM [" & strTableName & "];
сравниваем столбцы
Код:
(OldID, a, b, c, d, e, f, g, bb, cc, dd, h, i, kk, j, k, l, m, n, o, <= 20
ll, p, q, r, s, t, u, v, mm, w, kkk, lll, mmm, nn, oo, qq, rr, ss, tt, uu, <= 20
 vv, ww, xx, yy, ff, gg, jj, hh)<= 8

(ID,    a, b, c, d, e, f, g, bb, cc, dd, h, i, kk, j, k, l, m, n, o, <= 20
ll, p, q, r, s, t, u, v, mm, w, kkk, lll, mmm, nn, oo, qq, rr, ss, tt, uu, <= 20
vv, ww, xx, yy, ff, gg, jj, hh) <= 8
48==48

теперь для strTableName = FindTable(astrTables(1))
Код:
strTableName = FindTable(astrTables(1))
        .CommandText = "INSERT INTO tAvto (PP, PP2, PP3, Nomer, God, Marka, Cvet, Doveren, Foto) " & _
                        "SELECT  tDataBase10.ID,  tDataBase20.ID,  tDataBase30.ID,  t.PP2,  t.PP3,  t.Nomer,  t.God,  t.Marka,  
t.Cvet,  t.Doveren,  t.Foto " & _
                        "FROM [" & strTableName & "] as t INNER JOIN (tDataBase10 ON t.PP = tDataBase10.OldID) 
AND (tDataBase20 ON t.PP2 = tDataBase20.OldID) AND (tDataBase30 ON t.PP3 = tDataBase30.OldID);"
или
Код:
INSERT INTO tAvto (PP, PP2, PP3, Nomer, God, Marka, Cvet, Doveren, Foto) 
SELECT  (tDataBase10.ID,  tDataBase20.ID,  tDataBase30.ID,  t.PP2,  t.PP3,  t.Nomer,  t.God,  t.Marka,  t.Cvet,  t.Doveren,  t.Foto)
столбцы
Код:
(PP, PP2, PP3,  Nomer,    God,    Marka,   Cvet,  Doveren,   Foto)  <=9

 (tDataBase10.ID,  tDataBase20.ID,  tDataBase30.ID,  t.PP2,  t.PP3,  t.Nomer,  t.God,  t.Marka,  t.Cvet,  t.Doveren,  t.Foto) <=11
9 <> 11
Надо сделать чтобы в INSERT u SELECT было одинаковое количество столбцов
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.

Последний раз редактировалось Aleksandr H.; 08.09.2016 в 09:40.
Aleksandr H. вне форума Ответить с цитированием
Старый 08.09.2016, 13:04   #5
ayselya1992
 
Регистрация: 09.08.2016
Сообщений: 6
По умолчанию

Получается у меня код будет выглядеть таким образом?
Код:
strTableName = FindTable(astrTables(1))
        .CommandText = "INSERT INTO tAvto (tDataBase10.ID,  tDataBase20.ID,  tDataBase30.ID, PP, PP2, PP3, Nomer, God, Marka, Cvet, Doveren, Foto) " & _
                        "SELECT  tDataBase10.ID,  tDataBase20.ID,  tDataBase30.ID, PP,  t.PP2,  t.PP3,  t.Nomer,  t.God,  t.Marka,  t.Cvet,  t.Doveren,  t.Foto " & _
                        "FROM [" & strTableName & "] as t INNER JOIN (tDataBase10 ON t.PP = tDataBase10.OldID) AND (tDataBase20 ON t.PP2 = tDataBase20.OldID) AND (tDataBase30 ON t.PP3 = tDataBase30.OldID);"
ayselya1992 вне форума Ответить с цитированием
Старый 08.09.2016, 13:33   #6
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Вроде как да. Ну и для остальных таблиц astrTables(Х) тоже должно быть все синхронно
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание запроса Access VBA - MS Access nikolaynn2008 Microsoft Office Access 2 06.08.2016 01:13
Создание программных модулей VBA maumau Помощь студентам 0 10.06.2014 16:45
создание программных модулей VBA для обработки табличных данных MS Excel MelkayaAnechka Помощь студентам 2 24.04.2014 21:15
Создание программных модулей VBA для обработки табличных данных MS Excel AngelA 94 Помощь студентам 1 30.12.2011 09:51
Создание новых vba-модулей в mde-базе yura_yn Microsoft Office Access 4 14.10.2009 12:20