Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Эффективная работа с датасетами / 4 сообщений из 4, страница 1 из 1
02.11.2003, 09:40
    #32312716
Redhat
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эффективная работа с датасетами
Доброго времени суток!
Читал на форуме спор - что лучше DBEdit или просто Edit при работе с БД?

В итоге было предложено такое решение:

Создается датамодуль, на него цепляется коннект (например ADO Connection), далее TADODataSet, далее TdataSetProvider, потом TclientDataSet, DataSource, и на этот DataSource цепляются DBControls.

В итоге получается, что клиент имеет свой датасет, предоставляемый провайдером.

Допустим, необходимо добавить данные в таблицу.

Append для TClientDataSet, в DBControls редактируем что надо, далее метод Post.

Далее цитата:

А у DataSetProvider есть такое событие BeforeUpdateRecord. Вот в нем ты и будешь делать свою обработку сохранения изменений.

А как??? Может кто знает красивое решение. Далее как я понимаю в зависимости от действия необходимо выполнить хранимую на сервере процедуру и сделать рефреш для датасетов
...
Рейтинг: 0 / 0
02.11.2003, 17:10
    #32312805
Tung
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эффективная работа с датасетами
а что именно собираешься делать: делать свою обработку сохранения изменений. ????
...
Рейтинг: 0 / 0
03.11.2003, 05:44
    #32312944
Redhat
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эффективная работа с датасетами
В смысле вызывать нужную хранимую процедуру.

Хоть бы кто пример кода привел что-ли?
...
Рейтинг: 0 / 0
03.11.2003, 08:04
    #32312984
pkarklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эффективная работа с датасетами
А в хэлп заглянуть не пробовал?

A BeforeUpdateRecord event handler has five parameters: the internal provider component, the internal dataset that fetched the data from the server, a delta packet that is positioned on the record that is about to be updated, an indication of whether the update is an insertion, deletion, or modification, and a parameter that returns whether the event handler performed the update.The use of these is illustrated in the following event handler. For simplicity, the example assumes the SQL statements are available as global variables that only need field values:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
procedure TForm1.SimpleDataSet1BeforeUpdateRecord(Sender: TObject; 
   SourceDS: TDataSet; DeltaDS: TCustomClientDataSet; UpdateKind: TUpdateKind; 
   var Applied Boolean);
var
  SQL: string;
  Connection: TSQLConnection;
begin
  Connection := (SourceDS as TSimpleDataSet).Connection;
  case UpdateKind of
  ukModify: 
    begin
     { 1st dataset: update Fields[ 1 ], use Fields[ 0 ] in where clause }

      SQL := Format(UpdateStmt1, [DeltaDS.Fields[ 1 ].NewValue, DeltaDS.Fields[ 0 ].OldValue]);
      Connection.Execute(SQL, nil, nil);
     { 2nd dataset: update Fields[ 2 ], use Fields[ 3 ] in where clause }
      SQL := Format(UpdateStmt2, [DeltaDS.Fields[ 2 ].NewValue, DeltaDS.Fields[ 3 ].OldValue]);
      Connection.Execute(SQL, nil, nil);
    end;
  ukDelete: 
    begin
     { 1st dataset: use Fields[ 0 ] in where clause }

      SQL := Format(DeleteStmt1, [DeltaDS.Fields[ 0 ].OldValue]);
      Connection.Execute(SQL, nil, nil);
     { 2nd dataset: use Fields[ 3 ] in where clause }
      SQL := Format(DeleteStmt2, [DeltaDS.Fields[ 3 ].OldValue]);
      Connection.Execute(SQL, nil, nil);
    end;
  ukInsert: 
    begin
     { 1st dataset: values in Fields[ 0 ] and Fields[ 1 ] }
       SQL := Format(InsertStmt1, [DeltaDS.Fields[ 0 ].NewValue, DeltaDS.Fields[ 1 ].NewValue]);

      Connection.Execute(SQL, nil, nil);
     { 2nd dataset: values in Fields[ 2 ] and Fields[ 3 ] }
      SQL := Format(InsertStmt2, [DeltaDS.Fields[ 2 ].NewValue, DeltaDS.Fields[ 3 ].NewValue]);
      Connection.Execute(SQL, nil, nil);
    end;
  end;
  Applied := True;
end;
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Эффективная работа с датасетами / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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