Browse Source

* TDateTimeField.SetAsString now sets the field to NULL if an empty string is provided, bug #12875 + testsuite test

git-svn-id: trunk@12455 -
joost 16 years ago
parent
commit
e89b30abef
3 changed files with 58 additions and 2 deletions
  1. 1 0
      .gitattributes
  2. 7 2
      packages/fcl-db/src/base/fields.inc
  3. 50 0
      tests/test/packages/fcl-db/tdb3.pp

+ 1 - 0
.gitattributes

@@ -7660,6 +7660,7 @@ tests/test/packages/fcl-db/assertions.pas svneol=native#text/plain
 tests/test/packages/fcl-db/dbftoolsunit.pas svneol=native#text/plain
 tests/test/packages/fcl-db/tdb1.pp svneol=native#text/plain
 tests/test/packages/fcl-db/tdb2.pp svneol=native#text/plain
+tests/test/packages/fcl-db/tdb3.pp svneol=native#text/plain
 tests/test/packages/fcl-db/toolsunit.pas svneol=native#text/plain
 tests/test/packages/fcl-registry/tregistry1.pp svneol=native#text/plain
 tests/test/packages/hash/tmdtest.pp svneol=native#text/plain

+ 7 - 2
packages/fcl-db/src/base/fields.inc

@@ -2034,8 +2034,13 @@ procedure TDateTimeField.SetAsString(const AValue: string);
 Var R : TDateTime;
 
 begin
-  R:=StrToDateTime(AVAlue);
-  SetData(@R,False);
+  if AValue<>'' then
+    begin
+    R:=StrToDateTime(AVAlue);
+    SetData(@R,False);
+    end
+  else
+    SetData(Nil);
 end;
 
 

+ 50 - 0
tests/test/packages/fcl-db/tdb3.pp

@@ -0,0 +1,50 @@
+program tdb3;
+// Test for bug 12875
+{$mode objfpc}{$H+}
+
+uses
+  Classes, SysUtils, dbf, db;
+
+var
+  Db1: TDbf;
+  DateFloat: Double;
+  DateStr: String;
+begin
+  Db1 := TDbf.Create(nil);
+  Db1.FilePathFull := ExtractFilePath(ParamStr(0));
+  Db1.TableName := 'testdatestr.dbf';
+  if not FileExists(Db1.TableName) then
+  begin
+    Db1.FieldDefs.Add('DateField', ftDate);
+    Db1.CreateTable;
+  end;
+
+  Db1.Open;
+  Db1.Append;
+  Db1.Post;
+
+  DateStr :=  Db1.FieldByName('DateField').AsString;
+  DateFloat := Db1.FieldByName('DateField').AsFloat;
+  if DateFloat<>0 then Halt(1);
+  WriteLn('DateStr: "',  DateStr, '" DateFloat: ', DateFloat);
+
+  Db1.Edit;
+  Db1.FieldByName('DateField').AsDateTime := Date;
+  Db1.Post;
+  DateStr :=  Db1.FieldByName('DateField').AsString;
+  DateFloat := Db1.FieldByName('DateField').AsFloat;
+  WriteLn('DateStr: "',  DateStr, '" DateFloat: ', DateFloat);
+
+  Db1.Edit;
+  Db1.FieldByName('DateField').AsString := '';
+  Db1.Post;
+  DateStr :=  Db1.FieldByName('DateField').AsString;
+  DateFloat := Db1.FieldByName('DateField').AsFloat;
+  WriteLn('DateStr: "',  DateStr, '" DateFloat: ', DateFloat);
+  if not Db1.FieldByName('DateField').IsNull then Halt(1);
+  if DateFloat<>0 then Halt(1);
+
+  Db1.Free;
+end.
+
+