EatMyShorts
А в каком компоненте данные редактируются непосредственно? Т.е. где шалят Ваши ручки?
Модератор: Модераторы
SQLTransaction.Active:=True //открыть транзакцию
with Q1 do begin
close;
sql.Clear;
sql.Add('insert into table1 (name) values ('Dannie') ;'); //любой запрос на добавление/удаление/редактирование
ExecSQL;
end;
SQLTransaction.Commit; //закрыть ее и принять изменения
DBNavigator
А в каком компоненте данные редактируются непосредственно? Т.е. где шалят Ваши ручки?
procedure TForm1.dbEdit1Exit(Sender: TObject);
var
NeedNumber: Integer;
begin
NeedNumber := Q1.RecNo; //запоминаем № редактируемой записи
Transaction.Active:=True;
with Q2 do begin
close;
sql.Clear;
sql.Add('update table1 set Name=:Name where ID=:ID;');
params.ParamByName('Name').Value:=dbEdit1.Text;
params.ParamByName('ID').Value:=Q1.FieldByName('ID').AsString;
ExecSQL;
end;
Transaction.Commit;
with Q1 do begin
Close;
Open;
end;
Q1.RecNo := NeedNumber; //восстанавливаем курсор на записи
end;
wofs писал(а):в лазарус у квери нема такого свойства (RequestLive)... но это не значит, что невозможно... господа старожилы - ваш выход
ReadOnly
with Q1 do begin
close;
sql.Clear;
sql.Add('insert into table1 (fistid,secondid,Name) values (:fid,:sid,:date) ;');
params.ParamByName('fid').Value:=fid.Text;
params.ParamByName('sid').Value:=sid.Text;
params.ParamByName('date').Value:=edit1.Text;
ExecSQL;
end;
'insert into table1 (fistid,secondid,Name) values (:fid,:sid,:date) ;'
Как получить текст запроса с подставленными параметрами?
wofs писал(а):только вот редактировать квери не получается...
wofs писал(а):и еще почему не работает Refresh ?
А это зависит от типа запроса. Если запрос простой, т.е. из одно таблицы, без агрегатных функций,
Надо код посмотреть. Так трудно сказать..
with do Query1 begin
close;
add "select * from table1 ;";
open;
end;
///
with do QueryEdit begin
close;
add "insert into table1 values(Name) ;";
ExecSQL;
end;
Query1.Refresh; // не работает
{
хотя
Query1.Close;
Query1.Open;
отрабатывает
}
EatMyShorts писал(а):Друзья, поведайте пожалуйста, как вы при программировании БД реализуете механизм отката изменений?(если оно вообще надо)
procedure InsertRecord(field1, field2, field3: string);
begin
try
transac.Active := True;
with query do
begin
Close();
SQL.Clear;
SQL.Add(
'INSERT INTO table1(f1, f2l, f3) '
+ 'VALUES(:field1, :field2, :field3)');
Params.ParamByName('field1').AsString := field1;
Params.ParamByName('field2').AsString := field2;
Params.ParamByName('field3').AsString := field3;
ExecSQL;
end;
transac.Commit;
except
on E: Exception do
MessageDlg(E.message, mtError, [mbOK], 0);
end;
EatMyShorts писал(а):Как я понимаю откатить вставку, если она прошла успешно с помощью transac.RollBack не получится.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 33