powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / копирование записей
25 сообщений из 47, страница 1 из 2
копирование записей
    #38903424
Владимир_52
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем добрый день, прошу помочь начинающему.

Есть запрос (источник-таблица из другого файла), информацию из которого должна скопироваться в таблицу.
Копирую с использованием CurrentDb.Execute "INSERT INTO..."
Все копируется нормально, новые появившиеся записи в запросе тоже все копируются. Но если запись в источнике редактируется, то после повторного копирования никаких изменений в скопированных записях не производится.

Скажите пожалуйста, как сделать чтобы записи менялись?(первичный ключ записей код репликации)
...
Рейтинг: 0 / 0
копирование записей
    #38903457
Владимир_52Всем добрый день, прошу помочь начинающему.

Есть запрос (источник-таблица из другого файла), информацию из которого должна скопироваться в таблицу.
Копирую с использованием CurrentDb.Execute "INSERT INTO..."
Все копируется нормально, новые появившиеся записи в запросе тоже все копируются. Но если запись в источнике редактируется, то после повторного копирования никаких изменений в скопированных записях не производится.

Скажите пожалуйста, как сделать чтобы записи менялись?(первичный ключ записей код репликации)
Для начала, сделайте такое:
Код: vbnet
1.
CurrentDb.Execute "INSERT INTO...", dbFailOnError


так при ошибке выполнения запроса сообщение вам напишут
почитайте, может намек поймете
...
Рейтинг: 0 / 0
копирование записей
    #38903472
П-Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поменянные записи надо обновлять апдейтами а не инсертами.

При синхронизации надо
1. Удалить записи, корторые были удалены в репликации
2. Добавить новые записи, которые появились в репликации
3. Обновить измененные в репликации записи

Другой кейс - все нафик грохнуть и залить все целиком из репликации

У вас пока есть только добавление.
...
Рейтинг: 0 / 0
копирование записей
    #38903616
Владимир_52
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
непоймучка,
в этом случае ошибка возникает из-за повторяющейся записи. А вот как ее теперь исправить?
...
Рейтинг: 0 / 0
копирование записей
    #38903622
Владимир_52
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
П-ЛПоменянные записи надо обновлять апдейтами а не инсертами.

При синхронизации надо
1. Удалить записи, корторые были удалены в репликации
2. Добавить новые записи, которые появились в репликации
3. Обновить измененные в репликации записи

Другой кейс - все нафик грохнуть и залить все целиком из репликации

У вас пока есть только добавление.

вот третий пункт меня и интересует. Как сделать не только добавление, но и изменение имеющихся?
...
Рейтинг: 0 / 0
копирование записей
    #38903628
П-Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
апдейтами
...
Рейтинг: 0 / 0
копирование записей
    #38903629
Владимир_52непоймучка,
в этом случае ошибка возникает из-за повторяющейся записи. А вот как ее теперь исправить?выше П-Л все уже описал.

INSERT - это запрос на добавление записей.
Запись с уже существующим ключем (повторно) добавить нельзя - ключ уникален, отсюда ваша ошибка.
Существующие записи в приемнике нужно ОБНОВЛЯТЬ - см. запрос типа UPDATE.
...
Рейтинг: 0 / 0
копирование записей
    #38904736
А не проще ли будет таблицу прилинковать?
...
Рейтинг: 0 / 0
копирование записей
    #38904755
Владимир_52
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
непоймучкаВладимир_52непоймучка,
в этом случае ошибка возникает из-за повторяющейся записи. А вот как ее теперь исправить?выше П-Л все уже описал.

INSERT - это запрос на добавление записей.
Запись с уже существующим ключем (повторно) добавить нельзя - ключ уникален, отсюда ваша ошибка.
Существующие записи в приемнике нужно ОБНОВЛЯТЬ - см. запрос типа UPDATE.

т.е. сначала нужно выполнить запрос update, а потом запрос insert?
...
Рейтинг: 0 / 0
копирование записей
    #38904763
