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

git-svn-id: trunk@15686 -
This commit is contained in:
blikblum 2010-08-01 14:13:51 +00:00
parent 79fa2eb539
commit 50861d26ab
3 changed files with 14 additions and 12 deletions

View File

@ -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 + ';'; FEffectiveSQL := 'Select * from ' + FTableName + ';';
end; 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 function TCustomSqliteDataset.GetSQLValue(Values: PPChar; FieldIndex: Integer): String;
): 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);

View File

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

View File

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