Страница 1 из 1

как из clientdataset изменить данные на сервере?

Добавлено: 28 май 2006, 12:04
orlov_2001
пишу обычную трехзвенку, использую ibdatabase, ibtransaction, provider, socket, clientdataset. сохраняю на клиенте с помощью applyupdate. после дисконнекта все измененные данные пропадают. заранее прошу извинить, поскольку это первый опыт

Добавлено: 28 май 2006, 17:39
kdv
www.ibase.ru/devinfo/ibx.htm
см. про транзакции.

Читал про транзакции

Добавлено: 28 май 2006, 23:31
orlov_2001
Читал про транзакции, делаю как написано, в свойствах транзакции указываю read_commited, write. Но почему то данные все равно не сохраняются.
И нигде не могу найти реального примера как можно сделать Commit транзакции. Насколько я понимаю, нужно делать коммит после applyupdates на клиенте. А как это сделать я не знаю.
Пожалуйста подскажите, было бы здорово, если бы показали пример.

Добавлено: 29 май 2006, 02:24
kdv
Пожалуйста подскажите, было бы здорово, если бы показали пример.
IBTransaction.Commit. Так пойдет?
Вообще ApplyUpdates должен сам стартовать и завершать транзакцию при посылке данных на сервер. Если изменения не сохраняются, значит ты что-то не то делаешь.
См. пример CachedUp.

Добавлено: 29 май 2006, 15:17
orlov_2001
В примере не показано как это должно работать на трехзвенной модели.
Насколько я понимаю, то при вызове ApplyUpdates на клиенте должно автоматически делать и ApplyUpdates на TDatasetProvider, что и должно сохранить данные в сервере.
Но у меня такое не работает. Как заставить сервер сохранить данные?
В IBDataset прописаны все запросы, все ссылки расставлены.
Если нетрудно, объясните, что нужно сделать на сервере и какие события использовать.

Добавлено: 29 май 2006, 15:50
Merlin
А TIBDataSet давно научился с MIDAS работать? Когда я в дело это вникал, он не умел.

Добавлено: 29 май 2006, 18:47
kdv
последний - должон. Если в комплекте нет IBClientDataSet, значит уже умеет.

TIBClientDataset не подходит для трехзвенки

Добавлено: 30 май 2006, 06:42
orlov_2001
IBClientDataSet is a client dataset that uses an internal TIBDataSet and TDataSetProvider for fetching data and applying updates. It allows you to cache updates fetched using InterBase Expres without using an external provider and client dataset....

так что вот так... грустно.

А клиент датасет как раз создан специально для трехзвенной структуры. Только вот как дать серверу понять что нужно сделать коммит???

Добавлено: 30 май 2006, 09:53
kdv
я ж тебе объяснил - если НЕТ этого компонента в комплекте, значит все должно работать нормально. И намекнул на более свежую версию IBX.
Если ты читаешь readme к ibx, то тебе надо было это прочитать:
"IBClientDataset is depreciated like the corresponding
SQLClientDataset and the BDEClientDataset. It is no
longer installed by default."

Так что я не понимаю, где грустно. Кроме того, IBClientDataSet есть в исходниках, там же. В крайнем случае для управления транзакциями с клиента создаешь методы у сервера, и вызываешь их с клиента...

Добавлено: 30 май 2006, 09:57
kdv
Ну и наконец - на www.ibase.ru, в разделе документация, есть туча ссылок по специфике clientdataset. и есть ссылка на статью по работе с IBX и ClientDataSet. И к ней есть большой пример. Попробуй.

Спасибо :))

Добавлено: 30 май 2006, 12:49
orlov_2001
Спасибо :) обязательно посмотрю еще раз все материалы по теме.
Только вот мне непонятно, как IBClientDataset можно подцепить к SocketConnection, ну в общем с удаленным сервером.

Добавлено: 30 май 2006, 13:33
kdv
IBClientDataset
гм, ты мои ответы читаешь, или нет? Этот компонент УЖЕ НЕ НУЖЕН! Deprecated! Удален из IBX.