Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 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;

Отследи пошагово код и напиши какую ошибку в дельфях сгенерирует.




Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.25;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.72 MB
Время: 0.017 c
1-80993           Vova33                2002-04-12 16:53  2002.04.25  
Пакеты


1-80859           Stasya                2002-04-13 15:13  2002.04.25  
Запуск


1-80883           GrayWolf              2002-04-14 09:05  2002.04.25  
MDI-приложение


3-80779           kserg@ukr.net         2002-04-04 15:50  2002.04.25  
DBGrid.columns - как


1-80930           Yakudza               2002-04-11 16:03  2002.04.25  
Symbol was eliminated by linker