LEADERSOFT.ru Разработка на заказ программ и сайтов
Форумы по информационным технологиям
 
Регистрация  |  Вход
left
Форумы Минимизировать
ПоискСписок форумов
  Программирование  Microsoft Access. Файлы mdb и accdb  Тема: дублирова...
 Тема: дублирование
 
 15.06.2007 21:09:37
SergeB
3 сообщения


Тема: дублирование
Есть таблицы связанные отношением один ко многим. Ну допустим "счет" и "данные счета". Сделана классическая форма с подчиненной формой в качестве интерфейса. Нужно сделать кнопку "дублировать" при нажатии на которую текущая запись в таблице "счет" повторяется в ней же но с другим уникальным ключом, а также все связанные с ней записи из таблицы "данные счета" дублируются, причем ключ по которому они связаны изменяется, на ключ сдублированной записи. Продублировать запись в осноной таблице легко - это можно сделать на голом VBA и уже работает. А вот продублировать связанные записи в таблице "данные счета" - это вроде задача как раз для SQL. Пока придумал такой вариант. Сделана буферная таблица в нее перекидываются записи из подтаблицы, отобранные по текущей записи основной таблицы. Затем на них делается UPDATE - меняется первичный ключ, на значение для новой записи в основной таблице. Затем хочется сделать INSERT в "данные счета" записей из буферной таблицы. Так вот последний шаг не работает!!! Если более понятно будет на конкретном коде то он примерно такой:
strSQL = "DELETE * FROM bill_list_buffer;"
CurrentDb.Execute (strSQL)
strSQL = "INSERT INTO bill_list_buffer ( key, field1, field2 ) SELECT field1, field2 FROM bill_list WHERE key = " & curRec & ";"
CurrentDb.Execute (strSQL)
strSQL = "UPDATE bill_list_buffer SET key =" & newRec & " WHERE key =" & curRec & ";"
CurrentDb.Execute (strSQL)
strSQL = "INSERT INTO bill_list ( key, field1, field2 ) SELECT key, field1, field2 FROM bill_list_buffer WHERE key =" & newRec & ";"
CurrentDb.Execute (strSQL)
Последние две строки не вставляют записи из буферной таблицы в рабочую!!!
Причем если этот запрос выделить, да загнать в раздел запросов Access, то оттуда он работает! Но когда вызывается в одной подпрограмме с предыдущими ничего не вставляет или не выбирает. Может надо организовать транзакцию, или указать VBA выполни это, а потом будешь выполнять это. Может по умолчанию он их асинхронно выполняет. Теряюсь в догадках, надесь на Вашу помощь. И если кто предложит более элегантное решение, то также спасибо.


P.S. Запросы на добавление
Автор: SergeB от 08.08.2005 17:36:22 Источник ...
 15.06.2007 21:09:37
All
4316 сообщения
1-ый


RE: дублирование
Лучше для дублирования написать собственную функцию VBA, используя средства не SQL, а basic (dbs.OpenRecordset ...). Надо открыть 2 источника данных один для чтения, а другой для записи. Буферная таблица не нужна - это лишняя нагрузка на базу данных.


P.S. Запросы на добавление
Автор: Admin от 0:00:00 Источник ...
 15.06.2007 21:09:37
SergeB
3 сообщения


разобрался
Спасибо за ответ.
Почему не работали последние строки я уже разобрался. Было включено "обеспечение целостности данных", а вставлять из буферной таблицы в основную подтаблицу я пытался до того как вставлял запись в надтаблицу. Вполне корректное поведение когда поймешь почему. :-) Сейчас уже все работает. На счет DAO/ADO подумаю.


P.S. Запросы на добавление
Автор: SergeB от 12.09.2005 18:22:39 Источник ...
  Программирование  Microsoft Access. Файлы mdb и accdb  Тема: дублирова...
ПоискПоиск  Список форумовСписок форумов  
right