소스 검색

* Implement LastInsertRowId

git-svn-id: trunk@14220 -
blikblum 15 년 전
부모
커밋
9e44456f81
3개의 변경된 파일14개의 추가작업 그리고 0개의 파일을 삭제
  1. 2 0
      packages/fcl-db/src/sqlite/customsqliteds.pas
  2. 6 0
      packages/fcl-db/src/sqlite/sqlite3ds.pas
  3. 6 0
      packages/fcl-db/src/sqlite/sqliteds.pas

+ 2 - 0
packages/fcl-db/src/sqlite/customsqliteds.pas

@@ -150,6 +150,7 @@ type
     function SqliteExec(Sql: PChar; ACallback: TSqliteCdeclCallback; Data: Pointer): Integer; virtual; abstract;
     procedure InternalCloseHandle; virtual; abstract;
     function InternalGetHandle: Pointer; virtual; abstract;
+    function GetLastInsertRowId: Int64; virtual; abstract;
     procedure GetSqliteHandle;
     procedure BuildLinkedList; virtual; abstract;
     procedure FreeItem(AItem: PDataRecord);
@@ -238,6 +239,7 @@ type
     property ExpectedUpdates: Integer write SetExpectedUpdates;
     property ExpectedDeletes: Integer write SetExpectedDeletes;
     property IndexFields[Value: Integer]: TField read GetIndexFields;
+    property LastInsertRowId: Int64 read GetLastInsertRowId;
     property RowsAffected: Integer read GetRowsAffected;
     property ReturnCode: Integer read FReturnCode;
     property SqliteHandle: Pointer read FSqliteHandle;

+ 6 - 0
packages/fcl-db/src/sqlite/sqlite3ds.pas

@@ -46,6 +46,7 @@ type
   TSqlite3Dataset = class(TCustomSqliteDataset)
   protected
     procedure BuildLinkedList; override;
+    function GetLastInsertRowId: Int64; override;
     function GetRowsAffected:Integer; override;
     procedure InternalCloseHandle; override;
     function InternalGetHandle: Pointer; override;
@@ -322,6 +323,11 @@ begin
     FBeginItem^.Row[Counter] := nil;
 end;
 
+function TSqlite3Dataset.GetLastInsertRowId: Int64;
+begin
+  Result := sqlite3_last_insert_rowid(FSqliteHandle);
+end;
+
 function TSqlite3Dataset.ReturnString: String;
 begin
   Result := SqliteCode2Str(FReturnCode) + ' - ' + sqlite3_errmsg(FSqliteHandle);

+ 6 - 0
packages/fcl-db/src/sqlite/sqliteds.pas

@@ -48,6 +48,7 @@ type
     function GetSqliteEncoding: String;
   protected
     procedure BuildLinkedList; override;
+    function GetLastInsertRowId: Int64; override;
     function GetRowsAffected:Integer; override;
     function InternalGetHandle: Pointer; override;
     procedure InternalCloseHandle; override;
@@ -275,6 +276,11 @@ begin
     FBeginItem^.Row[Counter] := nil;
 end;
 
+function TSqliteDataset.GetLastInsertRowId: Int64;
+begin
+  Result := sqlite_last_insert_rowid(FSqliteHandle);
+end;
+
 function TSqliteDataset.ReturnString: String;
 begin
   case FReturnCode of