powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / копирование текущей записи из TDataSet в TClientDataSet
4 сообщений из 4, страница 1 из 1
копирование текущей записи из TDataSet в TClientDataSet
    #32198539
olden69
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
есть TADOQuery, выбирающий множество записей из базы
(select id,field1 from Table1 where field1 like '%asd%'),
к нему прицеплена гридина
когда в гридине выбираем любую запись, она (запись) должна скопироваться в TClientDataSet (стирая там старую)

может кто подскажет реализацию?

поскольку например вариант привязать ClientDataSet к Query и через провайдер и через MasterSource не удается по причине ошибки "циклическая ссылка" а попытка указать в качестве MasterSource еще один ClientDataSet, привязанный к тому же Query выдает нераспознанную ошибку
...
Рейтинг: 0 / 0
копирование текущей записи из TDataSet в TClientDataSet
    #32198755
Hammer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть несколько вариантов:
1. На форме уже существует ClientDataSet и его поля совпадают с TAdoQuery.
1.1 procedure TForm1.FormCreate( ... )
begin
...
ClientDataSet.CreateDataSet;
...
end;
1.2 procedure TForm1.ADOQuery1AfterScroll(DataSet: TDataSet);
begin
ClientDataSet.EmptyDataSet;
ClientDataSet.AppendRecord( [ ... ] );
end;

2. На форме уже существует ClientDataSet и у него нет полей, а в TAdoQuaery есть.
2.1 procedure TForm1.FormCreate( ... )
begin
...
ClientDataSet.CreateDataSet;
ClientDataSet.Data := Null;
ClientDataSet.FieldDefs.BeginUpdate;
ClientDataSet.FieldDefs := ADOQuery1.FieldDefs
ClientDataSet.FieldDefs.EndUpdate;
...
end;
2.2 procedure TForm1.ADOQuery1AfterScroll(DataSet: TDataSet);
begin
ClientDataSet.EmptyDataSet;
ClientDataSet.AppendRecord( [ ... ] );
end;

3. На форме нет ClientDataSet.
3.1
implementation

{$R *.DFM}
var
CDS: TClientDataSet;

3.2 procedure TForm1.FormCreate( ... )
begin
...
CDS := TClientDataSet.Create( nil );
ClientDataSet.Data := Null;
ClientDataSet.FieldDefs.BeginUpdate;
ClientDataSet.FieldDefs := ADOQuery1.FieldDefs
ClientDataSet.FieldDefs.EndUpdate;
...
end;
3.3 procedure TForm1.ADOQuery1AfterScroll(DataSet: TDataSet);
begin
ClientDataSet.EmptyDataSet;
ClientDataSet.AppendRecord( [ ... ] );
end;

3.4 procedure TForm1.FormClose( ... )
begin
CDS.Free;
end;
...
Рейтинг: 0 / 0
копирование текущей записи из TDataSet в TClientDataSet
    #32198859
olden69
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо! :)

вот только не хочется в AppendRecord перечислять все два десятка полей ADOQuery


у меня сработал такой вариант:

ADOQuey1 и ClientDataSet1 связаны через Provider
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
void __fastcall TForm1::ADOQuery1AfterScroll(TDataSet *DataSet)
{
  ClientDataSet1->Filtered = false;
  ClientDataSet1->Filtered = true;
}

void __fastcall TForm1::ClientDataSet1FilterRecord(TDataSet *DataSet,
      bool &Accept)
{
  if (ClientDataSet1->Fields->FieldByName( "ID" )->AsInteger == ADOQuery1->Fields->FieldByName( "ID" )->AsInteger)
    Accept = true;
  else
    Accept = false;
}

единственный недостаток
при ClientDataSet1->Filtered = false; на короткое время снимается фильтрация и становятся доступными все записи

метода принудительного вызова фильтрации не нашел
...
Рейтинг: 0 / 0
копирование текущей записи из TDataSet в TClientDataSet
    #32222373
Фотография moonmike
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
единственный недостаток
при ClientDataSet1->Filtered = false; на короткое время снимается фильтрация и становятся доступными все записи

метода принудительного вызова фильтрации не нашел

ClientDataSet1->DisableControls();
ClientDataSet1->Filtered = false;
ClientDataSet1->Filtered = true;
ClientDataSet1->EnableControls();

И записи мелькать не будут.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / копирование текущей записи из TDataSet в TClientDataSet
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]