一个adoquery1与dbgrid相连
adoquery1中有一字段type(单据类型)
其中type的值只有'1','2','3','4'四种,
问题:
1,在dbgrid中,type字段如果为'1',我想显示成'入库单'
                   '2',我想显示成'出库单'
                   '3',我想显示成'销售单'
                   '4',我想显示成'销退单'2,用ado+access,是否这种case语句对access不行?

解决方案 »

  1.   

    在DRAWDATA中画了,呵呵,这个嘛,不用那样,或都写个存储过程也行
      

  2.   

    select case type 
            when '1' then '入库单'
            when '2' then  '出库单'
               .
               .
            end as 单据类型
    from orderaccess好象没有,试试不就知道了。
      

  3.   

    access没试过,要是不行,直接在客户端显示的时候处理也行啊。在adoquery1中建这个type字段,然后再字段的onGetText事件中写也行。
    begin
      if adoquery1.fieldbyname('type').asstring='1' then Text:='入库单'
      else if adoquery1.fieldbyname('type').asstring='2' then Text:='出库单'
      else if adoquery1.fieldbyname('type').asstring='3' then Text:='销售单'
      else if adoquery1.fieldbyname('type').asstring='4' then Text:='销退单'
      else 
      end;
    end;
      

  4.   

    我问了,而且试了,access不支持case ..end!
    怎么办呢?
    我这个adoquery1是动态的sql
    adoqquery1中我找不到ongettext事件
    也找不到:displayformat属性
    呀!
      

  5.   

    可以通过在ACCESS数据库里添加一个数据表,该表格用来存放相应的操作类别!再通过两个表格关联就行了!
      

  6.   

    select case type 
            when '1' then '入库单'
            when '2' then  '出库单'
               .
               .
            end as 单据类型
    from order
    ---这样写ACCESS是肯定不行的
    你只有在程序中试一试了:with adoquery1 do
    begin
      close;
      sql.clear;
      sql.add('select type,... from order');
      open;
      fieldByName('type').displayLable := '单据类型'
      itypesel := fieldbyname('type').asinteger;
      case iTypeSel of
         1: fieldByName('type').AsString := '入库单';
         2:...
      end;
    end;为了不使提交的数据保存到数据库,你还得把adoquery1的LockType设置为:ltBatchOptimistic或是ltReadOnly
      

  7.   

    我上面的办法只是一时之计,到时候可能还是解决不了问题的
    我想关键的是你的数据库结构可能会有问题
    如:你可以设置一个单据类型的表:BillType
    有两个字段:
    Type   单据类型编码
    TypeDesc 单据类型说明
    然后呢,你就可以在ORDER的TYPE中存储BILLTYPE中的Type字段了
    如果需要显示呢,则显示CODEDESC的字段:
    select O.*,B.TypeDesc from Order O,BillType B
      where B.Type = O.Type
      

  8.   

    procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    beginend;
    在上面这样的代码里,加上判断语句,如果当前行的某个字段值为什么,就绘出其它的东东,或者你用STRINGGRID来做:
    adotemp.Open;
      //写入listview中
      LVfee.items.Clear;
      while not adofee.Eof do
      begin
        Listitem:=LVFee.Items.Add ;
        listitem.ImageIndex:=-1;
        //Listitem.SubItems.Add(adofee.fieldbyname('isFinish').AsString );
        Listitem.SubItems.Add(adofee.fieldbyname('RoomNo').AsString);
        Listitem.SubItems.Add(adofee.fieldbyname('Feemonth').AsString);
        Listitem.SubItems.Add(adofee.fieldbyname('Feeyear').AsString);
        Listitem.SubItems.Add(adofee.fieldbyname('OwnerName').AsString);
        Listitem.SubItems.Add(adofee.fieldbyname('FeeName').AsString);
        Listitem.SubItems.Add(adofee.fieldbyname('Feemoney').AsString);    Listitem.SubItems.Add(adofee.fieldbyname('FlowNo').AsString);
        
        adofee.Next ;
      end;  if not adotemp.IsEmpty then
      begin
        FeeMoney.Text :=adotemp.Fieldbyname('FeeMoney').asstring;
        //PayMoney.Text :=adotemp.Fieldbyname('FeeMoney').asstring;
      end
      else
      begin
        FeeMoney.Text :='0';
        PayMoney.Text :='0';
      end;
    上边这样绘上去
      

  9.   

    是LISTVIEW不是STRINGGRID,我的代码是
      

  10.   

    access不支持case语句
    case只能用在Microsoft SQL.
    不能用于access
    在dbgrid中动态显示吧.过一下, 我去写代码给你贴上
      

  11.   

    procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
      Field: TField; State: TGridDrawState);
    const
      Show: Array[1..4] of String = ('入库单', '出库单', '销售单', '销退单');
    var
      St: String;
      x, y: Integer;
    begin
      if Field <> Self.Query1.FieldByName('Type') then
      begin
         Self.DBGrid1.DefaultDrawDataCell(Rect, Field, State);
         Exit;
      end;
      St := Show[Field.AsInteger];
      x := 3;
      y := 3;
      Self.DBGrid1.Canvas.FillRect(Rect);
      Self.DBGrid1.Canvas.TextRect(Rect, Rect.Left + x, Rect.Top + y, St);
    end;同时, 把 DBGrid1 控件的  DefaultDrawing
    属性改为  FALSE
      

  12.   

    上例中, 把 Query1 改成你要的  ADOQuery 就可以了
      

  13.   

    龙行天下兄的方法应该是可行的。
    另外,ADOQuery动态的添加SQL语句是这样的:
    ADOQuery1.Close;
    ADOQuery1.SQL.Clear;
    ADOQuery1.SQL.Add('select * from Table');
    ADOQuery1.Open;
    字段的DisplayFormat是这样的:
    TFloatField(ADOQuery1.FieldByName('TableField')).DisplayFormat := '###,###.00';
    你再试试看吧。祝你成功。
      

  14.   

    呵呵,再说一句,我上面说的方法是指在AdoQuery 中先建固定字段,在固定字段的onGetText事件写上面的代码。
    若不愿意用那种方法,建一个计算字段也行啊。 如建计算字段:DescType. 在AdoQuery的onCalcFields事件中写代码:
    begin
      if adoquery1.fieldbyname('type').asstring='1' then 
        adoquery1.fieldbyname('type').asstring='入库单'
      else if adoquery1.fieldbyname('type').asstring='2' then 
        adoquery1.fieldbyname('type').asstring='出库单'
      else if adoquery1.fieldbyname('type').asstring='3' then 
        adoquery1.fieldbyname('type').asstring=:='销售单'
      else if adoquery1.fieldbyname('type').asstring='4' then 
        adoquery1.fieldbyname('type').asstring='销退单'
      else 
      end;
    end;
    然后显示DescType字段的内容
      

  15.   

    误写纠正:
    if adoquery1.fieldbyname('type').asstring='1' then 
        adoquery1.fieldbyname('DescType').asstring='入库单'