![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ADO, обновление данных таблицы (самой таблицы) [D6, Access]
Alexey A © (2004-08-05 10:53:00)Здавствуйте!
Инструменты: Delphi 6, База Access 2000 (*.mdb)
Есть задача, не знаю, как реализовать:
есть рабочая база "work.mdb", в ней таблица "value",
есть обновленная база "up.mdb", в ней таблица "value"
Какими средствами обновить данные таблицы "value" в рабочей базе из "up.mdb"..
Я начинающий... можно подробней?
Заранее спасибо!
Energet (2004-08-05 14:37:00) [1]Если рабочая база начинает отличаться только с определенного момента и задача в том что их надо синхронизировать (если я правильно понял) то делаешь например так:
1) выбираешь значение Table Identify Column у необновленной базы
2) И начинаешь копирование с этого значения в обновленной базе
все это можно сделать на одном SQL в виде одного сложного запроса. А каждый раз делать Инсерт Инто имхо не стоит эту команду обычно юзают для составления временных таблиц которые потом успешно дропают, тем более , как правильно заметил sniknik, она не перенесент тебе ндексов + все связи порвутся.
З.Ы. Загляни на www.sql.ru там есть очень большой форум по дельфи применительно к базам данных.
sniknik (2004-08-05 12:39:00) [2]> Удалить наверное ее перед этим запросом?!
или очистить ее, и пользоваться INSERT INTO ...
что тебе по задаче нужно, если там структура/имена различаются и т.д. индексов к примеру SELECT * INTO не переносит. а если они нужны? и зачем заменять таблицу? можно же только добавления вставлять.
Alexey A (2004-08-05 12:26:00) [3]sniknik ©, спасибо! Я действительно до конца не разобрался в предложенном тобой примере :)
Решил вопрос:
- ADOConnect к "work.mdb" (т.к. логин, пароль на ней)
- ADOCommand:
SELECT * INTO value FROM [Value] in 'путь/update.mdb'
но осталось решить вопрос с тем, что если такая таблица уже есть в "work.mdb", Delphi ругается.. Удалить наверное ее перед этим запросом?!
sniknik (2004-08-05 12:13:00) [4]> Я и использую ADO.
обычно с этого и начинают вопрос, чтобы без недоразумений, описание используемых средств.
> не используя Alias в ODBC к базе?
строка конекта типа этой
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\work.mdb;Persist Security Info=False
Alexey A (2004-08-05 11:51:00) [5]Я и использую ADO.
Хорошо.. а как же манипулировать таблицами базе не используя Alias в ODBC к базе?
sniknik (2004-08-05 11:46:00) [6]> sniknik ©, не пойдет так...
и тем не менее, это лучшее, простое и быстрое решение.
> "work.mdb" имеет свой Alias в ODBC "WORK",
> "update.mdb" имеет свой Alias в ODBC "UP",
убери. BDE выкини, не та задача.
конект сделай один с помощью ADO, и манипулируй там таблицами с помощью SQL, по другому с целой таблицей не получится, только позаписьно.
> на каждую базу свой "Connect"..
хочеш чтобы работало быстро? не делай так.
Alexey A (2004-08-05 11:39:00) [7]sniknik ©, не пойдет так...
"work.mdb" имеет свой Alias в ODBC "WORK",
"update.mdb" имеет свой Alias в ODBC "UP",
на каждую базу свой "Connect".. каким образом их связать, чтобы работать как с единым целым и манипулировать таблицами (или их записями)...
sniknik (2004-08-05 11:20:00) [8]> Какими средствами обновить данные таблицы "value" в рабочей базе из "up.mdb"..
лучше всего средствами самого Access (jet), таким запросом к примеру
INSERT INTO [value] FROM [value] IN "up.mdb" WHERE .....(условие отбора новых)
при подключении к work.mdb
> Я начинающий... можно подробней?
книжки/хелпа в этом помогают.
Alexey A (2004-08-05 11:02:00) [9]"up.mdb"."value" = "work.mdb"."value"
46_55_41_44 (2004-08-05 10:58:00) [10]Вопрос...
"up.mdb"."value" = "work.mdb"."value" + (Новые данные)?
просто ответ зависит от этого...
Можно конечно написать общий случай... Но не охота...
Чем быстрее ответишь, тем быстрее подскажу.. ))