+ Implemented Null-values for MySQL-fields

git-svn-id: trunk@3779 -
This commit is contained in:
joost 2006-06-03 21:43:13 +00:00
parent 53201802d5
commit fcd98ffa77

View File

@ -65,7 +65,7 @@ Type
Procedure ConnectToServer; virtual; Procedure ConnectToServer; virtual;
Procedure SelectDatabase; virtual; Procedure SelectDatabase; virtual;
function MySQLDataType(AType: enum_field_types; ASize: Integer; var NewType: TFieldType; var NewSize: Integer): Boolean; function MySQLDataType(AType: enum_field_types; ASize: Integer; var NewType: TFieldType; var NewSize: Integer): Boolean;
function MySQLWriteData(AType: enum_field_types; ASize: Integer; Source, Dest: PChar): Integer; function MySQLWriteData(AType: enum_field_types; ASize: Integer; Source, Dest: PChar): Boolean;
// SQLConnection methods // SQLConnection methods
procedure DoInternalConnect; override; procedure DoInternalConnect; override;
procedure DoInternalDisconnect; override; procedure DoInternalDisconnect; override;
@ -421,7 +421,7 @@ function TConnectionName.LoadField(cursor : TSQLCursor;
FieldDef : TfieldDef;buffer : pointer) : boolean; FieldDef : TfieldDef;buffer : pointer) : boolean;
var var
I, FC, CT: Integer; I, FC: Integer;
field: PMYSQL_FIELD; field: PMYSQL_FIELD;
row : MYSQL_ROW; row : MYSQL_ROW;
C : TCursorName; C : TCursorName;
@ -443,9 +443,8 @@ begin
if field^.name=FieldDef.name then break; if field^.name=FieldDef.name then break;
Inc(Row); Inc(Row);
end; end;
CT := MySQLWriteData(field^.ftype, field^.length, Row^, Buffer); Result := MySQLWriteData(field^.ftype, field^.length, Row^, Buffer);
result := true;
end; end;
function InternalStrToFloat(S: string): Extended; function InternalStrToFloat(S: string): Extended;
@ -542,7 +541,7 @@ begin
Result := Result + EncodeTime(EH, EN, ES, 0);; Result := Result + EncodeTime(EH, EN, ES, 0);;
end; end;
function TConnectionName.MySQLWriteData(AType: enum_field_types;ASize: Integer; Source, Dest: PChar): Integer; function TConnectionName.MySQLWriteData(AType: enum_field_types;ASize: Integer; Source, Dest: PChar): Boolean;
var var
VI: Integer; VI: Integer;
@ -551,73 +550,65 @@ var
Src : String; Src : String;
begin begin
Result := 0; Result := False;
If (Source<>Nil) Then if Source = Nil then
Src:=StrPas(Source) exit;
else Src:=StrPas(Source);
Src:='';
case AType of case AType of
FIELD_TYPE_TINY, FIELD_TYPE_SHORT, FIELD_TYPE_LONG, FIELD_TYPE_LONGLONG, FIELD_TYPE_TINY, FIELD_TYPE_SHORT, FIELD_TYPE_LONG, FIELD_TYPE_LONGLONG,
FIELD_TYPE_INT24: FIELD_TYPE_INT24:
begin begin
Result:=SizeOf(Integer);
if (Src<>'') then if (Src<>'') then
VI := StrToInt(Src) VI := StrToInt(Src)
else else
VI := 0; VI := 0;
Move(VI, Dest^, Result); Move(VI, Dest^, SizeOf(Integer));
end; end;
{$ifdef mysql50} {$ifdef mysql50}
FIELD_TYPE_NEWDECIMAL, FIELD_TYPE_NEWDECIMAL,
{$endif} {$endif}
FIELD_TYPE_DECIMAL, FIELD_TYPE_FLOAT, FIELD_TYPE_DOUBLE: FIELD_TYPE_DECIMAL, FIELD_TYPE_FLOAT, FIELD_TYPE_DOUBLE:
begin begin
Result := SizeOf(Double);
if Src <> '' then if Src <> '' then
VF := InternalStrToFloat(Src) VF := InternalStrToFloat(Src)
else else
VF := 0; VF := 0;
Move(VF, Dest^, Result); Move(VF, Dest^, SizeOf(Double));
end; end;
FIELD_TYPE_TIMESTAMP: FIELD_TYPE_TIMESTAMP:
begin begin
Result := SizeOf(TDateTime);
if Src <> '' then if Src <> '' then
VD := InternalStrToTimeStamp(Src) VD := InternalStrToTimeStamp(Src)
else else
VD := 0; VD := 0;
Move(VD, Dest^, Result); Move(VD, Dest^, SizeOf(TDateTime));
end; end;
FIELD_TYPE_DATETIME: FIELD_TYPE_DATETIME:
begin begin
Result := SizeOf(TDateTime);
if Src <> '' then if Src <> '' then
VD := InternalStrToDateTime(Src) VD := InternalStrToDateTime(Src)
else else
VD := 0; VD := 0;
Move(VD, Dest^, Result); Move(VD, Dest^, SizeOf(TDateTime));
end; end;
FIELD_TYPE_DATE: FIELD_TYPE_DATE:
begin begin
Result := SizeOf(TDateTime);
if Src <> '' then if Src <> '' then
VD := InternalStrToDate(Src) VD := InternalStrToDate(Src)
else else
VD := 0; VD := 0;
Move(VD, Dest^, Result); Move(VD, Dest^, SizeOf(TDateTime));
end; end;
FIELD_TYPE_TIME: FIELD_TYPE_TIME:
begin begin
Result := SizeOf(TDateTime);
if Src <> '' then if Src <> '' then
VD := InternalStrToTime(Src) VD := InternalStrToTime(Src)
else else
VD := 0; VD := 0;
Move(VD, Dest^, Result); Move(VD, Dest^, SizeOf(TDateTime));
end; end;
FIELD_TYPE_VAR_STRING, FIELD_TYPE_STRING, FIELD_TYPE_ENUM, FIELD_TYPE_SET: FIELD_TYPE_VAR_STRING, FIELD_TYPE_STRING, FIELD_TYPE_ENUM, FIELD_TYPE_SET:
begin begin
Result := ASize;
{ Write('Moving string of size ',asize,' : '); { Write('Moving string of size ',asize,' : ');
P:=Source; P:=Source;
If (P<>nil) then If (P<>nil) then
@ -628,11 +619,12 @@ begin
end; end;
Writeln; Writeln;
} if Src<> '' then } if Src<> '' then
Move(Source^, Dest^, Result) Move(Source^, Dest^, ASize)
else else
Dest^ := #0; Dest^ := #0;
end; end;
end; end;
Result := True;
end; end;
procedure TConnectionName.UpdateIndexDefs(var IndexDefs : TIndexDefs;TableName : string); procedure TConnectionName.UpdateIndexDefs(var IndexDefs : TIndexDefs;TableName : string);