sql='select id,username,userpass from mytable';想想用程序动态地数出里面字段名来,该如何实现?
(这个例子中应该出来3)

解决方案 »

  1.   

    var
      StrLst: TStrings;
    begin
      S := 'select id,username,userpass from mytable';
      StrLst := TStringList.Create;
      StrLst.Delimiter := ',';
      StrLst.DelimitedText := Copy(S, 8, Length(S) - 20);
      ShowMessage(StrLst[0] + ' ' + StrLst[1] + ' ' +StrLst[2]);//id username userpass
      ShowMessage(IntToStr(StrLst.Count)); //3
    end;
      

  2.   

    adoquery1.close;
    adoquery1.sql.text:= 'select id,username,userpass from mytable where 1<>1';  // 1<>1
    adoquery1.open;
    for i:=0 to adoquery1.fieldcount -1 do 
      memo1.lines.add(adoquery1.fields[i].fieldname);
    adoquery1.close;
      

  3.   


    顺便请教一下:
    以前也用memo做过类似的处理,但是当memo的数据换行时,结果似乎就不正确了(当然,此处FieldName不会多长,如果不是特意为止是不会换行的),因为Memo的Lines的count计算的是在Memo中显示的字符串的行数(不知道是不是我那里的特例),而不是记录的条数。
    不是你这里是不是通过Lines的数量来获取字段的个数?
      

  4.   

    比如Memo中内容如下:
    sasas
    fdf3dfsdf
    3f3f4
    fds46e
    s33fffdf3
    这里有五行数据。这里Memo.Lines.Count等于多少?应该是5吧
    现在因为Memo的宽度调整了,里面的内容自动换行,结果如下(当然是假设上面的示例中字符足够多不得不换行或有特殊要求而不得不换行):
    sasas
    fdf3d
    fsdf
    3f3f4
    fds46
    e
    s33ff
    fdf3
    还是前面的数据,现在Memo.Lines.Count就变成了8了。就是之前我有个地方要读取一些数据,每一行都比较长,也是用Memo来显示数据,但同时又要获取数据记录的条数,因为Memo的Lines.Count在换行时会跟着变,只好用StringList来获取记录条数。
    不知道如果直接用Memo有没有其他属性来获取数据记录的条数呢?就如上面的示例中,我想要的结果应该是5.
    不知道我说明白了没有
      

  5.   

    不好意思,刚看电影了...不用StringList那么麻烦吖...
    竟然你用了换行,你再换回来就行啦,对于视觉完全没有影响  memo1.WordWrap:= false;
      text:= inttostr(memo1.Lines.Count);
      memo1.WordWrap:= true;