* fix for using ftString-type parameters on datefields + test

git-svn-id: trunk@8553 -
This commit is contained in:
joost 2007-09-18 17:32:07 +00:00
parent d5fa108796
commit 5ae57ea554
2 changed files with 26 additions and 15 deletions

View File

@ -737,13 +737,20 @@ begin
begin begin
if assigned(in_sqlda^.SQLvar[SQLVarNr].SQLInd) then in_sqlda^.SQLvar[SQLVarNr].SQLInd^ := 0; if assigned(in_sqlda^.SQLvar[SQLVarNr].SQLInd) then in_sqlda^.SQLvar[SQLVarNr].SQLInd^ := 0;
case AParams[ParNr].DataType of case (in_sqlda^.SQLvar[SQLVarNr].sqltype and not 1) of
ftInteger : SQL_LONG :
begin begin
i := AParams[ParNr].AsInteger; i := AParams[ParNr].AsInteger;
Move(i, in_sqlda^.SQLvar[SQLVarNr].SQLData^, in_SQLDA^.SQLVar[SQLVarNr].SQLLen); Move(i, in_sqlda^.SQLvar[SQLVarNr].SQLData^, in_SQLDA^.SQLVar[SQLVarNr].SQLLen);
end; end;
ftString,ftFixedChar : if ((in_sqlda^.SQLvar[SQLVarNr].SQLType and not 1) = SQL_BLOB) then SetBlobParam else SQL_SHORT :
begin
i := AParams[ParNr].AsSmallInt;
Move(i, in_sqlda^.SQLvar[SQLVarNr].SQLData^, in_SQLDA^.SQLVar[SQLVarNr].SQLLen);
end;
SQL_BLOB :
SetBlobParam;
SQL_VARYING, SQL_TEXT :
begin begin
s := AParams[ParNr].AsString; s := AParams[ParNr].AsString;
w := length(s); // a word is enough, since the max-length of a string in interbase is 32k w := length(s); // a word is enough, since the max-length of a string in interbase is 32k
@ -757,22 +764,17 @@ begin
end end
else else
CurrBuff := in_sqlda^.SQLvar[SQLVarNr].SQLData; CurrBuff := in_sqlda^.SQLvar[SQLVarNr].SQLData;
Move(s[1], CurrBuff^, w); Move(s[1], CurrBuff^, w);
end; end;
ftDate, ftTime, ftDateTime: SQL_TYPE_DATE, SQL_TYPE_TIME, SQL_TIMESTAMP :
SetDateTime(in_sqlda^.SQLvar[SQLVarNr].SQLData, AParams[ParNr].AsDateTime, in_SQLDA^.SQLVar[SQLVarNr].SQLType); SetDateTime(in_sqlda^.SQLvar[SQLVarNr].SQLData, AParams[ParNr].AsDateTime, in_SQLDA^.SQLVar[SQLVarNr].SQLType);
ftLargeInt: SQL_INT64:
begin begin
li := AParams[ParNr].AsLargeInt; li := AParams[ParNr].AsLargeInt;
Move(li, in_sqlda^.SQLvar[SQLVarNr].SQLData^, in_SQLDA^.SQLVar[SQLVarNr].SQLLen); Move(li, in_sqlda^.SQLvar[SQLVarNr].SQLData^, in_SQLDA^.SQLVar[SQLVarNr].SQLLen);
end; end;
ftFloat: SQL_DOUBLE, SQL_FLOAT:
SetFloat(in_sqlda^.SQLvar[SQLVarNr].SQLData, AParams[ParNr].AsFloat, in_SQLDA^.SQLVar[SQLVarNr].SQLLen); SetFloat(in_sqlda^.SQLvar[SQLVarNr].SQLData, AParams[ParNr].AsFloat, in_SQLDA^.SQLVar[SQLVarNr].SQLLen);
ftBlob, ftMemo:
begin
SetBlobParam;
end;
else else
DatabaseErrorFmt(SUnsupportedParameter,[Fieldtypenames[AParams[ParNr].DataType]],self); DatabaseErrorFmt(SUnsupportedParameter,[Fieldtypenames[AParams[ParNr].DataType]],self);
end {case} end {case}

View File

@ -20,12 +20,13 @@ type
private private
procedure CreateTableWithFieldType(ADatatype : TFieldType; ASQLTypeDecl : string); procedure CreateTableWithFieldType(ADatatype : TFieldType; ASQLTypeDecl : string);
procedure TestFieldDeclaration(ADatatype: TFieldType; ADataSize: integer); procedure TestFieldDeclaration(ADatatype: TFieldType; ADataSize: integer);
procedure TestXXParamQuery(ADatatype : TFieldType; ASQLTypeDecl : string; testValuescount : integer); procedure TestXXParamQuery(ADatatype : TFieldType; ASQLTypeDecl : string; testValuescount : integer; Cross : boolean = false);
protected protected
procedure SetUp; override; procedure SetUp; override;
procedure TearDown; override; procedure TearDown; override;
procedure RunTest; override; procedure RunTest; override;
published published
procedure TestCrossStringDateParam;
procedure TestGetFieldNames; procedure TestGetFieldNames;
procedure TestUpdateIndexDefs; procedure TestUpdateIndexDefs;
procedure TestSetBlobAsMemoParam; procedure TestSetBlobAsMemoParam;
@ -729,7 +730,7 @@ begin
end; end;
procedure TTestFieldTypes.TestXXParamQuery(ADatatype : TFieldType; ASQLTypeDecl : string; testValuescount : integer); procedure TTestFieldTypes.TestXXParamQuery(ADatatype : TFieldType; ASQLTypeDecl : string; testValuescount : integer; Cross : boolean = false);
var i : integer; var i : integer;
@ -753,13 +754,16 @@ begin
ftInteger: Params.ParamByName('field1').asinteger := testIntValues[i]; ftInteger: Params.ParamByName('field1').asinteger := testIntValues[i];
ftFloat : Params.ParamByName('field1').AsFloat := testFloatValues[i]; ftFloat : Params.ParamByName('field1').AsFloat := testFloatValues[i];
ftString : Params.ParamByName('field1').AsString := testStringValues[i]; ftString : Params.ParamByName('field1').AsString := testStringValues[i];
ftDate : Params.ParamByName('field1').AsDateTime:= StrToDate(testDateValues[i]); ftDate : if cross then
Params.ParamByName('field1').AsString:= testDateValues[i]
else
Params.ParamByName('field1').AsDateTime:= StrToDate(testDateValues[i]);
else else
AssertTrue('no test for paramtype available',False); AssertTrue('no test for paramtype available',False);
end; end;
ExecSQL; ExecSQL;
end; end;
TSQLDBConnector(DBConnector).Transaction.CommitRetaining; TSQLDBConnector(DBConnector).Transaction.CommitRetaining;
sql.clear; sql.clear;
sql.append('select * from FPDEV2 order by ID'); sql.append('select * from FPDEV2 order by ID');
@ -864,6 +868,11 @@ begin
inherited RunTest; inherited RunTest;
end; end;
procedure TTestFieldTypes.TestCrossStringDateParam;
begin
TestXXParamQuery(ftDate,'DATE',testDateValuesCount,True);
end;
procedure TTestFieldTypes.TestGetFieldNames; procedure TTestFieldTypes.TestGetFieldNames;
var FieldNames : TStringList; var FieldNames : TStringList;
begin begin