| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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 |