Владимир_52
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прошу привести пример запроса, который бы обновлял все поля всех совпадающих записей таблицы из запроса.
...
Рейтинг: 0 / 0
копирование записей
    #38904778
Владимир_52Прошу привести пример запроса, который бы обновлял все поля всех совпадающих записей таблицы из запроса.для таблиц с полями f0, f1, f2 (причем f0 - поле ключа):
Код: sql
1.
2.
UPDATE [ТаблицаПриемник] AS dst INNER JOIN [ТаблицаИсточник] AS src ON dst.f0 = src.f0
SET dst.f1 = src.f1, dst.f2 = src.f2
...
Рейтинг: 0 / 0
копирование записей
    #38904787
Владимир_52непоймучкапропущено...
выше П-Л все уже описал.

INSERT - это запрос на добавление записей.
Запись с уже существующим ключем (повторно) добавить нельзя - ключ уникален, отсюда ваша ошибка.
Существующие записи в приемнике нужно ОБНОВЛЯТЬ - см. запрос типа UPDATE.

т.е. сначала нужно выполнить запрос update, а потом запрос insert?Да. Чтобы сделать INSERT только тех записей, которых еще нет в приемнике, можно выбрать их, например, связав источник с приемником по LEFT JOIN с отбором по условию Приемник.Ключ IS NULL:
Код: sql
1.
2.
3.
4.
INSERT INTO [ТаблицаПриемник] 
SELECT src.* 
FROM [ТаблицаИсточник] AS src LEFT JOIN [ТаблицаПриемник] AS dst ON src.f0=dst.f0
WHERE dst.f0 IS NULL
...
Рейтинг: 0 / 0
копирование записей
    #38904888
Владимир_52
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
непоймучкаВладимир_52Прошу привести пример запроса, который бы обновлял все поля всех совпадающих записей таблицы из запроса.для таблиц с полями f0, f1, f2 (причем f0 - поле ключа):
Код: sql
1.
2.
UPDATE [ТаблицаПриемник] AS dst INNER JOIN [ТаблицаИсточник] AS src ON dst.f0 = src.f0
SET dst.f1 = src.f1, dst.f2 = src.f2



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

CurrentDb.Execute "UPDATE [ТфблицаПриемник] AS dst INNER JOIN " & TextZapr & " AS src ON.....
...
Рейтинг: 0 / 0
копирование записей
    #38904898
Владимир_52Спасибо. Скажите пожалуйста, что делаю не правильно, когда в строку вставляю переменную-текст запроса таблицы источника?

CurrentDb.Execute "UPDATE [ТфблицаПриемник] AS dst INNER JOIN " & TextZapr & " AS src ON.....
если в TextZapr у вас - реально sql-текст некоторого select-запроса, то его дополнительно надо обернуть в круглые скобки

вообще для отладки запросов, собранных в коде vb рекомендую делать так:
Код: vbnet
1.
2.
3.
Dim sql$
sql = "UPDATE [ТфблицаПриемник] AS dst INNER JOIN " & TextZapr & " AS src ON..."
CurrentDb.Execute sql


на строке Execute сделать точку останова и посмотреть в окне отладки значение переменной sql
если сами не поймете, что не так - покажите этот текст тут
...
Рейтинг: 0 / 0
копирование записей
    #38904917
Владимир_52
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
непоймучка, спасибо, буду пробовать
...
Рейтинг: 0 / 0
копирование записей
    #38905058
Владимир_52
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
непоймучка,

скажите, два последовательных запроса (сначала обновление потом добавление) никаких подводных камней не содержат? (полная синхронизация баз не нужна, т.е. вопрос удаления не актуален)
...
Рейтинг: 0 / 0
копирование записей
    #38905066
\\\\
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владимир_52, почитай ещё про транзакции
...
Рейтинг: 0 / 0
копирование записей
    #38905070
Владимир_52непоймучка,

скажите, два последовательных запроса (сначала обновление потом добавление) никаких подводных камней не содержат?Ну запросы на изменение данных всегда выполняются последовательно. Что вообще вы называете "подводным камнем" в данном контексте?

