Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > TDBGrid & TIBQuery


Автор: cvi 14.4.2004, 10:05
Здравствуйте,

Задача, которую я тут собираюсь описать, очень проста и делалась много раз на Delphi 5.
А вот на Delphi 7 не получаеться.

Есть процедура, которая вставляет данные в базу данных Interbase 6.0
procudere InsSQL(SQL_Text : TMemo; SQL_Comment : TEdit)
var
Q_SQL : TIBQuery;
Trans : TIBTransaction;
begin
Q_SQL := nil;
Trans := nil;
try
try
Q_SQL := TIBQuery.Create(Application);
Trans := TIBQuery.Create(Application);
Q_SQL.DataBase := MyIBBase;
Q_SQL.Transaction := Trans;
Trans.DefaultDataBase := MyIBBase;
Q_SQL.SQL.Add('insert into mytable(name1, name2) values(:name1, :name2)');
Q_SQL.ParamByName('name1').AsString := SQL_Comment.Text;
Q_SQL.ParamByName('name2').AsBlob := SQL_Text.Text;
Trans.StartTransaction;
Q_SQL.Execute;
Trans.Commit;
except
Trans.RollBack;
ShowMessahe('Error');
end;
finally
Trans.Free;
Q_SQL.Free;
end
end;

и процедура, которая выбирает данные из таблицы
procedure GetSQL;
begin
// компонент лежит на форме и подключен к DBGrid и DBMemo
SQL_List.Active := False;
SQL_LIst.Active := True;
end;

код вставки
MyMemo.Text := 'Первый текст Memo';
MyEdit.Text := 'Первый текст Edit';
InsSQL(MyMemo, MyEdit);
GetSQL;
MyMemo.Text := 'Второй текст Memo';
MyEdit.Text := 'Второй текст Edit';
InsSQL(MyMemo, MyEdit);
GetSQL;


все свойства компонентов установленны по умолчанию

А теперь вопрос.
Добавляю запись. В базе есть. В Гриде отображаеться только при выходе из программы и запуске приложения снова.
Убираю с процедуры вставки все, что связано с компонентом TIBTransaction.
Обновление происходит при каждой вставке, что и надо. Почему не работает с транзакцией и как надо изменить код, чтобы работало?

Автор: <Spawn> 14.4.2004, 11:49
Попробуй не Commit, а IBDataSet1.Transaction.CommitRetaining

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)