Форум: "Базы";
Текущий архив: 2004.06.20;
Скачать: [xml.tar.bz2];
Вниз
Как заставить работать методы ClientDataSet - Delete и Post? Найти похожие ветки
← →
Bukerman © (2004-05-26 14:57) [0]Всем привет!
Помогите кто-нибудь. Который день бьюсь - не получается.
Есть com-сервер, есть база Interbase, доступ - через IBQuery, на стороне клиента - TClientDataSet, кот. я использую для доступа к базе через TDatasetProvider, приложение нужно написать максимально просто без каких-либо наворотов, главное, чтобы можно было совершать все элементарные операции с базой (то бишь выборки и изменения).
Собственно вопрос:
содержимое таблиц вывожу в стандартный DBGrid, при использовании метода ClientDataSet.Delete - в гриде все удаляется, ошибок не выдается, то бишь вроде бы все ОК. Но если перечитать данные - то все удаленные записи возвращаются на свои места, как будто бы никто их не удалял. Похожая ситуация и с методом Post.Пробовал ApplyUpdates - не помогает. Я понимаю, что многие скажут, чтобы делал через SQL-запросы, но с этим мороки много, хочется сделать все максимально просто и быстро, навороченность не важна, главное функционал.
Подскажите плиз где копать, я уже и в свойствах датасетпровайдера искал и в соккетконнекшне и на стороне клиента, не изменяются данные хоть ты тресни.
Заранне большое спасибо за написанные в мой адрес ответы!
Влад.
← →
sniknik © (2004-05-26 15:47) [1]Delete удаляет в локальном датасете (ClientDataSet)
Post "закрепляет" изменения
ApplyUpdates отсылает изменения на сервер
одно без другого безсмысленно. если попробовать отдельно ApplyUpdates естественно не поможет.
← →
Bukerman © (2004-05-26 16:43) [2]делаю:
F_main.CD_main.Delete;
F_main.CD_main.Post;
F_main.CD_main.ApplyUpdates(-1);
удаляет из грида и выдает ошибку:
"dataset not in edit or insert mode"
тогда добавляю:
F_main.CD_main.Delete;
F_main.CD_main.Edit;
F_main.CD_main.Post;
F_main.CD_main.ApplyUpdates(-1);
ситуация повторяется, то есть видимость удаления есть, а при обновлении - все восстанавливается.....
← →
Sandman25+1 (2004-05-26 16:45) [3]F_main.CD_main.Delete;
F_main.CD_main.ApplyUpdates(-1);
← →
Vlad © (2004-05-26 16:50) [4]
> Bukerman © (26.05.04 16:43) [2]
Метод Delete не требует Post. Чего постить-то, если запись удалена.
А по теме, либо ты неправильно работаешь с транзакциями, либо у тебя неверный запрос на удаление (IBUpdateSql)
← →
Bukerman © (2004-05-26 17:07) [5]> Sandman25+1 (26.05.04 16:45) [3]
> F_main.CD_main.Delete;
> F_main.CD_main.ApplyUpdates(-1);
так и делаю - ситуация без изменения...
> Vlad © (26.05.04 16:50) [4]
транзакции пока вообще не используются, насчет неправильного запроса.... что имеется ввиду? нет никакого запроса, я же пижу я работаю не через запросы, а тупо делаю Delete, затем ApplyUpdates - нифига.
← →
sniknik © (2004-05-26 17:48) [6]> я же пижу я работаю не через запросы
а там (IBQuery) по другому похоже нельзя, должен быть IBUpdateSQL с запросами на каждое действие (какими именно х.з. с ним не работаю, а с ADODataSet нормально и без этого проходит).
возьми другие компоненты, dbExpres к примеру, там вроде нет такой мороки.
← →
sniknik © (2004-05-26 18:00) [7]да с dbExpress все чудно работает, без всякой мороки, написал небольшой тестовый сервер трехзвенку для проверки (вернее переделал имеющийся) если хочеш пришлю.
← →
Bukerman © (2004-05-26 18:13) [8]ок, спасибо за участие...
я уже все через SQL запросы делаю.
← →
Andriano (2004-05-27 08:50) [9]А что DataSetProvider как будто не может SQL запросы делать?
Если TDataSetProvider.ResolveToDataSet=true, то все изменения применяются к связанному с ним набору данных, иначе TDataSetProvider сам формирует SQL запрос (это он изумительно делает), но транзакцию он не COMMIT, и это надо делать самому в известных событиях.
Связка TDataSetProvider - TClientDataSet умеет очень много, надо только разобраться. И использовать её только для чтения данных - это всё равно что пилить лес бензопилой, не включая её.
← →
sniknik © (2004-05-27 09:08) [10]Andriano (27.05.04 08:50) [9]
там дело не в DataSetProvider, а в IBQuery ему почемуто TIBUpdateSQL обязательно нужен (у меня вчера по другому не получилось, но если учесть что вчера я первый раз за эти компоненты взялся ... ;о))
даже без DataSetProvider (вариант без трехзвенки).
а когда его подключаеш начинаются ошибки на сервере "неправильно определен параметр" и "параметру необходимо имя", в общем я так понял нужно в TIBUpdateSQL прописывать именно то что DataSetProvider посылает (имена параметров запроса), за невозможностью указать ему их явно, но после пришла идея заменить компоненты > sniknik © (26.05.04 18:00) [7] и с этими заниматся бросил, надоело ;о).
p.s. наверняка в чемто ошибаюсь. т.к. ничего не читал по ним не смотрел примеров и т.д. просто попытался использовать "по наитию" для интереса как кросворд (хелп и т.д. это все одно что заглянуть в ответ ;о)).
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.06.20;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.033 c