Неадекватность результата цепочки (правильно написанных) запросов может возникнуть, когда последующие запросы ориентированы на обработку результата предыдущих запросов, и при этом происходит какая-то run-time ошибка на этапе выполнения одного из запросов.

Но во-первых, вы можете отловить такую ошибку в своем коде и должным образом обработать ее. Например, существует механизм транзакций, который позволяет при любой незвершенной (например, из-за ошибки) операции вернуть все измененные до этого данные в исходное состояние.

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

Кроме того, ваши два запроса могут быть выполнены многократно с тем же самым итогом, т.е. при непредвиденной ошибке выполнения одного из запросов, его можно просто повторить. Да и смена очередности выполнения этих запросов тоже не особо критична - если вы сделаете сначала добавление, а потом обновление, то второй запрос просто сделает лишнюю работу (обновит только что добавленные записи), но итоговый результат при этом все равно будет правильным.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
копирование записей
    #39832980
Aiso4ka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
непоймучка,

непоймучкаВладимир_52Прошу привести пример запроса, который бы обновлял все поля всех совпадающих записей таблицы из запроса.для таблиц с полями f0, f1, f2 (причем f0 - поле ключа):
Код: sql
1.
2.
UPDATE [ТаблицаПриемник] AS dst INNER JOIN [ТаблицаИсточник] AS src ON dst.f0 = src.f0
SET dst.f1 = src.f1, dst.f2 = src.f2



А есть возможность какая-то не перечислять все поля в запросе? Прошу прощения за тупизм и некропостинг.
...
Рейтинг: 0 / 0
копирование записей
    #39832995
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aiso4ka,
Георгий_ТаренА не проще ли будет таблицу прилинковать?В этом топике раньше
...
Рейтинг: 0 / 0
копирование записей
    #39834686
Aiso4ka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdku,

не проще, так как данные собираются их трех таблиц, а потом общая таблица связана еще с десятком.
...
Рейтинг: 0 / 0
копирование записей
    #39834701
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и собирайте хоть из сотни.
Добавляйте рекордсетом и Update
...
Рейтинг: 0 / 0
копирование записей
    #39895588
Oleg_Ang
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!!!. Не хочу создавать новую тему, решил написать сюда. Есть таблица, а в ней пока 111 записей. есть форма (фрагмент этой формы на рисунке) на ней кнопка копирования записей в таблице, по сути идет их дублирование но с другой датой. код программы на нажатие кнопки такой
...
Рейтинг: 0 / 0
копирование записей
    #39895589
Oleg_Ang
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: 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.
Private Sub Copy_Click()
'Добавляет новые записей в таблицу "tbTarif"
Dim v As Variant
Dim lngRecID As Long
Dim rst As Recordset
Dim i As Integer
   
    v = DMax("KodT", "tbTarif")             'MAX значение ключевого поля счетчика
    lngRecID = v + 1                            'Значение ключ. поля новой записи
    
    strSQL = "SELECT * FROM tbTarif WHERE tbTarif.DataN=" & Me.DataOld & ";"
    Set rst = CurrentDb.OpenRecordset(strSQL, dbOpenDynaset)
    For i = 1 To rst.RecordCount
        With rst
            .AddNew
             'Заполнение полей значениями
            !KodT = lngRecID           ' поле счетчик
            !DataN = Me.DataCopy    ' новая дата для заполнения поля
            
            'как вставить сюда те же значения полей что начинаются от предыдущей даты?
            '..............................
            '..............................
            
            .Update
        End With
        lngRecID = lngRecID + 1
    Next i

    On Error Resume Next
    rst.Close
    Set rst = Nothing
End Sub



рисунок начальной таблицы (см. рис. tabl1.jpg)
...
Рейтинг: 0 / 0
копирование записей
    #39895590
Oleg_Ang
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
рисунок формы
...
Рейтинг: 0 / 0
25 сообщений из 47, страница 1 из 2
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / копирование записей
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]