Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как заставить работать методы ClientDataSet - Delete и Post?


Bukerman ©   (2004-05-26 14:57:00) 

Всем привет!
Помогите кто-нибудь. Который день бьюсь - не получается.
Есть com-сервер, есть база Interbase, доступ - через IBQuery, на стороне клиента - TClientDataSet, кот. я использую для доступа к базе через TDatasetProvider, приложение нужно написать максимально просто без каких-либо наворотов, главное, чтобы можно было совершать все элементарные операции с базой (то бишь выборки и изменения).
Собственно вопрос:
содержимое таблиц вывожу в стандартный DBGrid, при использовании метода ClientDataSet.Delete - в гриде все удаляется, ошибок не выдается, то бишь вроде бы все ОК. Но если перечитать данные - то все удаленные записи возвращаются на свои места, как будто бы никто их не удалял. Похожая ситуация и с методом Post.Пробовал ApplyUpdates - не помогает. Я понимаю, что многие скажут, чтобы делал через SQL-запросы, но с этим мороки много, хочется сделать все максимально просто и быстро, навороченность не важна, главное функционал.
Подскажите плиз где копать, я уже и в свойствах датасетпровайдера искал и в соккетконнекшне и на стороне клиента, не изменяются данные хоть ты тресни.

Заранне большое спасибо за написанные в мой адрес ответы!
Влад.


sniknik   (2004-05-27 09:08:00) [1]

Andriano   (27.05.04 08:50) [9]
там дело не в DataSetProvider, а в IBQuery ему почемуто TIBUpdateSQL обязательно нужен (у меня вчера по другому не получилось, но если учесть что вчера я первый раз за эти компоненты взялся ... ;о))
даже без DataSetProvider (вариант без трехзвенки).
а когда его подключаеш начинаются ошибки на сервере "неправильно определен параметр" и "параметру необходимо имя", в общем я так понял нужно в TIBUpdateSQL прописывать именно то что DataSetProvider посылает (имена параметров запроса), за невозможностью указать ему их явно, но после пришла идея заменить компоненты > sniknik ©   (26.05.04 18:00) [7] и с этими заниматся бросил, надоело ;о).
p.s. наверняка в чемто ошибаюсь. т.к. ничего не читал по ним не смотрел примеров и т.д. просто попытался использовать "по наитию" для интереса как кросворд (хелп и т.д. это все одно что заглянуть в ответ ;о)).


Andriano   (2004-05-27 08:50:00) [2]

А что DataSetProvider как будто не может SQL запросы делать?

Если TDataSetProvider.ResolveToDataSet=true, то все изменения применяются к связанному с ним набору данных, иначе TDataSetProvider сам формирует SQL запрос (это он изумительно делает), но транзакцию он не COMMIT, и это надо делать самому в известных событиях.

Связка TDataSetProvider - TClientDataSet умеет очень много, надо только разобраться. И использовать её только для чтения данных - это всё равно что пилить лес бензопилой, не включая её.


Bukerman   (2004-05-26 18:13:00) [3]

ок, спасибо за участие...
я уже все через SQL запросы делаю.


sniknik   (2004-05-26 18:00:00) [4]

да с dbExpress все чудно работает, без всякой мороки, написал небольшой тестовый сервер трехзвенку для проверки (вернее переделал имеющийся) если хочеш пришлю.


sniknik   (2004-05-26 17:48:00) [5]

> я же пижу я работаю не через запросы
а там ( IBQuery) по другому похоже нельзя, должен быть IBUpdateSQL с запросами на каждое действие (какими именно х.з. с ним не работаю, а с ADODataSet нормально и без этого проходит).
возьми другие компоненты, dbExpres к примеру, там вроде нет такой мороки.


Bukerman   (2004-05-26 17:07:00) [6]

> 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 - нифига.


Vlad   (2004-05-26 16:50:00) [7]


> Bukerman ©   (26.05.04 16:43) [2]

Метод Delete не требует Post. Чего постить-то, если запись удалена.
А по теме, либо ты неправильно работаешь с транзакциями, либо у тебя неверный запрос на удаление (IBUpdateSql)


Sandman25+1   (2004-05-26 16:45:00) [8]

F_main.CD_main.Delete;
    F_main.CD_main.ApplyUpdates(-1);


Bukerman   (2004-05-26 16:43:00) [9]

делаю:
     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);
ситуация повторяется, то есть видимость удаления есть, а при обновлении - все восстанавливается.....


sniknik   (2004-05-26 15:47:00) [10]

Delete удаляет в локальном датасете (ClientDataSet)
Post "закрепляет" изменения
ApplyUpdates отсылает изменения на сервер
одно без другого безсмысленно. если попробовать отдельно ApplyUpdates естественно не поможет.


Наверх

Титульная страница Поиск, карта сайта Написать письмо