![]() |
|
|
![]()
|
|
| Лена |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 879 Регистрация: 16.8.2006 Репутация: 11 Всего: 11 |
Как сразу, после открытия предварительно сохраненного файла *.xml, обновить на основании его таблицу в базе данных? Пишу:
В ClientDataSetKey открывается содержимое OpenDialog1->FileName. Я его вижу. Хочу сразу переслать его в базу. Однако, не взирая на наличие строки: DataModule2->ClientDataSetKey->ApplyUpdates(-1); открываю саму базу и вижу что там не произошло обновление на основании содержимого загруженного строкой DataModule2->ClientDataSetKey->LoadFromFile(OpenDialog1->FileName); Как сразу после загрузки в ClientDataSet обновить на его основании таблицу в базе данных? |
|||
|
||||
| Лена |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 879 Регистрация: 16.8.2006 Репутация: 11 Всего: 11 |
Кажись начинаю понимать.
Наверное надо сначала удалить все записи из таблицы в базе данных и лишь потом засылать новые данные, полученнные LoadFromFile |
|||
|
||||
| Vyacheslav |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 47 Всего: 59 |
Думаю, что это не поможет. Дело в том, что ClientDataSet предназначался для работы в briefcase model и сиьуация при которой сначала содержимое сбрасывается в файл и потом восстанавливается является стандартной: закачали данные с сервера, отключились от сервера, сохранили данные, выключили компьютер и уехали куда-то, где сервер недоступен(в командировку к клиенту
Там включили компьютер, загрузили данные из файла и вместе с клиентом сделали изменения(заказ). Сохранили в файле. Приехали домой, подключились к серверу, загрузили данные из файла и проапдейтили данные на сервере. При этом у нас изменениями будут считаться только те данные, которые отредактированы. Вам скорее всего придется сделать таким образом: загрузить в другой ClientDataSet, и из него перегнать в тот, который связан с провайдером -------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
| Лена |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 879 Регистрация: 16.8.2006 Репутация: 11 Всего: 11 |
Да не помогло:
ОШИБКА: Command text does not return a result set! >загрузить в другой ClientDataSet Буду пробывать. P.S. Как правильно содержимое одного ClientDataSet присваивать другому и нужно ли очищать от данных после присвоения ClientDataSet-источник, чтобы он не оставался заполненным? Это сообщение отредактировал(а) Лена - 25.9.2006, 16:30 |
||||
|
|||||
| Vyacheslav |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 47 Всего: 59 |
попробу сначала вот так. Может пройдет и без второго ClientDataSet через провайдера ( не знаю как у Вас он называется. Пусть будет ProviderKey
-------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
| Лена |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 879 Регистрация: 16.8.2006 Репутация: 11 Всего: 11 |
На новой строке пока ошибка:
[C++ Error] MDataBase.cpp(59): E2280 Member identifier expected Это сообщение отредактировал(а) Лена - 25.9.2006, 17:12 |
|||
|
||||
| Vyacheslav |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 47 Всего: 59 |
Добавлено @ 17:33 Эй - ей. Так
нельзя. Это же у вас запрос, который с помощью провайдера подрубается к ClientDataSet. Вы его меняете на "delete FROM keys", а потом этот запрос "delete FROM keys" пытаетесь проапдейтить. Естесвенный ответ Command text does not return a result set! Кто нибудь будет спорить, что delete FROM keys не возвращает результата ? -------------------- С уважением, Вячеслав Ермолаев |
||||
|
|||||
| Лена |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 879 Регистрация: 16.8.2006 Репутация: 11 Всего: 11 |
Пока не получается. Пробую так:
Загружаю файл, жму "ОК". Во вновь загруженные в грид данные добавляю еще одну строку с данными. Закрываю приложение. Открываю его вновь. В гриде находиться только строка, которую я добавила, а всех данных из .xml файла снова нет в гриде. Не происходит замена и пересылка данных после LoadFromFile в базу. Как подправить код? |
|||
|
||||
| Vyacheslav |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 47 Всего: 59 |
Скорее всего только так
-------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
| Лена |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 879 Регистрация: 16.8.2006 Репутация: 11 Всего: 11 |
Не получается
Кол-во записей между теми что в файле и теми которые в реальной таблице разные. Не получается полностью обновить. Может мне использовать компонент ADOCommand и дать в нем команду на удаление записей в базе данных, а потом добавить записи из открываемого файла в уже пустую таблицу в базе? P.S. Подскажите еще, пожалуйста, как правильно обработать ошибку, если пользователь вводит в колонку значение, а оно не должно дублироваться, т.е. все значения должны быть в этой колонке уникальными. Как правильно это отслеживать? Спасибо. Это сообщение отредактировал(а) Лена - 26.9.2006, 19:00 |
|||
|
||||
| Vyacheslav |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 47 Всего: 59 |
Лена.
Вы начинаете с технической проблемы, а потом выясняется что проблема не техничская, а логическая. Сейчас попробую восстановить постановку задачи. В таблицы есть записи, имеющие первичный ключ. Есть файл с записями, которыми таблица может быть обновлена. Причем в файле могут быть записи, соответсвующие по первичному ключу записям таблицы. Требуется обновить таблицу записями из файла. Теперь некоторые предположения: поскольку Вы постоянно стремитесь очистить таблицу перед загрузкой, я делаю два вывода : 1. что при удалении записи из таблицы каскадного удаления из других таблиц не происходит 2. если при обновлении из файла, в файле нет записи, которую по первичному ключу можно сопоставить с записью в таблице, то такая запись в таблице должна быть удалена. То есть при обновлении из файла происходит не мерж, а замена. После обновления содержимое таблицы полностью эквиавлентно содержимому файла
-------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
| Лена |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 879 Регистрация: 16.8.2006 Репутация: 11 Всего: 11 |
Vyacheslav, огромное спасибо!!!
|
|||
|
||||
![]()
|
| Правила форума "С++ Builder" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C++ Builder | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |