首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Zeoslib确定参数化查询中的参数数据类型

使用Zeoslib确定参数化查询中的参数数据类型
EN

Stack Overflow用户
提问于 2015-10-10 10:48:06
回答 1查看 1.3K关注 0票数 4

是否可以使用Zeoslib和Firebird在参数化查询中确定参数数据类型?

我正在从FibPlus迁移到Zeoslib。

带有“选择姓名、姓氏、注册成员的年龄”、“自名称和国籍=:国家”之类的字句

在FibPlus中,我这样做:

代码语言:javascript
复制
  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,我已经尝试过这样的方法:

代码语言:javascript
复制
  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.Paramsi.DataType永远是ftUnkown。

EN

回答 1

Stack Overflow用户

发布于 2015-10-10 13:14:00

你不能用婴儿车来做这件事,因为它们现在还没有设定好。我建议你使用TZSQLMetadata;

代码语言:javascript
复制
  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类似于dataset,您可以将它分配给数据源,并查看dbgrid中的所有列和值。

/编辑/列名和字段值是DB的具体内容--我的示例在MySQL数据库中

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33053123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档