: TDataSet; ntable, fld_name, fld_value: string);
//Підготовка НД перед редагуванням (скидання прапора tag в 0)
procedure ClearUpdate (DS: TDataSet); i: word; i:=0 to ds.FieldCount - 1 dods.fields [i] .readOnly=false then.Fields [i] .tag:= 0 //(DataSet.Fields[i].tag AND $ FFFE);
//Установка прапора tag в 1
procedure SetUpdate (sender: Tfield);
sender.tag:=1;//(Sender.tag OR $ 1)
end;
//Підготовка оператора SQL на зміну даних
procedure CreateUpdateSql (DS: TDataSet; qSQL: TQuery; ntable: string);
//Параметри
//DS - редагований набір даних (звідси беруться назви і значення полів)
//qSQL - набір даних для формування SQL
//ntable - змінна таблиця БДi: word ;: boolean ;: string ;: char ;: integer;:=0; DS.state=dsInsert then
//формування оператора INSERT
with qSQL do begin
close; .clear;:=NIL; .ADD ( INSERT INTO + ntable + ();:=false;
//Цикл заповнення імен додаються полів
for i:=0 to DS.FieldCount - 1 do ((DS.Fields [i] .tag AND 1)=1) AND (DS.Fields [i] .ReadOnly=false) then beginf then:=laquo;,raquo;begin:=laquo;raquo;;:=true;.ADD(s+DS.Fields[i].FieldName);:=count+1;;.ADD(laquo;) VALUES ();:=DecimalSeparator;:=. Raquo ;;
//Цикл заповнення значень для додаються полів
f:=false; i:=0 to DS.FieldCount - 1 do ((DS.Fields [i] .tag AND 1)=1) AND (DS.Fields [i] .ReadOnly =false) then beginf then:=, begin:= raquo ;;:=true; DS.Fields [i] .IsNull then.ADD (s + null ) begin
//залежно від типу поляDS.Fields [i] is TnumericField then.ADD (s + DS.Fields [i] .AsString) if (DS.Fields [i] is TStringField) then beginDS.Fields [i] .AsString= then.ADD(s+laquo;nullraquo;).ADD(s+laquo;raquo;laquo;raquo;+DS.Fields[i].AsString+laquo;raquo;laquo;raquo;)if DS.Fields [i] .DataType in [ftDate] then.ADD(s+laquo;raquo;laquo;raquo;+FormatDateTime(laquo;yyyy-mm-ddraquo;,DS.Fields[i].AsDateTime)+laquo;raquo;laquo;raquo;).ADD(s+laquo;raquo;laquo;raquo;+DS.Fields[i].AsString+laquo;raquo;laquo;raquo;);;.ADD(laquo;)raquo;);:=c;
//формування оператора UPDATEqSQL do begin.clear;:=NIL; .ADD ( UPDATE + ntable + SET );:=DecimalSeparator;:=. ;
//формування рядків ПОЛЕ=Значення
//для всіх змінюваних полів
f:=false; i:=0 to DS.FieldCount - 1 do ((DS.Fields [i] .tag AND 1)=1) AND (DS.Fields [i] .ReadOnly =false) then beginf then:=, begin:= raquo ;;:=true;:=count + 1; DS.Fields [i] .IsNull then.ADD (s + DS.Fields [i ] .FieldName + =NULL ) DS.Fields [i] is TnumericField then.ADD (s + DS.Fields [i] .FieldName + = + DS.Fields [i] .AsString) if ( DS.Fields [i] is TStringField) then beginDS.Fields [i] .AsString= then.ADD(s+DS.Fields[i].FieldName+laquo;=NULLraquo;).ADD(s+DS.Fields[i].FieldName+laquo;=raquo;laquo;raquo;+DS.Fields[i].AsString+laquo;raquo;laquo;raquo;)if DS.Fields [i] .DataType in [ftDate] then.ADD(s+DS.Fields[i].FieldName+laquo;=raquo;laquo;raquo;+FormatDateTime(laquo;yyyy-mm-ddraquo;,DS.Fields[i].AsDateTime)+laquo;raquo;laquo;raquo;).ADD(s+DS.Fields[i].FieldName+laquo;=raquo;laquo;raquo;+DS.Fields[i].AsString+laquo;raquo;laquo;raquo;);;:=c;;count=0 then qSQL.SQL.clear ;;
//Підготовка та виконання оператора SQL на видалення даних
function CreateDeleteSql (ntable: string; fld_name, fld_value: string): Boolean; q: TQuery ;: Boolean;:=false; MessageDlg ( Видалити запис? ,, [mbYes, mbNo ], 0)=mrYes then begin:=TQuery.Create (Application); q do begin.DatabaseName:= DB raquo ;;
//close;
//sql.clear;
//dataSource:=NIL; .ADD ( DELETE FROM + ntable) ;. ADD ( WHERE raquo;+fld_name+laquo;=raquo;laquo;raquo;+fld_value+laquo;raquo;laquo;raquo;);;;:=true;.free;:=f;:=f;;
//Виконання оператора зміни даних і зчитування результату зміни
procedure dsBeforePost (DS: TDataSet; ntable, fld_name, fld_value: string); i: integer ;: boolean ;: TFieldNotifyEvent ;: Tfield ;: Tfield;
screen.cursor:=crSQLWait;
//1. Формуємо оператор SQL на зміну даних
CreateUpdateSQL (DS, Dm.qSql, ntable);
//2. Виконуємо оператор SQL на зміну даних
with Dm.qSql dosql.count gt; 0 then beginDS.state=dsInsert then begin ;;:=nil ;;
sql.Clear;
//Формуємо оператор зчитування доданої записи