소스 검색

* 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 -

joost 16 년 전
부모
커밋
3f98f6a5d0
1개의 변경된 파일8개의 추가작업 그리고 4개의 파일을 삭제
  1. 8 4
      packages/fcl-db/src/sqldb/sqldb.pp

+ 8 - 4
packages/fcl-db/src/sqldb/sqldb.pp

@@ -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