- Fixed date/time formats for sqldb and tdbf

- removed obsolete TSQLConnection.ObtainSQLStatementType
- added check for empty sql-statements to sqldb

git-svn-id: trunk@803 -
This commit is contained in:
joost 2005-08-06 13:57:56 +00:00
parent 801428838f
commit 6318a55ca9
6 changed files with 20 additions and 123 deletions

View File

@ -489,78 +489,30 @@ begin
Result:=nil;
end;
function TDataSet.GetFieldData(Field: TField; Buffer: Pointer): Boolean;
begin
Result := False;
end;
function TDataSet.GetFieldData(Field: TField; Buffer: Pointer;
NativeFormat: Boolean): Boolean;
function ConvertData(Field: TField; Source: TDateTimeRec): TDateTime;
var
TimeStamp: TTimeStamp;
begin
case Field.DataType of
ftDate:
begin
TimeStamp.Time := 0;
TimeStamp.Date := Source.Date;
end;
ftTime:
begin
TimeStamp.Time := Source.Time;
TimeStamp.Date := DateDelta;
end;
else
try
TimeStamp := MSecsToTimeStamp(Trunc(Source.DateTime));
except
TimeStamp.Time := 0;
TimeStamp.Date := 0;
end;
end;
// Result := TimeStampToDateTime(TimeStamp);
Result := (TimeStamp.Date - DateDelta) + (TimeStamp.Time / MSecsPerDay);
end;
var
d: TDateTimeRec;
begin
if NativeFormat then
Result := GetFieldData(Field, Buffer) else
if Field.DataType in [ ftDate, ftDateTime, ftTime ] then begin
Result := GetFieldData(Field, @d);
if Result then
TDateTime(Buffer^) := ConvertData(Field, d);
end else
Result := GetFieldData(Field, Buffer);
Result := GetFieldData(Field, Buffer);
end;
procedure TDataSet.SetFieldData(Field: TField; Buffer: Pointer);
begin
// empty procedure
end;
procedure TDataSet.SetFieldData(Field: TField; Buffer: Pointer;
NativeFormat: Boolean);
function ConvertData(Field: TField; Data: TDateTime): TDateTimeRec;
var
TimeStamp: TTimeStamp;
begin
TimeStamp.Time := Trunc(Frac(Data) * MSecsPerDay);
TimeStamp.Date := DateDelta + Trunc(System.Int(Data));
// TimeStamp := DateTimeToTimeStamp(Data);
case Field.DataType of
ftDate: Result.Date := TimeStamp.Date;
ftTime: Result.Time := TimeStamp.Time;
else
Result.DateTime := TimeStampToMSecs(TimeStamp);
end;
end;
var
d: TDateTimeRec;
begin
if NativeFormat then
SetFieldData(Field, Buffer)
else
if Field.DataType in [ ftDate, ftDateTime, ftTime ] then begin
d := ConvertData(Field, TDateTime(Buffer^));
SetFieldData(Field, @d);
end else
SetFieldData(Field, Buffer);
SetFieldData(Field, Buffer);
end;
Function TDataset.GetField (Index : Longint) : TField;

View File

@ -1062,7 +1062,7 @@ type
procedure GetBookmarkData(Buffer: PChar; Data: Pointer); virtual; abstract;
function GetBookmarkFlag(Buffer: PChar): TBookmarkFlag; virtual; abstract;
function GetDataSource: TDataSource; virtual;
function GetFieldData(Field: TField; Buffer: Pointer): Boolean; overload; virtual; abstract;
function GetFieldData(Field: TField; Buffer: Pointer): Boolean; overload; virtual;
function GetFieldData(Field: TField; Buffer: Pointer; NativeFormat: Boolean): Boolean; overload; virtual;
function GetRecord(Buffer: PChar; GetMode: TGetMode; DoCheck: Boolean): TGetResult; virtual; abstract;
function GetRecordSize: Word; virtual; abstract;
@ -1081,7 +1081,7 @@ type
function IsCursorOpen: Boolean; virtual; abstract;
procedure SetBookmarkFlag(Buffer: PChar; Value: TBookmarkFlag); virtual; abstract;
procedure SetBookmarkData(Buffer: PChar; Data: Pointer); virtual; abstract;
procedure SetFieldData(Field: TField; Buffer: Pointer); overload; virtual; abstract;
procedure SetFieldData(Field: TField; Buffer: Pointer); overload; virtual;
procedure SetFieldData(Field: TField; Buffer: Pointer; NativeFormat: Boolean); overload; virtual;
public
constructor Create(AOwner: TComponent); override;

