浏览代码

* fcl-db: Oracle: improved date/time support, issue #26321

git-svn-id: trunk@27982 -
reiniero 11 年之前
父节点
当前提交
eb16231869
共有 1 个文件被更改,包括 7 次插入6 次删除
  1. 7 6
      packages/fcl-db/src/sqldb/oracle/oracleconnection.pp

+ 7 - 6
packages/fcl-db/src/sqldb/oracle/oracleconnection.pp

@@ -592,7 +592,7 @@ procedure TOracleConnection.SetParameters(cursor : TSQLCursor;AParams : TParams)
 var SQLVarNr       : integer;
 var SQLVarNr       : integer;
     i              : integer;
     i              : integer;
     f              : double;
     f              : double;
-    year,month,day : word;
+    year, month, day, hour, minute, second, millisecond : word;
     db             : array[0..4] of byte;
     db             : array[0..4] of byte;
     pb             : pbyte;
     pb             : pbyte;
     s              : string;
     s              : string;
@@ -619,14 +619,15 @@ begin
                             end;
                             end;
         ftDate, ftDateTime: begin
         ftDate, ftDateTime: begin
                             DecodeDate(asDateTime,year,month,day);
                             DecodeDate(asDateTime,year,month,day);
+                            DecodeTime(asDateTime,hour,minute,second,millisecond);
                             pb := parambuffers[SQLVarNr].buffer;
                             pb := parambuffers[SQLVarNr].buffer;
                             pb[0] := (year div 100)+100;
                             pb[0] := (year div 100)+100;
                             pb[1] := (year mod 100)+100;
                             pb[1] := (year mod 100)+100;
                             pb[2] := month;
                             pb[2] := month;
                             pb[3] := day;
                             pb[3] := day;
-                            pb[4] := 1;
-                            pb[5] := 1;
-                            pb[6] := 1;
+                            pb[4] := hour+1;
+                            pb[5] := minute+1;
+                            pb[6] := second+1;
                             end;
                             end;
         ftFmtBCD,ftBCD    : begin
         ftFmtBCD,ftBCD    : begin
                             FmtBCD2Nvu(asFmtBCD,parambuffers[SQLVarNr].buffer);
                             FmtBCD2Nvu(asFmtBCD,parambuffers[SQLVarNr].buffer);
@@ -885,7 +886,7 @@ function TOracleConnection.LoadField(cursor: TSQLCursor; FieldDef: TFieldDef; bu
 
 
 var dt        : TDateTime;
 var dt        : TDateTime;
     b         : pbyte;
     b         : pbyte;
-    size,i    :  byte;
+    size,i    : byte;
     exp       : shortint;
     exp       : shortint;
     cur       : Currency;
     cur       : Currency;
     odt       : POCIdateTime;
     odt       : POCIdateTime;
@@ -925,7 +926,7 @@ begin
       ftInteger         : move(fieldbuffers[FieldDef.FieldNo-1].buffer^,buffer^,sizeof(integer));
       ftInteger         : move(fieldbuffers[FieldDef.FieldNo-1].buffer^,buffer^,sizeof(integer));
       ftDate  : begin
       ftDate  : begin
                 b := fieldbuffers[FieldDef.FieldNo-1].buffer;
                 b := fieldbuffers[FieldDef.FieldNo-1].buffer;
-                dt := EncodeDate((b[0]-100)*100+(b[1]-100),b[2],b[3]);
+                dt := ComposeDateTime(EncodeDate((b[0]-100)*100+(b[1]-100),b[2],b[3]), EncodeTime(b[4]-1, b[5]-1, b[6]-1, 0));
                 move(dt,buffer^,sizeof(dt));
                 move(dt,buffer^,sizeof(dt));
                 end;
                 end;
       ftDateTime : begin
       ftDateTime : begin