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;
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;
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;
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;
顺便请教一下:
以前也用memo做过类似的处理,但是当memo的数据换行时,结果似乎就不正确了(当然,此处FieldName不会多长,如果不是特意为止是不会换行的),因为Memo的Lines的count计算的是在Memo中显示的字符串的行数(不知道是不是我那里的特例),而不是记录的条数。
不是你这里是不是通过Lines的数量来获取字段的个数?
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.
不知道我说明白了没有
竟然你用了换行,你再换回来就行啦,对于视觉完全没有影响 memo1.WordWrap:= false;
text:= inttostr(memo1.Lines.Count);
memo1.WordWrap:= true;