Ağustos 29

ZeosLIB + FireBIRD Edit – Post hatası

Delphi’de firebird 2.1 ve zeoslib 7.0.0 Alpha kullanarak geliştirdiğim bir proje var ve artık son safhalarına doğru ilerliyor. Amma ve lakin ilk günden bu yana çözemediğim bir sıkıntı vardı. Programın herşeyi güzel firebird ile bağlantısı, kayıt eklemesi, silmesi, sql sorguları herşey güzel. Fakat herhangi bir kaydı edit yapıp ardından post yapınca “Error Code – 104 invalid token” diye hata mesajı veriyor. Ara tara bi türlü çözemedim, zeoslib’den de çok şüphelenmiyorum adam 7. versiyonu böyle hata yapmış olamazlar diyordum ki yapmışlar …

Sorun ZDbcGenericResolver.pas dosyası içerisinde eğer dosyayı açar ve TZGenericCachedResolver.PostUpdates procedure’ünü asağıdaki gibi değiştirirseniz sorun çözülyor. 🙂
procedure TZGenericCachedResolver.PostUpdates(Sender: IZCachedResultSet;
UpdateType: TZRowUpdateType; OldRowAccessor, NewRowAccessor: TZRowAccessor);
var
Statement : IZPreparedStatement;
SQL : string;
SQLParams : TObjectList;
lUpdateCount : Integer;
lValidateUpdateCount : Boolean;

Temp: TStrings;
begin
if (UpdateType = utDeleted)
and (OldRowAccessor.RowBuffer.UpdateType = utInserted) then
Exit;

SQLParams := TObjectList.Create;
try
case UpdateType of
utInserted:
begin
SQL := FormInsertStatement(SQLParams, NewRowAccessor);
If Assigned(InsertStatement) and (SQL <> InsertStatement.GetSQL) then
InsertStatement := nil;
If (not Assigned(InsertStatement)) and (Trim(SQL) <> ”) then
InsertStatement := CreateResolverStatement(SQL);
If Assigned(InsertStatement) then
Statement := InsertStatement;
end;
utDeleted:
begin
SQL := FormDeleteStatement(SQLParams, OldRowAccessor);
If Assigned(DeleteStatement) and (SQL <> DeleteStatement.GetSQL) then
DeleteStatement := nil;
If (not Assigned(DeleteStatement)) and (Trim(SQL) <> ”) then
DeleteStatement := CreateResolverStatement(SQL);
If Assigned(DeleteStatement) then
Statement := DeleteStatement;
end;
utModified:
begin
SQL := FormUpdateStatement(SQLParams, OldRowAccessor, NewRowAccessor);
If Assigned(UpdateStatement) and (SQL <> UpdateStatement.GetSQL) then
UpdateStatement := nil;
If (not Assigned(UpdateStatement)) and (Trim(SQL) <> ”) then
UpdateStatement := CreateResolverStatement(SQL);
If Assigned(UpdateStatement) then
Statement := UpdateStatement;
end;
else
Exit;
end;

if SQL <> ” then
begin

FillStatement(Statement, SQLParams, OldRowAccessor, NewRowAccessor);
// if Property ValidateUpdateCount isn’t set : assume it’s true
lValidateUpdateCount := (Sender.GetStatement.GetParameters.IndexOfName(‘ValidateUpdateCount’) = -1)
or StrToBoolEx(Sender.GetStatement.GetParameters.Values[‘ValidateUpdateCount’]);

lUpdateCount := Statement.ExecuteUpdatePrepared;
if (lValidateUpdateCount)
and (lUpdateCount <> 1 ) then
raise EZSQLException.Create(Format(SInvalidUpdateCount, [lUpdateCount]));
end;
finally
SQLParams.Free;
end;
end;

Did you like this? Share it:

Etiketler:, , ,

Posted 29 Ağustos 2011 by admin in category Delphi, Firebird, Lazarus, Programlama, Veritabanı

Leave a Comment

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

*