Форум: "Базы";
Текущий архив: 2002.04.25;
Скачать: [xml.tar.bz2];
ВнизВозникла непонятная проблема со связкой IBQuery + IBUpdateSQL Найти похожие ветки
← →
Lt. Dennis (2002-04-03 16:46) [0]Есть тут проблемы..
Может кто поможет?
Возникла непонятная проблема со связкой IBQuery + IBUpdateSQL.
(редактируемый запрос)
В свойстве ModifySQL компонента IBUpdateSQL прописываем:
UPDATE NEW_TABLE
SET L2=:L2, L3=:L3
WHERE
L2=:OLD_L2
При подтверждении изменений возникает ошибка:
"EInterBaseError with Message: UPDATE FAILED".
Не могу найти причину этому.
Если у кого есть примеры работы IBQuery + IBUpdateSQL
пришлите пожайлуста сюда: lt_dennis@moldova.cc
Постараюсь как можно более подробней...
Часть файла формы (*.dfm)
object IBUpdateSQL1: TIBUpdateSQL
RefreshSQL.Strings = (
"Select "
" L2,"
" L3"
"from new_table "
"where"
" L2 = :L2")
ModifySQL.Strings = (
"update new_table"
"set"
" L2 = :L2,"
" L3 = :L3"
"where"
" L2 = :OLD_L2")
InsertSQL.Strings = (
"insert into new_table"
" (L2, L3)"
"values"
" (:L2, :L3)")
DeleteSQL.Strings = (
"delete from new_table"
"where"
" L2 = :OLD_L2")
Left = 264
Top = 16
end
object IBQuery1: TIBQuery
Database = IBDatabase1
Transaction = IBTransaction1
AfterInsert = IBQuery1AfterInsert
BeforeDelete = IBQuery1BeforeDelete
BeforeEdit = IBQuery1BeforeEdit
BeforePost = IBQuery1BeforePost
CachedUpdates = True
SQL.Strings = (
"select L2,L3 from NEW_TABLE")
UpdateObject = IBUpdateSQL1
Left = 96
Top = 32
end
object DataSource1: TDataSource
DataSet = IBQuery1
Left = 368
Top = 168
end
Таблица New_Table:
L2 VARCHAR(100),
L3 FLOAT
Фрагмент исходника:
implementation
uses IB;
{$R *.DFM}
var Data:String;
procedure TForm1.Button1Click(Sender: TObject);
begin
IBQuery1.Open;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
IBQuery1.Close;
end;
procedure TForm1.IBQuery1AfterInsert(DataSet: TDataSet);
begin
IBUpdateSQL1.SetParams(ukInsert);
end;
procedure TForm1.IBQuery1BeforeDelete(DataSet: TDataSet);
begin
IBUpdateSQL1.SetParams(ukDelete);
end;
procedure TForm1.IBQuery1BeforePost(DataSet: TDataSet);
begin
try
//IBUpdateSQL1.SetParams(ukModify);
//IBUpdateSQL1.Query[ukModify].Close;
//IBUpdateSQL1.Query[ukModify].ParamByName("L2").AsString:=IBQuery1.FieldByName("L2").AsString;
//IBUpdateSQL1.Query[ukModify].ParamByName("L3").AsFloat:=IBQuery1.FieldByName("L3").AsFloat;
//IBUpdateSQL1.Query[ukModify].Prepare;
//IBTransaction2.StartTransaction;
//IBUpdateSQL1.Apply(ukModify);
//IBUpdateSQL1.Query[ukModify].Open;
//IBTransaction2.Commit;
//IBUpdateSQL1.Query[ukModify].Close;
except
on Er:EIBInterBaseError do
ShowMessage(IntToStr(Er.SQLCode));
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
if IBQuery1.Active
then IBQuery1.ApplyUpdates;
end;
procedure TForm1.IBQuery1BeforeEdit(DataSet: TDataSet);
begin
Data:=IBQuery1.FieldByName("L2").AsString;
end;
end.
← →
Fareader (2002-04-03 18:54) [1]А где ошибка вылезает? Если здесь procedure TForm1.Button3Click,
то проверка на то, что в кеше чго-то есть надо ставить:
if IBQuery1.updatesPending then IBQuery1.ApplyUpdates
А что сие означает
Data:=IBQuery1.FieldByName("L2").AsString;
Отследи пошагово код и напиши какую ошибку в дельфях сгенерирует.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.04.25;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.006 c