[Lazarus] SQLDB, Firebird, milliseconds
Gabor Boros
gaborboros at yahoo.com
Thu Apr 11 17:06:53 CEST 2013
Hi,
When insert record to a Firebird database with SQLDB the millisecond
part of a TIMESTAMP field is sometimes 0 sometimes 999. I use Windows XP
32bit, Firebird 2.5.2 Embedded, fixes_1_0 branch and FPC 2.6.2. Tried
with a snapshot (Lazarus-1.1-40778-fpc-2.7.1-20130410-win32.exe) too but
the result is same.
My test database contains only one table:
CREATE TABLE TABLE1 (DATETIME_FIELD TIMESTAMP);
The test case:
procedure SQLDB;
var
DB:TIBConnection;
TR:TSQLTransaction;
qSC:TSQLQuery;
FS:TFormatSettings;
begin
FS.ShortDateFormat:='yyyy/mm/dd';
FS.ShortTimeFormat:='hh:nn:ss';
FS.DateSeparator:='/';
FS.TimeSeparator:=':';
DB:=TIBConnection.Create(nil);
DB.CharSet:='UTF8';
DB.DatabaseName:='MYDB';
DB.UserName:='SYSDBA';
DB.PassWord:='masterkey';
TR:=TSQLTransaction.Create(nil);
TR.DataBase:=DB;
TR.Params.Add('read_committed');
TR.Params.Add('no_rec_version');
TR.Params.Add('wait');
TR.Params.Add('write');
qSC:=TSQLQuery.Create(nil);
qSC.DataBase:=DB;
qSC.Transaction:=TR;
qSC.SQL.Add('INSERT INTO TABLE1 (DATETIME_FIELD) VALUES
(:IN_DATETIME_FIELD);');
DB.Connected:=True;
TR.StartTransaction;
qSC.Prepare;
qSC.ParamByName('IN_DATETIME_FIELD').Value:=StrToDateTime('2010/11/12
13:14:15',FS); //In the database: 2010/11/12 13:14:14:999
qSC.ExecSQL;
qSC.ParamByName('IN_DATETIME_FIELD').Value:=StrToDateTime('2007/11/03
06:06:47',FS); //In the database: 2007/11/03 06:06:47:0
qSC.ExecSQL;
qSC.ParamByName('IN_DATETIME_FIELD').Value:=StrToDateTime('2002/03/04
05:06:07',FS); //In the database: 2002/03/04 05:06:06:999
qSC.ExecSQL;
qSC.ParamByName('IN_DATETIME_FIELD').Value:=StrToDateTime('2007/11/03
05:44:28',FS); //In the database: 2007/11/03 05:44:28:0
qSC.ExecSQL;
TR.Commit;
DB.Connected:=False;
TR.Free;
DB.Free;
end;
Gabor
More information about the Lazarus
mailing list