Browse Source

* Do not change SQL property value internally. Use instead a separated field (FEffectiveSQL)

git-svn-id: trunk@15686 -
blikblum 15 năm trước cách đây
mục cha
commit
50861d26ab

+ 10 - 8
packages/fcl-db/src/sqlite/customsqliteds.pas

@@ -128,6 +128,7 @@ type
     FPrimaryKeyNo: Integer;
     FPrimaryKeyNo: Integer;
     FFileName: String;
     FFileName: String;
     FSQL: String;
     FSQL: String;
+    FEffectiveSQL: String;
     FTableName: String;
     FTableName: String;
     FSqlFilterTemplate: String;
     FSqlFilterTemplate: String;
     FAutoIncFieldNo: Integer;
     FAutoIncFieldNo: Integer;
@@ -924,8 +925,10 @@ begin
   begin
   begin
     if FTablename = '' then
     if FTablename = '' then
       DatabaseError('Tablename not set', Self);
       DatabaseError('Tablename not set', Self);
-    FSQL := 'Select * from ' + FTableName + ';';
-  end;
+    FEffectiveSQL := 'Select * from ' + FTableName + ';';
+  end
+  else
+    FEffectiveSQL := FSQL;
 
 
   if FSqliteHandle = nil then
   if FSqliteHandle = nil then
     GetSqliteHandle;
     GetSqliteHandle;
@@ -1218,7 +1221,7 @@ begin
     FSqlFilterTemplate := FSqlFilterTemplate + FieldDefs[FieldDefs.Count - 1].Name +
     FSqlFilterTemplate := FSqlFilterTemplate + FieldDefs[FieldDefs.Count - 1].Name +
       ' FROM ' + FTableName;
       ' FROM ' + FTableName;
   end;
   end;
-  //set FSQL considering MasterSource active record
+  //set FEffectiveSQL considering MasterSource active record
   SetDetailFilter;
   SetDetailFilter;
 end;
 end;
 
 
@@ -1435,7 +1438,7 @@ var
   i: Integer;
   i: Integer;
 begin
 begin
   if (FMasterLink.Dataset.RecordCount = 0) or not FMasterLink.Active then //Retrieve all data
   if (FMasterLink.Dataset.RecordCount = 0) or not FMasterLink.Active then //Retrieve all data
-    FSQL := FSqlFilterTemplate
+    FEffectiveSQL := FSqlFilterTemplate
   else
   else
   begin
   begin
     AFilter := ' where ';
     AFilter := ' where ';
@@ -1445,7 +1448,7 @@ begin
       if i <> FMasterLink.Fields.Count - 1 then
       if i <> FMasterLink.Fields.Count - 1 then
         AFilter := AFilter + ' and ';
         AFilter := AFilter + ' and ';
     end;
     end;
-    FSQL := FSqlFilterTemplate + AFilter;
+    FEffectiveSQL := FSqlFilterTemplate + AFilter;
   end;
   end;
 end;
 end;
 
 
@@ -1455,7 +1458,7 @@ begin
   {$ifdef DEBUG_SQLITEDS}
   {$ifdef DEBUG_SQLITEDS}
   WriteLn('##TCustomSqliteDataset.MasterChanged##');
   WriteLn('##TCustomSqliteDataset.MasterChanged##');
   WriteLn('  SQL used to filter detail dataset:');
   WriteLn('  SQL used to filter detail dataset:');
-  WriteLn('  ', FSQL);
+  WriteLn('  ', FEffectiveSQL);
   {$endif}
   {$endif}
   RefetchData;
   RefetchData;
 end;
 end;
@@ -1537,8 +1540,7 @@ begin
   ExecSQL(SQLList);
   ExecSQL(SQLList);
 end;
 end;
 
 
