我的一个导出表里的数据为TXT,按一定格式,,其它的都对了,就是在判断身份证号字段时身份证是15位的后面就没有三个空格符来占位,如果身份证为15位的,则要再加三个空格符凑齐18位,因身份证最长是18位,有的身份证是15位的,也就是加一个判断语句,如果身份证号不满18位,用3个空格占位。就这意思吧,你添加的代码用红色表示出来哦,,测试运行立即给分,导出按钮代码如下
procedure TFormdrdf.BitBtn6Click(Sender: TObject);
var
tfile: TextFile;
i, j, c: Integer;
zh,kh,je: string;begin if adoquery1.recordcount=0 then
begin
MessageBox(GetActiveWindow(), '没有数据可导出,导出失败!', '提示', MB_OK + MB_ICONWARNING);
abort
end
elseqh.SQL.clear;
qh.Close;
qh.sql.add('select sum(金额) from cz ');
qh.Open; ShowMessage('本次代发合计人数:'+IntToStr(adoquery1.RecordCount) );
ShowMessage('本次代发合计金额:'+ qh.Fields[0].AsString );
CreateDirectory('d:\存折代发数据',nil);
assignfile(tfile,'d:\存折代发数据\czdata.txt');
rewrite(tfile); begin
ADOQuery1.first;adoquery1.SQL.clear;
adoquery1.Close;
adoquery1.SQL.Add('select * from cz');
adoquery1.open; for i:=1 to ADOQuery1.recordcount do
begin Write(tfile, Format('%.5d', [i]) + ADOQuery1.FieldByName('id').AsString);
//导出编号
Write(tfile, Format('%-16s', [ADOQuery1.FieldByName('姓名').AsString]));
//导出姓名 // 账号
zh := ADOQuery1.FieldByName('帐号').AsString;
if zh = '' then
Write(tfile, DupeString(' ', 20))
else
Write(tfile, zh); // 金额
je := ADOQuery1.FieldByName('金额').AsString;
j := Pos('.', je);
if j > 0 then
begin
c := Length(je) - j;
je := StringReplace(je, '.', '', [rfReplaceAll]);
if c = 1 then
je := je + '0'
else if c > 2 then
je := Copy(je, 1, Length(je) - (c-2)) + '.' + RightStr(je, (c-2));
end;
if (Pos('.', je) = 0) and (Length(inttostr(strtoint(je))) < 5) then
je := Format('%10s00', [je])
else
je := Format('%12s', [je]);
je := StringReplace(je, ' ', '0', [rfReplaceAll]); //用0占位空格
Write(tfile, je); // 身份证号
kh := ADOQuery1.FieldByName('身份证号').AsString;
if kh = '' then
Writeln(tfile, DupeString(' ', 18))
else
Writeln(tfile, kh); //导出身份证
ADOQuery1.Next;
end;
end;
closefile(tfile);
MessageBox(GetActiveWindow(), '存折数据处理完毕,已保存到D盘存折代发数据文件夹,文件名为:czdata.txt', '导出提醒', MB_OK +
MB_ICONWARNING);
end;希望各位大侠行行好。
procedure TFormdrdf.BitBtn6Click(Sender: TObject);
var
tfile: TextFile;
i, j, c: Integer;
zh,kh,je: string;begin if adoquery1.recordcount=0 then
begin
MessageBox(GetActiveWindow(), '没有数据可导出,导出失败!', '提示', MB_OK + MB_ICONWARNING);
abort
end
elseqh.SQL.clear;
qh.Close;
qh.sql.add('select sum(金额) from cz ');
qh.Open; ShowMessage('本次代发合计人数:'+IntToStr(adoquery1.RecordCount) );
ShowMessage('本次代发合计金额:'+ qh.Fields[0].AsString );
CreateDirectory('d:\存折代发数据',nil);
assignfile(tfile,'d:\存折代发数据\czdata.txt');
rewrite(tfile); begin
ADOQuery1.first;adoquery1.SQL.clear;
adoquery1.Close;
adoquery1.SQL.Add('select * from cz');
adoquery1.open; for i:=1 to ADOQuery1.recordcount do
begin Write(tfile, Format('%.5d', [i]) + ADOQuery1.FieldByName('id').AsString);
//导出编号
Write(tfile, Format('%-16s', [ADOQuery1.FieldByName('姓名').AsString]));
//导出姓名 // 账号
zh := ADOQuery1.FieldByName('帐号').AsString;
if zh = '' then
Write(tfile, DupeString(' ', 20))
else
Write(tfile, zh); // 金额
je := ADOQuery1.FieldByName('金额').AsString;
j := Pos('.', je);
if j > 0 then
begin
c := Length(je) - j;
je := StringReplace(je, '.', '', [rfReplaceAll]);
if c = 1 then
je := je + '0'
else if c > 2 then
je := Copy(je, 1, Length(je) - (c-2)) + '.' + RightStr(je, (c-2));
end;
if (Pos('.', je) = 0) and (Length(inttostr(strtoint(je))) < 5) then
je := Format('%10s00', [je])
else
je := Format('%12s', [je]);
je := StringReplace(je, ' ', '0', [rfReplaceAll]); //用0占位空格
Write(tfile, je); // 身份证号
kh := ADOQuery1.FieldByName('身份证号').AsString;
if kh = '' then
Writeln(tfile, DupeString(' ', 18))
else
Writeln(tfile, kh); //导出身份证
ADOQuery1.Next;
end;
end;
closefile(tfile);
MessageBox(GetActiveWindow(), '存折数据处理完毕,已保存到D盘存折代发数据文件夹,文件名为:czdata.txt', '导出提醒', MB_OK +
MB_ICONWARNING);
end;希望各位大侠行行好。
kh := ADOQuery1.FieldByName('身份证号').AsString;
j := Length(kh);
if j < 18 then
for i := 1 to 18 - j do
kh := kh + ' ';
if kh = '' then
Writeln(tfile, DupeString(' ', 18))
else
Writeln(tfile, kh); //导出身份证
将这个数据结构定义成“记录集”方式即可
再根据“记录集”方式获取相关变量信息即可
下面给你一个参考
TMyDB = record
Name: array [0..19] of char;
Deleted: Boolean;
PhotoSize: Cardinal;
PhotoOffset: Cardinal;
end;
Writeln(tfile, DupeString(' ', 18))
else
Writeln(tfile, kh); //导出身份证 ==>
for i:=length(kh)+1 to 18 do
kh := kh + ' ';
Writeln(tfile, kh); //导出身份证