Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: INSERT INTO - как быть с ключевым полем?
 
 автор: dmsrv803   (06.07.2010 в 11:49)   личное сообщение
 
 

Продолжение предыдущего поста.
Есть две таблицы с одинаковой структурой table_Data и table_Data_temp.
у которых есть ключевое поле типа счетчик - ID (primary key)
С помощью инструкции INSERT INTO копирую запись из table_Data в table_Data_temp.
Затем необходимо после внесенных изменений либо сохранить запись на старое место в таблице table_Data, либо добавить запись в table_Data.
С первой задачей справился, выполнив сначало удаление старой записи в table_Data, а затем INSERT INTO table_Data FROM table_Data_temp .
А со второй задачей возникли проблемы - нарушение уникальности ключа.

strSQL = "INSERT INTO table_Data SELECT table_Data_temp.* FROM table_Data_temp;"
CurrentDb.Execute (strSQL)

А как выполнить запрос на добавлениеь с новым уникальным ID ?

  Ответить  
 
 автор: osmor   (06.07.2010 в 12:22)   личное сообщение
 
 

запрос на обнолвение "update .... where table_Data.id = table_Data_temp.id"

  Ответить  
 
 автор: dmsrv803   (06.07.2010 в 12:29)   личное сообщение
 
 

Инструкция UPDATE требует указывать имена полей таблицы, а у меня их более сотни. Очень не хочется этим заниматься.
А нельзя придумать что-нить с ' * ' ?
кроме того мне нужна копия записи с новым ID.

  Ответить  
 
 автор: kot_k_k   (06.07.2010 в 14:08)   личное сообщение
 
 


имена полей таблицы, а у меня их более сотни


может ты чегото не туда делаешь???


кроме того мне нужна копия записи с новым ID. -



копия нужна для чего-то или как как отличаем копию от оригинала?
а зачем тебе 2 строки - одна со старыми данными другая с измененными - или тебе логи изменний нужно хранить - на сколько глубоко??? и зачем в одной и тойже таблице - размер имеет значение.

может програмно?

  Ответить  
 
 автор: dmsrv803   (06.07.2010 в 14:35)   личное сообщение
 
 

Копию записи делаю для того, чтобы дальше ее редактировать, а не создавать запись а потом заполнять вручную несколь десятков полей, когда достаточно будет изменить только несколько. Проще говоря использую одну запись в качестве шаблона для другой.

Проблему решить удалось следующим способом:
сделал копию структуры исходной таблицы
- DoCmd.TransferDatabase acExport, "Microsoft Access", CurrentDb.Name, acTable, tableSource, tableTemp, True

затем удалил в tableTemp индекс

CurrentDb.Execute "ALTER TABLE table_temp DROP CONSTRAINT поле_ID;"

затем удалил само поле т.к. это поле - счетчик и добавил его одратно, но уже как Integer

CurrentDb.Execute "ALTER TABLE table_temp DROP COLUMN поле_ID;"
CurrentDb.Execute "ALTER TABLE table_temp ADD COLUMN поле_ID Integer;"

Теперь для того чтобы добавить в исходную таблицу запись из временной необходимо
сначало добавить в исходную таблицу новую запись - .AddNew но без .Update
а затем присвоить полю ID временной таблицы значение поля ID исходной и выполнить запрос на добавление

Set rs = CurrentDb.OpenRecordset(table)
rs.AddNew
Me!поле_ID = rs!поле_ID
Set rs = Nothing
 Me.Refresh
 strSQL = "INSERT INTO table SELECT table_temp.* FROM table_temp WHERE поле_ID = "& Me!поле_ID & ";"
 CurrentDb.Execute (strSQL)

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList