刚学delphi,现要编一综合查询,我用的模式是:字段(表中所有字段)+操作符(=<>等)+值(用户输入),用条件累加的方法达到目的!现在问题是,我用什么控件来显示表中所有字段的名称好让用户选择,而且麻烦的是,在表中我的字段名是英文的,但在用户选择的控件需是中文的,如表中字段名为"XM",那控件中的就是"姓名".是不是还要编写代码?能帮帮我么?

解决方案 »

  1.   

    ComboBox, ListBox都可以, 使用ComboBox,ListBox的Items.AddObject()方法.
    你在CSDN全文檢索下就知道啦.
    http://61.186.252.131/advsch.asp
      

  2.   

    先在COMBOBOX中写上中文字段名,然后根据选择再把他变为对应的英文字段,或者数据库直接中文字段名好了,COMBOBOX.TEXT拿来用就好了
      

  3.   

    1.create一个stringlist对象,并用add方法添加你所要显示的所有字段,格式是fieldname=中文名称
    2.赋值好一条查询语句,包括你要查询的字段,可以少于上面stringlist的字段,但多的话,多的项将不 会是中文
    3.对dbgrid进行类似以下语句的操作
    for i:=0 to dbgrid1.Columns.Count-1 do
    begin
    dbgrid1.Columns.Items[i].Title.caption:=tabFieldList.Values[dbgrid1.Columns.Items[i].FieldName];
    end;
    在dbgrid中字段出现的先后顺序将由sql语句里字段出现的先后顺序来决定.
      

  4.   

    可以做一个list链表,,保存中文字段名和英文字段的对应关系
    procedure TForm1.FormButton1Click(Sender: TObject);type
      PMyList = ^AList;
      AList = record
        I: Integer;
        C: Char;
      end;var  MyList: TList;
      ARecord: PMyList;
      B: Byte;
      Y: Word;
    begin
      MyList := TList.Create;
      try
        New(ARecord);
        ARecord^.I := 100;
        ARecord^.C := 'Z';
        MyList.Add(ARecord); {Add integer 100 and character Z to list}
        New(ARecord);
        ARecord^.I := 200;
        ARecord^.C := 'X';
        MyList.Add(ARecord); {Add integer 200 and character X to list}    { Now paint the items onto the paintbox}
        Y := 10;             {Variable used in TextOut function}    for B := 0 to (MyList.Count - 1) do
        begin
          ARecord := MyList.Items[B];
          Canvas.TextOut(10, Y, IntToStr(ARecord^.I)); {Display I}
          Y := Y + 30;  {Increment Y Value again}
          Canvas.TextOut(10, Y, ARecord^.C);  {Display C}
          Y := Y + 30;  {Increment Y Value}
        end;
      

  5.   

    顺便给你个demo的代码
    private
      list:TStringList;  { Private declarations }procedure TForm1.FormCreate(Sender: TObject);
    var
    sql:string;
    i:integer;
    begin
    list:=TStringList.Create;
    list.Add('fdmc=编号');
    list.Add('fdname=名称');
    Adoquery1.Close;
    adoquery1.SQL.Text:='select fdname,fdmc from fdxx';
    adoquery1.Open;
    for i:=0 to dbgrid1.Columns.Count-1 do
     begin
     dbgrid1.Columns.Items[i].Title.Caption:=list.Values[dbgrid1.Columns.Items[i].FieldName];
     end;
    end;
      

  6.   

    var 
     i:integer;begin
       table.first;
       for i:= 0 to Table.Recordcount - 1 do
         begin
             Combobox1.items.add(Table1.FieldName['i']);
         end ;
    end;