This example I use for inserting a record into a (embedded) firebird database. For update is really the same.
procedure TDMcontacten.DBSaveBufToTable;
var MyQuery : TSQLQuery;
SQLTransAction : TSQLTransaction;
begin
MyQuery := TSQLQuery.create(nil);
SQLTransAction := TSQLTransaction.create(nil);
try
try
SQLTransAction.DataBase := DBConnection;
MyQuery.DataBase := DBConnection;
MyQuery.Transaction := SQLTransaction;
MyQuery.SQL.Add('INSERT INTO kaartverkoop');
MyQuery.SQL.Add('(soortverkoop, datumverkoop, lidnummer, aantal,');
MyQuery.SQL.Add(' bedrag, usernr_create, usernr_update, date_create,');
MyQuery.SQL.Add(' date_update) values');
MyQuery.SQL.Add('(:soortverkoop, :datumverkoop, :lidnummer, :aantal,');
MyQuery.SQL.Add(' :bedrag, :usernr_create, :usernr_update, :date_create,');
MyQuery.SQL.Add(' :date_update)');
MyQuery.Params[0].AsInteger := BufKaartverkoop.FieldByName('soortverkoop').AsInteger;
MyQuery.Params[1].AsDateTime := BufKaartverkoop.FieldByName('datumverkoop').AsDateTime;
MyQuery.Params[2].AsString := BufKaartverkoop.FieldByName('lidnummer').AsString;
MyQuery.Params[3].AsInteger := BufKaartverkoop.FieldByName('aantal').AsInteger;
MyQuery.Params[4].AsFloat := BufKaartverkoop.FieldByName('bedrag').AsFloat;
MyQuery.Params[5].AsInteger := uGebruiker.ID;
MyQuery.Params[6].AsInteger := uGebruiker.ID;
MyQuery.Params[7].AsDateTime := now;
MyQuery.Params[8].AsDateTime := now;
MyQuery.ExecSQL;
SQLTransAction.Commit;
except
SQLTransAction.Rollback;
end;
finally
MyQuery.free;
SQLTransAction.free;
end;
end;