楼上的,我的表结构是 create table ts_info( area_code varchar(7) null, acct_id number(8) not null, acct_seq_nbr number(3) not null, acc_nbr varchar(16) null, name varchar(50) null, billing_cycle_id number(6) not null, charge number(10) not null, capi_charge varchar(100) null, bank_acct varchar(30) not null, bank_name varchar(60) not null, ts_time date not null, state char(3) null, primary key (acct_id,acct_seq_nbr,billing_cycle_id));字符不够拿空格找齐,写个代码明视一下吧,
const start:array[0..7] of integer=(0,10,20,30,40,50,60,70); var m,n,i:integer; oneline:array[0..100]of char; tempstr:string; begin m:=0; FillChar(oneline,sizeof(oneline),ord(' ')) ; for i:=0 to 6 do begin tempstr:=table1.fields[i].asstring ; for n:=0 to length(tempstr)-1 do begin oneline[start[m]+n]:=tempstr[n+1]; end; inc(m); end; //showmessage(oneline); memo1.Lines.Add(oneline); 这样是否可以?
xx(常数)-Length(yy(要显示的数据))
Begin
if savedialog1.execute then
assignfile(DealedFile,savedialog1.filename);
rewrite(DealedFile);
Query1.Close();
Query1.SQL.Clear();
Query1.SQL.Add('select * from commit_form'); //Query1.
Query1.Open();
While not Query1.eof do
begin //OneLine := Query1.Fields[0].AsString;
OneLine := Query1.Fields[0].AsString +' '+ Query1.Fields[1].AsString +' '+ Query1.Fields[2].AsString+' '
+Query1.Fields[3].AsString +' '+ Query1.Fields[4].AsString +' '+ Query1.Fields[5].AsString+' '+Query1.Fields[2].AsString;
writeln(DealedFile,OneLine); Query1.Next();
end;
CloseFile(DealedFile);
End;
+Query1.Fields[3].AsString +' '+ Query1.Fields[4].AsString +' '+ Query1.Fields[5].AsString+' '+Query1.Fields[2].AsString;中间所有的' '改成动态的
可以写一个函数,参数为Query1.Fields[i].AsString,
返回值为x个空格,x:=8-Length(Query1.Fields[i].AsString);
不明白我写代码给你。
不过如果你要显示的数据多于8个字符你准比怎么显示?空一格?还是怎么样?
create table ts_info(
area_code varchar(7) null,
acct_id number(8) not null,
acct_seq_nbr number(3) not null,
acc_nbr varchar(16) null,
name varchar(50) null,
billing_cycle_id number(6) not null,
charge number(10) not null,
capi_charge varchar(100) null,
bank_acct varchar(30) not null,
bank_name varchar(60) not null,
ts_time date not null,
state char(3) null, primary key (acct_id,acct_seq_nbr,billing_cycle_id));字符不够拿空格找齐,写个代码明视一下吧,
这么说吧,你希望所有的列靠左对齐是吧?那么每一列的宽度就等于“数据长度+x空格”
现在只要保证每一行中的各个列宽度一致就行了,
我推荐一个方法,先查出各列数据的最大长度,然后+5,作为该列的宽度,
然后每个空格数就等于这个宽度-数据长度,明白吧?
比较麻烦,但是好像没有更好的方法了。
算出每列的宽度,存到一个数组中,
然后用一个双重循环显示,
逻辑上不难的,你仔细想想。
start:array[0..7] of integer=(0,10,20,30,40,50,60,70);
var
m,n,i:integer;
oneline:array[0..100]of char;
tempstr:string;
begin
m:=0;
FillChar(oneline,sizeof(oneline),ord(' ')) ;
for i:=0 to 6 do
begin
tempstr:=table1.fields[i].asstring ;
for n:=0 to length(tempstr)-1 do
begin
oneline[start[m]+n]:=tempstr[n+1];
end;
inc(m);
end;
//showmessage(oneline);
memo1.Lines.Add(oneline);
这样是否可以?