procedure TForm1.FormShow(Sender: TObject);
begin
  adoquery1.Close ;
  adoquery1.SQL.Clear ;
  adoquery1.SQL.Text :='select [id],proid,fid,banci,BigClassID,SmallClassID,cast(fxbm as varchar(500)) '
                      +'from info where cast(fxbm as varchar(500))<>cast(hsbm as varchar(500)) '
                      +'and cast(hsbm as varchar(500)) is not null order by proid,fid ';
  adoquery1.Open ;
end;
大家帮我看看这段代码错在哪里。是这样的,delphi连接access数据库的info表,表里的hsbm是备注字段类型的,如果select hsbm from info的结果是(memo),没有任何数据,但实际上是有数据的,现在我要进行比较,所以我要强制转换成varchar类型,但是出错了,大家帮我改一下。

解决方案 »

  1.   

    你首先要确定备注型字段是否可以转换成字串,在SQL中不是任何类型都可以相互转换的。
      

  2.   

    access里没有cast函数.你是用dbgrid显示数据的? 如果是, 解决办法如下:
    ----------------------------------
    1, 改用其他第三方数据表控件
    2, 在query中绑定自定义过程{
    TForm13是窗体类名
    qry1是query名称
    }
    procedure TForm13.DemoGetText(Sender: TField; var Text: String;
      DisplayText: Boolean);
    begin
      Text := Sender.AsString;
    end;procedure TForm13.qry1AfterOpen(DataSet: TDataSet);
    begin
      DataSet.FieldByName('col1').OnGetText := DemoGetText;
    end;3, 给query提前加好列, 然后在备注字段的OnGetText事件中写  Text := Sender.AsString;
      

  3.   


    我一般都是定义其为varchar()类型,长度要估算。
    不知这样合适否
      

  4.   

      adoquery1.SQL.Text :='select proid,fid,banci,BigClassID,SmallClassID, '
                          +'cstr(fxbm)  as fxbm1,fxrq,cstr(hsbm) as hsbm1,hsrq  '
                          +'from info where fxbm<>hsbm and hsbm is not null order by proid,fid' ;这是答案!