Browse Source

* Properly set detail sql when master key is null. Issue #11423

git-svn-id: trunk@30888 -
blikblum 10 years ago
parent
commit
8e9b246042
1 changed files with 19 additions and 18 deletions
  1. 19 18
      packages/fcl-db/src/sqlite/customsqliteds.pas

+ 19 - 18
packages/fcl-db/src/sqlite/customsqliteds.pas

@@ -1424,27 +1424,28 @@ begin
   end;
   end;
 end;
 end;
 
 
-// Specific functions 
+// Specific functions
 
 
-procedure TCustomSqliteDataset.SetDetailFilter;
-  function FieldToSqlStr(AField: TField): String;
+function GetFieldEqualExpression(AField: TField): String;
+begin
+  if not AField.IsNull then
   begin
   begin
-    if not AField.IsNull then
-    begin
-      case AField.DataType of
-        //todo: handle " caracter properly
-        ftString, ftMemo:
-          Result := '"' + AField.AsString + '"';
-        ftDateTime, ftDate, ftTime:
-          Str(AField.AsDateTime, Result);
-      else
-        Result := AField.AsString;
-      end; //case
-    end
+    case AField.DataType of
+      //todo: handle " caracter properly
+      ftString, ftMemo:
+        Result := '"' + AField.AsString + '"';
+      ftDateTime, ftDate, ftTime:
+        Str(AField.AsDateTime, Result);
     else
     else
-      Result:=NullString;
-  end; //function
+      Result := AField.AsString;
+    end; //case
+    Result := ' = ' + Result;
+  end
+  else
+    Result := ' IS NULL';
+end;
 
 
+procedure TCustomSqliteDataset.SetDetailFilter;
 var
 var
   AFilter: String;
   AFilter: String;
   i: Integer;
   i: Integer;
@@ -1456,7 +1457,7 @@ begin
     AFilter := ' where ';
     AFilter := ' where ';
     for i := 0 to FMasterLink.Fields.Count - 1 do
     for i := 0 to FMasterLink.Fields.Count - 1 do
     begin
     begin
-      AFilter := AFilter + IndexFields[i].FieldName + ' = ' + FieldToSqlStr(TField(FMasterLink.Fields[i]));
+      AFilter := AFilter + IndexFields[i].FieldName + GetFieldEqualExpression(TField(FMasterLink.Fields[i]));
       if i <> FMasterLink.Fields.Count - 1 then
       if i <> FMasterLink.Fields.Count - 1 then
         AFilter := AFilter + ' and ';
         AFilter := AFilter + ' and ';
     end;
     end;