-function TCustomSqliteDataset.GetSQLValue(Values: PPChar; FieldIndex: Integer
-  ): String;
+function TCustomSqliteDataset.GetSQLValue(Values: PPChar; FieldIndex: Integer): String;
 begin
 begin
   if (State = dsInactive) or (FieldIndex < 0) or (FieldIndex >= FieldDefs.Count) then
   if (State = dsInactive) or (FieldIndex < 0) or (FieldIndex >= FieldDefs.Count) then
     DatabaseError('Error retrieving SQL value: dataset inactive or field out of range', Self);
     DatabaseError('Error retrieving SQL value: dataset inactive or field out of range', Self);

+ 2 - 2
packages/fcl-db/src/sqlite/sqlite3ds.pas

@@ -163,7 +163,7 @@ begin
   {$endif}
   {$endif}
   FAutoIncFieldNo := -1;
   FAutoIncFieldNo := -1;
   FieldDefs.Clear;
   FieldDefs.Clear;
-  FReturnCode := sqlite3_prepare(FSqliteHandle, PChar(FSQL), -1, @vm, nil);
+  FReturnCode := sqlite3_prepare(FSqliteHandle, PChar(FEffectiveSQL), -1, @vm, nil);
   if FReturnCode <> SQLITE_OK then
   if FReturnCode <> SQLITE_OK then
     DatabaseError(ReturnString, Self);
     DatabaseError(ReturnString, Self);
   sqlite3_step(vm);
   sqlite3_step(vm);
@@ -281,7 +281,7 @@ begin
     sqlite3_exec(FSqliteHandle, PChar('Select Max(' + Fields[FAutoIncFieldNo].FieldName +
     sqlite3_exec(FSqliteHandle, PChar('Select Max(' + Fields[FAutoIncFieldNo].FieldName +
       ') from ' + FTableName), @GetAutoIncValue, @FNextAutoInc, nil);
       ') from ' + FTableName), @GetAutoIncValue, @FNextAutoInc, nil);
 
 
-  FReturnCode := sqlite3_prepare(FSqliteHandle, PChar(FSQL), -1, @vm, nil);
+  FReturnCode := sqlite3_prepare(FSqliteHandle, PChar(FEffectiveSQL), -1, @vm, nil);
   if FReturnCode <> SQLITE_OK then
   if FReturnCode <> SQLITE_OK then
     DatabaseError(ReturnString, Self);
     DatabaseError(ReturnString, Self);
 
 

+ 2 - 2
packages/fcl-db/src/sqlite/sqliteds.pas

@@ -119,7 +119,7 @@ var
 begin
 begin
   FieldDefs.Clear;
   FieldDefs.Clear;
   FAutoIncFieldNo := -1;
   FAutoIncFieldNo := -1;
-  FReturnCode := sqlite_compile(FSqliteHandle, PChar(FSQL), nil, @vm, nil);
+  FReturnCode := sqlite_compile(FSqliteHandle, PChar(FEffectiveSQL), nil, @vm, nil);
   if FReturnCode <> SQLITE_OK then
   if FReturnCode <> SQLITE_OK then
     DatabaseError(ReturnString, Self);
     DatabaseError(ReturnString, Self);
   sqlite_step(vm, @ColumnCount, @ColumnValues, @ColumnNames);
   sqlite_step(vm, @ColumnCount, @ColumnValues, @ColumnNames);
@@ -231,7 +231,7 @@ begin
     sqlite_exec(FSqliteHandle, PChar('Select Max(' + Fields[FAutoIncFieldNo].FieldName + ') from ' + FTableName),
     sqlite_exec(FSqliteHandle, PChar('Select Max(' + Fields[FAutoIncFieldNo].FieldName + ') from ' + FTableName),
       @GetAutoIncValue, @FNextAutoInc, nil);
       @GetAutoIncValue, @FNextAutoInc, nil);
 
 
-  FReturnCode := sqlite_compile(FSqliteHandle, PChar(FSQL), nil, @vm, nil);
+  FReturnCode := sqlite_compile(FSqliteHandle, PChar(FEffectiveSQL), nil, @vm, nil);
   if FReturnCode <> SQLITE_OK then
   if FReturnCode <> SQLITE_OK then
     DatabaseError(ReturnString, Self);
     DatabaseError(ReturnString, Self);