请教一下大家,我用dbgridhe做下拉选项,要怎么设置了,以后是我的代码,
procedure Truform.FormShow(Sender: TObject);
begin
    adotable1.TableName:='入库单';
    adotable1.Open;  
    dbgrideh1.columns[1].alwaysShoweditbutton:=true;
    dbgrideh1.columns[1].buttonstyle:=cbsDropDown;
 
 with form1.ADOQuery do
    begin
      close;
      sql.Clear;
      sql.Add('select 下拉名称 from 下拉选项 where 组序号=101');
      open;
    end;    while not form1.ADOQuery.Eof do
    begin
      dbgrideh1.Columns[1].PickList.add(form1.ADOQuery.Fieldbyname('下拉名称').AsString);
      form1.ADOQuery.Next;
    end;运行后出现:
Project cbcd.exe raised exception class EOleException with message '标准表达式中数据类型不匹配。'. Process stopped. Use Step or Run to continue.
这里为什么???????????????如果我的代码这样写,反而又可以。
dbgrideh1.Columns[1].PickList.add('选项一');
dbgrideh1.Columns[1].PickList.add('选项二');
dbgrideh1.Columns[1].PickList.add('选项三');
请大家指教一下,谢谢

解决方案 »

  1.   

    数据库中的字段最好用E文的,或者在DELPHI中的ADOQuery中设置为E文的,如下:
    select '选项一' as xx001 form 表名001  as tab001
    where 条件 
      

  2.   

       with form1.ADOQuery do
        begin
          close;
          sql.Clear;
          sql.Add('select 下拉名称 as xlmc from 下拉选项 where 组序号=101');
          open;
        end;    while not form1.ADOQuery.Eof do
        begin
          dbgrideh1.Columns[1].PickList.add(form1.ADOQuery.Fieldbyname('xlmc').AsString);
          form1.ADOQuery.Next;
        end;楼上大哥,借误以旧
      

  3.   

    原来columns[1]绑定的数据类型是什么?数据库asstring的话,add(trim(adoqxxxx.fieldbyname('xxx').asstring)),一定要加trim.
    原因,‘下拉选项’的数据字段为char(100),asstring就会补满100个字符,而‘入库单’的对应字段只为char(10)就会有数据类型不匹配的问题了。
      

  4.   

    我用的access数据库:
    --------------------------------------------
    下拉选项表:
    组序号      文本     10
    下拉序号    数字    
    下拉名称    文本     50
    备注        文本     20
    --------------------------------------------
    单据表:
    id   自动编号
    单据号     文本         10
    日期       时间/日期
    送货单位   文本         50
    名称       文本         100
    数量       数字
    单价       数字
    备注       备注
    这是我的表结构有一点我就不懂了,为什么我从数据库里取出来的值是提示类型不匹配,而我写常量进去就行,我的常量也没有一定之规呀
      

  5.   


    -----------------------------------------------------------
        while not form1.ADOQuery.Eof do
        begin
          dbgrideh1.Columns[1].PickList.add(trim(form1.ADOQuery.Fieldbyname('xlmc').AsString));
          form1.ADOQuery.Next;
        end;
    我改了,错误还是这样
      

  6.   

    sql.Add('select 下拉名称 as xlmc from 下拉选项 where 组序号=101');
    组序号=''101'',组序号是文本型的,查询语句要这样写。
    你的下拉名称,对应的是送货单位还是啥?是否允许空值?
      

  7.   

    还是先 showmessage 一下你add的字符串吧。我总觉得你是字符串上有问题。
    在add前,picklist.clear也没写,不知道你是没贴呢,还是真没写。贴一段我自己程序里的代码
      with kmqry do
      begin
        close;
        sql.Clear;
        SQL.Add('select rtrim(kmdm)+''|''+rtrim(kmmc) as km from kjkmb ');
        open;
        first;
        DBGridEh1.FieldColumns['nr'].PickList.Clear;
        DBGridEh1.FieldColumns['nr'].DropDownRows := RecordCount;
        while not eof do
        begin
          DBGridEh1.FieldColumns['nr'].PickList.Add(Trim(kmqry.fieldbyname('km').AsString));
          Next;
        end;
      end;