|
копирование записей
|
|||
---|---|---|---|
#18+
Всем добрый день, прошу помочь начинающему. Есть запрос (источник-таблица из другого файла), информацию из которого должна скопироваться в таблицу. Копирую с использованием CurrentDb.Execute "INSERT INTO..." Все копируется нормально, новые появившиеся записи в запросе тоже все копируются. Но если запись в источнике редактируется, то после повторного копирования никаких изменений в скопированных записях не производится. Скажите пожалуйста, как сделать чтобы записи менялись?(первичный ключ записей код репликации) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2015, 10:17 |
|
копирование записей
|
|||
---|---|---|---|
#18+
Владимир_52Всем добрый день, прошу помочь начинающему. Есть запрос (источник-таблица из другого файла), информацию из которого должна скопироваться в таблицу. Копирую с использованием CurrentDb.Execute "INSERT INTO..." Все копируется нормально, новые появившиеся записи в запросе тоже все копируются. Но если запись в источнике редактируется, то после повторного копирования никаких изменений в скопированных записях не производится. Скажите пожалуйста, как сделать чтобы записи менялись?(первичный ключ записей код репликации) Для начала, сделайте такое: Код: vbnet 1.
так при ошибке выполнения запроса сообщение вам напишут почитайте, может намек поймете ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2015, 10:36 |
|
копирование записей
|
|||
---|---|---|---|
#18+
Поменянные записи надо обновлять апдейтами а не инсертами. При синхронизации надо 1. Удалить записи, корторые были удалены в репликации 2. Добавить новые записи, которые появились в репликации 3. Обновить измененные в репликации записи Другой кейс - все нафик грохнуть и залить все целиком из репликации У вас пока есть только добавление. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2015, 10:45 |
|
копирование записей
|
|||
---|---|---|---|
#18+
непоймучка, в этом случае ошибка возникает из-за повторяющейся записи. А вот как ее теперь исправить? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2015, 12:09 |
|
копирование записей
|
|||
---|---|---|---|
#18+
П-ЛПоменянные записи надо обновлять апдейтами а не инсертами. При синхронизации надо 1. Удалить записи, корторые были удалены в репликации 2. Добавить новые записи, которые появились в репликации 3. Обновить измененные в репликации записи Другой кейс - все нафик грохнуть и залить все целиком из репликации У вас пока есть только добавление. вот третий пункт меня и интересует. Как сделать не только добавление, но и изменение имеющихся? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2015, 12:11 |
|
копирование записей
|
|||
---|---|---|---|
#18+
Владимир_52непоймучка, в этом случае ошибка возникает из-за повторяющейся записи. А вот как ее теперь исправить?выше П-Л все уже описал. INSERT - это запрос на добавление записей. Запись с уже существующим ключем (повторно) добавить нельзя - ключ уникален, отсюда ваша ошибка. Существующие записи в приемнике нужно ОБНОВЛЯТЬ - см. запрос типа UPDATE. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2015, 12:15 |
|
копирование записей
|
|||
---|---|---|---|
#18+
А не проще ли будет таблицу прилинковать? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.03.2015, 07:46 |
|
копирование записей
|
|||
---|---|---|---|
#18+
непоймучкаВладимир_52непоймучка, в этом случае ошибка возникает из-за повторяющейся записи. А вот как ее теперь исправить?выше П-Л все уже описал. INSERT - это запрос на добавление записей. Запись с уже существующим ключем (повторно) добавить нельзя - ключ уникален, отсюда ваша ошибка. Существующие записи в приемнике нужно ОБНОВЛЯТЬ - см. запрос типа UPDATE. т.е. сначала нужно выполнить запрос update, а потом запрос insert? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.03.2015, 09:07 |
|
копирование записей
|
|||
---|---|---|---|
#18+
Прошу привести пример запроса, который бы обновлял все поля всех совпадающих записей таблицы из запроса. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.03.2015, 09:39 |
|
копирование записей
|
|||
---|---|---|---|
#18+
Владимир_52Прошу привести пример запроса, который бы обновлял все поля всех совпадающих записей таблицы из запроса.для таблиц с полями f0, f1, f2 (причем f0 - поле ключа): Код: sql 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
14.03.2015, 10:14 |
|
копирование записей
|
|||
---|---|---|---|
#18+
Владимир_52непоймучкапропущено... выше П-Л все уже описал. INSERT - это запрос на добавление записей. Запись с уже существующим ключем (повторно) добавить нельзя - ключ уникален, отсюда ваша ошибка. Существующие записи в приемнике нужно ОБНОВЛЯТЬ - см. запрос типа UPDATE. т.е. сначала нужно выполнить запрос update, а потом запрос insert?Да. Чтобы сделать INSERT только тех записей, которых еще нет в приемнике, можно выбрать их, например, связав источник с приемником по LEFT JOIN с отбором по условию Приемник.Ключ IS NULL: Код: sql 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
14.03.2015, 10:34 |
|
копирование записей
|
|||
---|---|---|---|
#18+
непоймучкаВладимир_52Прошу привести пример запроса, который бы обновлял все поля всех совпадающих записей таблицы из запроса.для таблиц с полями f0, f1, f2 (причем f0 - поле ключа): Код: sql 1. 2.
Спасибо. Скажите пожалуйста, что делаю не правильно, когда в строку вставляю переменную-текст запроса таблицы источника? CurrentDb.Execute "UPDATE [ТфблицаПриемник] AS dst INNER JOIN " & TextZapr & " AS src ON..... ... |
|||
:
Нравится:
Не нравится:
|
|||
14.03.2015, 15:14 |
|
копирование записей
|
|||
---|---|---|---|
#18+
Владимир_52Спасибо. Скажите пожалуйста, что делаю не правильно, когда в строку вставляю переменную-текст запроса таблицы источника? CurrentDb.Execute "UPDATE [ТфблицаПриемник] AS dst INNER JOIN " & TextZapr & " AS src ON..... если в TextZapr у вас - реально sql-текст некоторого select-запроса, то его дополнительно надо обернуть в круглые скобки вообще для отладки запросов, собранных в коде vb рекомендую делать так: Код: vbnet 1. 2. 3.
на строке Execute сделать точку останова и посмотреть в окне отладки значение переменной sql если сами не поймете, что не так - покажите этот текст тут ... |
|||
:
Нравится:
Не нравится:
|
|||
14.03.2015, 16:20 |
|
копирование записей
|
|||
---|---|---|---|
#18+
непоймучка, спасибо, буду пробовать ... |
|||
:
Нравится:
Не нравится:
|
|||
14.03.2015, 17:29 |
|
копирование записей
|
|||
---|---|---|---|
#18+
непоймучка, скажите, два последовательных запроса (сначала обновление потом добавление) никаких подводных камней не содержат? (полная синхронизация баз не нужна, т.е. вопрос удаления не актуален) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2015, 07:36 |
|
копирование записей
|
|||
---|---|---|---|
#18+
Владимир_52, почитай ещё про транзакции ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2015, 09:06 |
|
копирование записей
|
|||
---|---|---|---|
#18+
Владимир_52непоймучка, скажите, два последовательных запроса (сначала обновление потом добавление) никаких подводных камней не содержат?Ну запросы на изменение данных всегда выполняются последовательно. Что вообще вы называете "подводным камнем" в данном контексте? Неадекватность результата цепочки (правильно написанных) запросов может возникнуть, когда последующие запросы ориентированы на обработку результата предыдущих запросов, и при этом происходит какая-то run-time ошибка на этапе выполнения одного из запросов. Но во-первых, вы можете отловить такую ошибку в своем коде и должным образом обработать ее. Например, существует механизм транзакций, который позволяет при любой незвершенной (например, из-за ошибки) операции вернуть все измененные до этого данные в исходное состояние. А во-вторых, конкретно ваша цепочка состоит из запросов, которые никак не связаны друг с другом - каждый из них обрабатывает данные, которые НЕ затрагивает другой запрос. Это вобщем-то не цепочка некой последовательной обработки, это просто два независимых запроса, каждый из которых выполняет самодостаточную задачу, которая вполне имеет право на отдельное выполнение, и которые могут быть разнесены по времени. Кроме того, ваши два запроса могут быть выполнены многократно с тем же самым итогом, т.е. при непредвиденной ошибке выполнения одного из запросов, его можно просто повторить. Да и смена очередности выполнения этих запросов тоже не особо критична - если вы сделаете сначала добавление, а потом обновление, то второй запрос просто сделает лишнюю работу (обновит только что добавленные записи), но итоговый результат при этом все равно будет правильным. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2015, 09:21 |
|
копирование записей
|
|||
---|---|---|---|
#18+
непоймучка, непоймучкаВладимир_52Прошу привести пример запроса, который бы обновлял все поля всех совпадающих записей таблицы из запроса.для таблиц с полями f0, f1, f2 (причем f0 - поле ключа): Код: sql 1. 2.
А есть возможность какая-то не перечислять все поля в запросе? Прошу прощения за тупизм и некропостинг. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.07.2019, 19:02 |
|
копирование записей
|
|||
---|---|---|---|
#18+
Aiso4ka, Георгий_ТаренА не проще ли будет таблицу прилинковать?В этом топике раньше ... |
|||
:
Нравится:
Не нравится:
|
|||
02.07.2019, 19:36 |
|
копирование записей
|
|||
---|---|---|---|
#18+
sdku, не проще, так как данные собираются их трех таблиц, а потом общая таблица связана еще с десятком. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2019, 11:53 |
|
копирование записей
|
|||
---|---|---|---|
#18+
Ну и собирайте хоть из сотни. Добавляйте рекордсетом и Update ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2019, 12:36 |
|
копирование записей
|
|||
---|---|---|---|
#18+
Добрый день!!!. Не хочу создавать новую тему, решил написать сюда. Есть таблица, а в ней пока 111 записей. есть форма (фрагмент этой формы на рисунке) на ней кнопка копирования записей в таблице, по сути идет их дублирование но с другой датой. код программы на нажатие кнопки такой ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2019, 13:42 |
|
копирование записей
|
|||
---|---|---|---|
#18+
Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32.
рисунок начальной таблицы (см. рис. tabl1.jpg) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2019, 13:44 |
|
копирование записей
|
|||
---|---|---|---|
#18+
рисунок конечного результата как должно быть при нажатии кнопки. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2019, 13:45 |
|
копирование записей
|
|||
---|---|---|---|
#18+
Oleg_Ang, откройте еще один рекордсет (лучше пустой) на этой таблице. Цикл по записям RS1, добавление записей в RS2. ...WHERE tbTarif.DataN=" & Me.DataOld & ";" - неправильное использование даты. Читайте ФАК. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2019, 16:02 |
|
копирование записей
|
|||
---|---|---|---|
#18+
Кривцов Анатолий, вот что-то написал, но выдает ошибку на строке Update. где я что упустил ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2019, 14:26 |
|
копирование записей
|
|||
---|---|---|---|
#18+
Oleg_Ang, тип вашего поля "KodT" случайно не счетчик? Оно точно первое? Выполните пошаговую отработку кода и проверьте, какое значение вы присваиваете, нет ли такого уже. В таблице нет других полей с уникальным индексом? В вашем коде нет цикла по записям rst. Даже если код заработает, это будет создание копии только одной записи. И еще, цикл по полям начинается с 3, это четвертое по счету поле, а третье выпадает. Хотя может так и задумано... ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2019, 16:19 |
|
копирование записей
|
|||
---|---|---|---|
#18+
Кривцов Анатолий В вашем коде нет цикла по записям rst. Как же нет? Код: vbnet 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2019, 10:30 |
|
копирование записей
|
|||
---|---|---|---|
#18+
Код: vbnet 1.
А Вы уверены что в таблице-источнике формы значение кодового поля + 1 не может совпасть со значением ID в таблице Tarif-о чем и сообщается (да и вообще "трогать" ключ-счетчик есть не правильно от слова совсем) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2019, 15:44 |
|
копирование записей
|
|||
---|---|---|---|
#18+
в догонку:циклом Вы перемещаетесь по полям записи,а не по записям рекордсета ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2019, 15:49 |
|
копирование записей
|
|||
---|---|---|---|
#18+
Кривцов Анатолий, да это счетчик. я брал подобное решение здесь http://msa.polarcom.ru/st/s0000004.htm ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2019, 08:48 |
|
копирование записей
|
|||
---|---|---|---|
#18+
ИВП Кривцов Анатолий В вашем коде нет цикла по записям rst. Как же нет? Код: vbnet 1.
Вы несколько раз копируете одну и ту же запись, только увеличивая lngID. Переменную i вы нигде не используете. И вообще, перемещение по записям обычно выполняется в цикле Do Until rst.EOF. Ну и о присвоении значения счетчику - согласен с sdku. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2019, 10:12 |
|
копирование записей
|
|||
---|---|---|---|
#18+
Кривцов Анатолий, да я пробовал и так и сяк. почему при таком коде пишет что уже конец файла и не идет в цикл (выделено жирным). может что-то со строкой strSQL не так. но ставил в запрос, там все выводит. а что по поводу счетчика? если нельзя, то как тогда добавить запись? Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2019, 10:43 |
|
копирование записей
|
|||
---|---|---|---|
#18+
сори, тупанул с датой. не ту набрал вот потому и не пускал в цикл, а так вроде все заработало. видать после выходных не внимателен) ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2019, 11:07 |
|
копирование записей
|
|||
---|---|---|---|
#18+
Oleg_Ang Кривцов Анатолий, да это счетчик. я брал подобное решение здесь http://msa.polarcom.ru/st/s0000004.htm Код: vbnet 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2019, 11:31 |
|
копирование записей
|
|||
---|---|---|---|
#18+
sdku, там есть и второй вариант ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2019, 11:50 |
|
копирование записей
|
|||
---|---|---|---|
#18+
Как я понял Ваш код выполняет следующее: -подсчитывает количество записей на определенную пользователем дату и добавляет в таблицу tbTarif такое же количество записей с другим значением поля rst2.Fields(1) (не знаю как оно у Вас называетя и правильно ли я понял Вашу "хотелку") -отстаньте от кодового поля-счетчика,добавленным записям значение этого поля задается автоматически ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2019, 12:02 |
|
копирование записей
|
|||
---|---|---|---|
#18+
sdku, да точно. это поле дата rst2.Fields(1) = Me.DataNew ' !DataN новая дата заполнения на момент изменения тупо меняется дата и все. может есть пример что-то упростить в моем коде? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2019, 14:12 |
|
копирование записей
|
|||
---|---|---|---|
#18+
Oleg_Ang тупо меняется дата и все. может есть пример что-то упростить в моем коде? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2019, 15:41 |
|
копирование записей
|
|||
---|---|---|---|
#18+
если добавить новые записи с пустыми полями,кроме поля myDate с новым значением, то так: Код: vbnet 1. 2. 3. 4. 5.
если обновить новым значением поле в существующих записях-запрос на обновление (вообще код не нужен) Поясните что именно Вы хотите ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2019, 18:30 |
|
копирование записей
|
|||
---|---|---|---|
#18+
sdku, доброе утро. так вроде все объяснил выше. есть штатное расписание для каждого человека (занесено в табл tbTarif). если меняется штатное (вводятся изменения) на определен. дату, то чтобы все опять не набирать по каждому человеку нужно продублировать предыдущее штатное только с НОВОЙ ДАТОЙ (rst2.Fields(1) = Me.DataNew), но все старые значения по остальным полям сохранить в новых полях, а потом уже по единичным работникам вносить изменения. так проще чем опять вводить 350 записей вручную. как-то так. вот фрагмент формы на рисунке. где есть две кнопки. копирования и удаления. кнопка удаления почему не работает пишу такой код, а в таблице записи не удаляются. в чем моя ошибка? Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2019, 09:45 |
|
копирование записей
|
|||
---|---|---|---|
#18+
Oleg_Ang strSQL = "SELECT * FROM tbTarif WHERE tbTarif.DataN=#" & Format(Me.DataOld, "dd\/mm\/yyyy") & "#;" сори, тупанул с датой. не ту набрал ... почему не работает пишу такой код, а в таблице записи не удаляются. в чем моя ошибка? strSQl = "DELETE * FROM tbTarif WHERE tbTarif.DataN=#" & Format(Me.DataOld, "dd\/mm\/yyyy # ") CurrentDb.Execute strSQl ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2019, 10:03 |
|
копирование записей
|
|||
---|---|---|---|
#18+
Кривцов Анатолий, спасибо большое все прошло) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2019, 10:23 |
|
копирование записей
|
|||
---|---|---|---|
#18+
Такой лобовой подход к решению задачи штатного расписания, совершенно не приемлем для базы данных. Я предвижу огромные проблемы уже в ближайшее время. Зачем копировать все записи, например, если введена только лдна новая должность? Или произошло одно изменение, скажем, в размере премии? А как быть, если, наоборот, какая-то ставка упразднена? Или работник уволился? Работник уволится вместе с должностью? Или должность исчезнет вместе с работником? .... Штатное расписание и работники - это две разные сущности. И объединять их в одной таблице - ошибка (мягко говоря!). Необходимо проработать сущность "Штатное расписание" с соответствующим набором таблиц и процедур по их ведению. Включая историю и аудит лог. Необходимо создать базу данных на людей - со всеми необходимыми данными. И, также с процедурами ведения, истории и лога. И только после этого проработать базу данных совмещения штатного расписпния и людей. И здесь тоже нужна будет история и лог. Задача не такая простая, как кажется. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2019, 11:19 |
|
|
start [/forum/topic.php?all=1&fid=45&tid=1610348]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
58ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
66ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 179ms |
0 / 0 |