是否可以使用Zeoslib和Firebird在参数化查询中确定参数数据类型?
我正在从FibPlus迁移到Zeoslib.
有一个类似’选择姓名,姓氏,年龄从会员注册> :既然和国籍=:国家’
使用FibPlus我这样做:
for i := 0 to Q1.Params.Count - 1 do
begin
t := Q1.Params[i].ServerSQLType;
case t of
SQL_TYPE_DATE, SQL_TYPE_DATE + 1:
begin
with TsDateEdit.Create(self) do
begin
Left := lblleft + MaxWidth + 10;
Top := lbltop + (25 * i) - (height - LabelHeight);
Parent := f;
Tag := i + 1;
TabOrder := i;
end;
end;
sql_short, sql_long, sql_int64, sql_short + 1, sql_long + 1, sql_int64 + 1:
begin
with TsSpinEdit.Create(self) do
begin
Left := lblleft + MaxWidth + 10;
Top := lbltop + (25 * i) - (height - LabelHeight);
Parent := f;
Tag := i + 1;
TabOrder := i;
end;
end;
....
使用Zeoslib我试过这个:
for i := 0 to Q1.Params.Count - 1 do
begin
if Q1.Params[i].DataType = ftDate then
begin
with TsDateEdit.Create(self) do
begin
Left := lblleft + MaxWidth + 10;
Top := lbltop + (25 * i) - (height - LabelHeight);
Parent := f;
Tag := i + 1;
TabOrder := i;
end;
end;
if Q1.Params[i].DataType in [ftInteger, ftShortInt, ftLargeInt, ftLongWord] then
begin
with TsSpinEdit.Create(self) do
begin
Left := lblleft + MaxWidth + 10;
Top := lbltop + (25 * i) - (height - LabelHeight);
Parent := f;
Tag := i + 1;
TabOrder := i;
end;
end;
....
但Q1.Params [i] .DataType总是ftUnkown.
最佳答案 你不能用婴儿车做到这一点,因为他们现在还没有设置.我建议你使用TZSQLMetadata;
ZSQLMetadata1 := TZSQLMetadata.Create(Self);
try
ZSQLMetadata1.Connection := ZConnection1; //Your connection to db
ZSQLMetadata1.MetadataType := mdColumns; //What kind of meta data get you want column types so we get columns metadata
ZSQLMetadata1.TableName := 'MYTABLE'; //from which table metadata to get
ZSQLMetadata1.Open;
//After open ZSQLMetadata1 rows contains information about table columns
while not ZSQLMetadata1.Eof do
begin
if ZSQLMetadata1.FieldByName('TYPE_NAME').AsString = 'char' then
begin
//Do something
end;
{ if you do not like working with strings
if ZSQLMetadata1.FieldByName('DATA_NAME').AsInteger = 9 then
begin
//Do something
end;
}
ZSQLMetadata1.Next;
end;
finally
ZSQLMetadata1.Free;
end;
ZSQLMetadata1的工作方式类似于数据集,您可以将其分配给数据源,并查看dbgrid中的所有列和值
/编辑/
列名和字段值是DB特定的,我的示例是在MySQL数据库上