2012-12-19 2 views
4

Я хотел бы знать, как я могу сохранить запрос в памяти для отображения в DBGrid,Mysql ZeosLib Delphi XE3

мое текущее приложение использует:

TZConnection> TZquery> DataSource> DBGrid

работает нормально, но проблема здесь, после вызова ZConnection.disconnect очищается dbgrid

Я хочу отключить TZConnection сразу после завершения запроса, поскольку большинство баз данных MySQL имеют ограниченное количество пользователей, подключенных одновременно.

+0

Я бы скопировать все данные в TClientDataSet или TkbmMemTable, но так как вы убиваете соединение, почему не отображаются данные (?) TListView или TVirtualStringTree? – ComputerSaysNo

+0

Можете ли вы привести некоторые примеры для копирования всех данных в ClientDataSet, я пробую это, но без каких-либо успехов. – Rebelss

+0

@ Rebless это двухступенчатая операция (или 1, если вы настроили набор данных клиента во время разработки), два этапа: 1) для каждого «поля» в вашем запросе, создайте поле в «наборе данных клиента», 2) для каждой * записи * в запросе, копировать содержимое в «набор данных клиента», очень легко и прямо, это будет очень приятное упражнение, получайте удовольствие! – ComputerSaysNo

ответ

4

Используйте TDataSetProvider для передачи данных запроса в ClientDataSet. Этот компонент делает все для вас.

Поместите следующие компоненты на вашем DataModule, и связать их соответствующим образом:

TZQuery <- TDataSetProvider <- TClientDataSet <- TDataSource 

TDataSource.DataSet := TClientDataSet; 
TCLientDataSet.ProviderName := TDataSetProvider; 
TDataSetProvider.DataSet := TZQuery; 

После этого, просто вызовите метод TClientDataSet.Open, и данные передаются автоматически в TClientDataSet. С помощью TClientDataSet.ApplyUpdates вы можете отбросить данные в свою базу данных.

Я использую эту технику с firebird (TIBQuery).

Вот некоторая информация о ClientDataSets:
A ClientDataSet in Every Database Application
Delphi In Depth: ClientDataSet book
Building Applications With ClientDataSet and InterBase Express

+0

Thx за вашу помощь, но это не работает для меня, TZQuery> TDataSetProvider - ок, я могу установить TDataSetProvider свойство «DataSet» в TZQuery но теперь нет никакой связи между TDataSetProvider и TClientDataSet вы можете написал небольшой пример для меня? – Rebelss

+0

См. Править выше. Вы можете подключить их в ObjectInspector во время разработки. –

+0

thx Max, он отлично работает для меня – Rebelss

Смежные вопросы