По поводу первичного ключа. У вас же товар приходит по какой-то накладной или нечто подобное. Её и можно добавить в качестве элемента ключа: дата, название, накладная. Или вариант: дата, название, время ввода в таблицу.
Мне кажется, что если в первичный ключ "просятся" более трёх полей и таблица ни с чем больше не связана этим ключом (т.е. когда ключ не "наследуется" из какой-то родительской таблицы типа Накладные в дочернюю (эту) таблицу типа Строки накладной), то надо просто добавить одно поле ID записи и сделать его ключом таблицы. И, соответственно, все проверки сравнения между Excel и Access типа "добавлено/не добавлено" вести далее, опираясь на это поле, которое имеет прозрачный смысл "Номер записи". Добавлять время регистрации записи можно, конечно, но это дополнительное поле, которое возможно ранее специально не вели, и оно может претить пользователям. Кроме того, если этот таймштамп проставляется автоматически по заполнению строки, то возможна же одновременная вставка нескольких записей копи-пастом...
Цитата (anvg)
По поводу первичного ключа. У вас же товар приходит по какой-то накладной или нечто подобное. Её и можно добавить в качестве элемента ключа: дата, название, накладная. Или вариант: дата, название, время ввода в таблицу.
Мне кажется, что если в первичный ключ "просятся" более трёх полей и таблица ни с чем больше не связана этим ключом (т.е. когда ключ не "наследуется" из какой-то родительской таблицы типа Накладные в дочернюю (эту) таблицу типа Строки накладной), то надо просто добавить одно поле ID записи и сделать его ключом таблицы. И, соответственно, все проверки сравнения между Excel и Access типа "добавлено/не добавлено" вести далее, опираясь на это поле, которое имеет прозрачный смысл "Номер записи". Добавлять время регистрации записи можно, конечно, но это дополнительное поле, которое возможно ранее специально не вели, и оно может претить пользователям. Кроме того, если этот таймштамп проставляется автоматически по заполнению строки, то возможна же одновременная вставка нескольких записей копи-пастом...Gustav
Хочу обратить внимание, что метод CopyFromRecordset объекта Range работает и в случае DAO (а не только ADO):
Цитата
Excel Developer Reference Range.CopyFromRecordset Method Copies the contents of an ADO or DAO Recordset object onto a worksheet, beginning at the upper-left corner of the specified range.
Поэтому можно отобранные аксессные строки выгрузить на лист Excel: [vba]
Код
Sub fromRecordset()
Dim dbe As Object 'DAO.DBEngine Dim db As Object 'DAO.Database Dim rst As Object 'DAO.Recordset
Set dbe = CreateObject("DAO.DBEngine.120") Set db = dbe.OpenDatabase("C:\...\file.accdb") Set rst = db.OpenRecordset("SELECT * FROM Таблица1 WHERE 1=1")
Range("A1").CopyFromRecordset rst
End Sub
[/vba] А потом просто операцией присваивания передать диапазон выгрузки в массив VBA - ну, а дальше уже, как говорится, дело техники и фантазии.
Хочу обратить внимание, что метод CopyFromRecordset объекта Range работает и в случае DAO (а не только ADO):
Цитата
Excel Developer Reference Range.CopyFromRecordset Method Copies the contents of an ADO or DAO Recordset object onto a worksheet, beginning at the upper-left corner of the specified range.
Поэтому можно отобранные аксессные строки выгрузить на лист Excel: [vba]
Код
Sub fromRecordset()
Dim dbe As Object 'DAO.DBEngine Dim db As Object 'DAO.Database Dim rst As Object 'DAO.Recordset
Set dbe = CreateObject("DAO.DBEngine.120") Set db = dbe.OpenDatabase("C:\...\file.accdb") Set rst = db.OpenRecordset("SELECT * FROM Таблица1 WHERE 1=1")
Range("A1").CopyFromRecordset rst
End Sub
[/vba] А потом просто операцией присваивания передать диапазон выгрузки в массив VBA - ну, а дальше уже, как говорится, дело техники и фантазии.Gustav
Всем Здравствуйте , Задача примерно такая же как описана выше. Но...Необходимо чтобы старые записи перезаписывались/обновлялись.
Есть датабаза. Записей/рядов в ней более 250 000. Обновление содержит новые данные и скорректированные старые. Как сделать так чтобы старые записи перезаписывались ? В екселе есть макрос(нашел в инете) который работает только, если удалить записи из датабазы.
Файлы в приложении(zip).
Спасибо
Всем Здравствуйте , Задача примерно такая же как описана выше. Но...Необходимо чтобы старые записи перезаписывались/обновлялись.
Есть датабаза. Записей/рядов в ней более 250 000. Обновление содержит новые данные и скорректированные старые. Как сделать так чтобы старые записи перезаписывались ? В екселе есть макрос(нашел в инете) который работает только, если удалить записи из датабазы.
Что вам мешает работать средствами самого Акцесса? Зачем Excel-то понадобился для корректировки БД (возможно, многопользовательской). Ну и напомню, заодно: имея базу в Access - вы просто можете подключить Excel'евские таблички к нему, а не пытаться управлять снаружи...
Что вам мешает работать средствами самого Акцесса? Зачем Excel-то понадобился для корректировки БД (возможно, многопользовательской). Ну и напомню, заодно: имея базу в Access - вы просто можете подключить Excel'евские таблички к нему, а не пытаться управлять снаружи...AndreTM
Спасибо за ответ. Я и не знаю как делать через Access. Если у вас есть наработки , то интересно было бы взглянуть. Можно ли запустить обновление Access скриптом из вне?
Коротко: Мне надо будет запустить Excel скриптом из вне (сделано), (изначально часть инфы идет текстовым файлом и перерабатывается в Excel.) .Затем Excel обновит датабазу. Обновлениые будет проводится автоматом с использованием Task Scheduler ежедневно.
Спасибо за ответ. Я и не знаю как делать через Access. Если у вас есть наработки , то интересно было бы взглянуть. Можно ли запустить обновление Access скриптом из вне?
Коротко: Мне надо будет запустить Excel скриптом из вне (сделано), (изначально часть инфы идет текстовым файлом и перерабатывается в Excel.) .Затем Excel обновит датабазу. Обновлениые будет проводится автоматом с использованием Task Scheduler ежедневно.lex2
Мне надо будет запустить Excel скриптом из вне (сделано), (изначально часть инфы идет текстовым файлом и перерабатывается в Excel.) .Затем Excel обновит датабазу.
Вот именно про это я и говорю... Зачем привлекать сторонние инструменты, если в Access и так всё есть (и намного больше того, что позволяет Excel - в части обработки данных)? Но это уже история из другой оперы...
Мне надо будет запустить Excel скриптом из вне (сделано), (изначально часть инфы идет текстовым файлом и перерабатывается в Excel.) .Затем Excel обновит датабазу.
Вот именно про это я и говорю... Зачем привлекать сторонние инструменты, если в Access и так всё есть (и намного больше того, что позволяет Excel - в части обработки данных)? Но это уже история из другой оперы...AndreTM