* When a dataset is closed and it is not prepared it is assumed that a

problem occured, and unprepare is called to clean everything up. But in
   case the dataset is read from a data-packet, the dataset is also not
   prepared but no problem occured, so do not call unprepare
 * Always use AllocateCursorHandle to allocate a cursor, or else its type
   can be different from what the connection expects

git-svn-id: trunk@13397 -
This commit is contained in:
joost 2009-07-16 20:45:51 +00:00
parent deb052c3f5
commit 3f98f6a5d0

View File

@ -1026,9 +1026,12 @@ end;
procedure TCustomSQLQuery.InternalClose;
begin
if StatementType in [stSelect,stExecProcedure] then FreeFldBuffers;
// Database and FCursor could be nil, for example if the database is not assigned, and .open is called
if (not IsPrepared) and (assigned(database)) and (assigned(FCursor)) then TSQLConnection(database).UnPrepareStatement(FCursor);
if not IsReadFromPacket then
begin
if StatementType in [stSelect,stExecProcedure] then FreeFldBuffers;
// Database and FCursor could be nil, for example if the database is not assigned, and .open is called
if (not IsPrepared) and (assigned(database)) and (assigned(FCursor)) then TSQLConnection(database).UnPrepareStatement(FCursor);
end;
if DefaultFields then
DestroyFields;
FIsEOF := False;
@ -1216,7 +1219,8 @@ begin
ReadFromFile:=IsReadFromPacket;
if ReadFromFile then
begin
FCursor:=TSQLCursor.Create;
if not assigned(fcursor) then
FCursor := TSQLConnection(Database).AllocateCursorHandle;
FCursor.FStatementType:=stSelect;
FUpdateable:=True;
end