View File

@ -558,7 +558,7 @@ begin
Move (FValueBuffer^,Buffer^ ,DataSize);
end
else
Result:=FDataset.GetFieldData(Self,Buffer,False);
Result:=FDataset.GetFieldData(Self,Buffer);
end;
function TField.GetDataSize: Word;

View File

@ -243,7 +243,6 @@ procedure TMySQLConnection.PrepareStatement(cursor: TSQLCursor;
begin
if assigned(AParams) and (AParams.count > 0) then
DatabaseError('Parameters (not) yet supported for the MySQL SqlDB connection.',self);
ObtainSQLStatementType(cursor,buf);
With Cursor as TMysqlCursor do
begin
FStatement:=Buf;

View File

@ -381,7 +381,6 @@ var s : string;
i : integer;
begin
ObtainSQLStatementType(cursor,buf);
with (cursor as TPQCursor) do
begin
FPrepared := False;

View File

@ -97,7 +97,6 @@ type
procedure UpdateIndexDefs(var IndexDefs : TIndexDefs;TableName : string); virtual;
function GetSchemaInfoSQL(SchemaType : TSchemaType; SchemaObjectName, SchemaPattern : string) : string; virtual;
function CreateBlobStream(Field: TField; Mode: TBlobStreamMode): TStream; virtual;abstract;
Procedure ObtainSQLStatementType(Cursor : TSQLCursor; SQLStr : string);
public
property Handle: Pointer read GetHandle;
destructor Destroy; override;
@ -198,7 +197,6 @@ type
function GetCanModify: Boolean; override;
function ApplyRecUpdate(UpdateKind : TUpdateKind) : boolean; override;
Function IsPrepared : Boolean; virtual;
procedure SetFieldData(Field: TField; Buffer: Pointer; NativeFormat: Boolean); overload; override;
procedure SetFiltered(Value: Boolean); override;
public
procedure Prepare; virtual;
@ -314,54 +312,6 @@ begin
end; {case}
end;
Procedure TSQLConnection.ObtainSQLStatementType(Cursor : TSQLCursor; SQLStr : string);
Var
L : Integer;
cmt : boolean;
P,PE,PP : PChar;
S : string;
begin
L := Length(SQLstr);
if L=0 then
begin
DatabaseError(SErrNoStatement);
exit;
end;
P:=Pchar(SQLstr);
PP:=P;
Cmt:=False;
While ((P-PP)<L) do
begin
if not (P^ in [' ',#13,#10,#9]) then
begin
if not Cmt then
begin
// Check for comment.
Cmt:=(P^='/') and (((P-PP)<=L) and (P[1]='*'));
if not (cmt) then
Break;
end
else
begin
// Check for end of comment.
Cmt:=Not( (P^='*') and (((P-PP)<=L) and (P[1]='/')) );
If not cmt then
Inc(p);
end;
end;
inc(P);
end;
PE:=P+1;
While ((PE-PP)<L) and (PE^ in ['0'..'9','a'..'z','A'..'Z','_']) do
Inc(PE);
Setlength(S,PE-P);
Move(P^,S[1],(PE-P));
Cursor.FStatementType := StrToStatementType(s);
end;
function TSQLConnection.GetSchemaInfoSQL( SchemaType : TSchemaType; SchemaObjectName, SchemaPattern : string) : string;
@ -529,12 +479,6 @@ begin
Result := Assigned(FCursor) and FCursor.FPrepared;
end;
procedure TSQLQuery.SetFieldData(Field: TField; Buffer: Pointer;
NativeFormat: Boolean);
begin
SetFieldData(Field, Buffer);
end;
Function TSQLQuery.AddFilter(SQLstr : string) : string;
begin
@ -595,6 +539,9 @@ begin
FSQLBuf := TrimRight(FSQL.Text);
if FSQLBuf = '' then
DatabaseError(SErrNoStatement);
SQLParser(FSQLBuf);
if filtered then