这是check.pas的代码,Query中的databasename没设值(空的)unit check;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Menus, XPMenu, Grids, DBGrids, DB, DBTables;type TForm1 = class(TForm) MainMenu1: TMainMenu; XPMenu1: TXPMenu; F1: TMenuItem; O1: TMenuItem; P1: TMenuItem; X1: TMenuItem; E1: TMenuItem; H1: TMenuItem; DataSource1: TDataSource; DBGrid1: TDBGrid; OpenDialog1: TOpenDialog; X2: TMenuItem; Query1: TQuery; procedure HandleStr(Str:string); procedure ChkPost(PostField:string); procedure O1Click(Sender: TObject); procedure X2Click(Sender: TObject); procedure ReadHead(Str:string); procedure ReadEnd(Str:string); procedure InsertName(fieldname:string); procedure P1Click(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1; ChkFileName:string;implementationuses printset;{$R *.dfm}//将文本文件中的记录插入 mydata.db 表 procedure TForm1.HandleStr(Str:string); var input1,input2,input3,input4,input5,input6,input7,input8,input9,input10:string; input11,input12,input13,input14,input15,input16,input17,input18,input19,input20:string; input21,input22,input23,input24,input25:string; output1,output2,output3,output4,output5,output6,output7,output8,output9,output10:string; output11,output12,output13,output14,output15,output16,output17,output18,output19,output20:string; output21,output22,output23,output24,output25:string;NewStr:string;begin input1:=Copy(Str,1,6); input2:=Copy(Str,7,6); input3:=Copy(Str,13,19); input4:=Copy(Str,32,6); input5:=Copy(Str,38,12); input6:=Copy(Str,50,6); input7:=Copy(Str,56,8); input8:=Copy(Str,64,6); input9:=Copy(Str,70,12); input10:=Copy(Str,82,4); input11:=Copy(Str,86,12); input12:=Copy(Str,98,2); input13:=Copy(Str,100,6); input14:=Copy(Str,106,8); input15:=Copy(Str,114,15); input16:=Copy(Str,129,19); input17:=Copy(Str,148,3); input18:=Copy(Str,151,12); input19:=Copy(Str,163,1); input20:=Copy(Str,164,1); input21:=Copy(Str,165,4); input22:=Copy(Str,169,6); input23:=Copy(Str,175,6); input24:=Copy(Str,181,4); input25:=Copy(Str,185,4);NewStr:=input1+input2+input3+input4+input5+input6+input7+input8+input9+input10 +input11+input12+input13+input14+input15+input16+input17+input18+input19+input20 +input21+input22+input23+input24+input25;if Length(NewStr)<>188 then begin ShowMessage('源文件格式不符合要求,请校对!'); abort; end;output1:=stringreplace(input1,' ','',[rfReplaceAll]); output2:=stringreplace(input2,' ','',[rfReplaceAll]); output3:=stringreplace(input3,' ','',[rfReplaceAll]); output4:=stringreplace(input4,' ','',[rfReplaceAll]); output5:=stringreplace(input5,' ','',[rfReplaceAll]); output6:=stringreplace(input6,' ','',[rfReplaceAll]); output7:=stringreplace(input7,' ','',[rfReplaceAll]); output8:=stringreplace(input8,' ','',[rfReplaceAll]); output9:=stringreplace(input9,' ','',[rfReplaceAll]); output10:=stringreplace(input10,' ','',[rfReplaceAll]); output11:=stringreplace(input11,' ','',[rfReplaceAll]); output12:=stringreplace(input12,' ','',[rfReplaceAll]); output13:=stringreplace(input13,' ','',[rfReplaceAll]); output14:=stringreplace(input14,' ','',[rfReplaceAll]); output15:=stringreplace(input15,' ','',[rfReplaceAll]); output16:=stringreplace(input16,' ','',[rfReplaceAll]); output17:=stringreplace(input17,' ','',[rfReplaceAll]); output18:=stringreplace(input18,' ','',[rfReplaceAll]); output19:=stringreplace(input19,' ','',[rfReplaceAll]); output20:=stringreplace(input20,' ','',[rfReplaceAll]); output21:=stringreplace(input21,' ','',[rfReplaceAll]); output22:=stringreplace(input22,' ','',[rfReplaceAll]); output23:=stringreplace(input23,' ','',[rfReplaceAll]); output24:=stringreplace(input24,' ','',[rfReplaceAll]); output25:=stringreplace(input25,' ','',[rfReplaceAll]); with Query1 do begin close; //sql.Clear; //sql.Add('insert into "mydata.db" mydata'); //sql.Add('values(:序号,:发卡行代号,:交易帐号,:收单行代号,:系统参考号,:交易发生日,:交易时间,:POS交易流水,:交易金额,:回扣率,:调整系统参考,:交易类型码,:处理码,:POS机代码,:商户代号,:商户帐号,:交易币别,:清算金额,:人工授权标志,:GNET代授权记号,:清算日,:交易授权码,:POS交易时间,:POS交易日期,:业别代码)'); ParamByName('序号').asstring:=output1; ParamByName('发卡行代号').asstring:=output2; ParamByName('交易帐号').asstring:=output3; ParamByName('收单行代号').asstring:=output4; ParamByName('系统参考号').asstring:=output5; ParamByName('交易发生日').asstring:=output6; ParamByName('交易时间').asstring:=output7; ParamByName('POS交易流水').asstring:=output8; ParamByName('交易金额').asstring:=output9; ParamByName('回扣率').asstring:=output10; ParamByName('调整系统参考').asstring:=output11; ParamByName('交易类型码').asstring:=output12; ParamByName('处理码').asstring:=output13; ParamByName('POS机代号').asstring:=output14; ParamByName('商户代号').asstring:=output15; ParamByName('商户帐号').asstring:=output16; ParamByName('交易币别').asstring:=output17; ParamByName('清算金额').asstring:=output18; ParamByName('人工授权标志').asstring:=output19; ParamByName('GNET代授权记号').asstring:=output20; ParamByName('清算日').asstring:=output21; ParamByName('交易授权码').asstring:=output22; ParamByName('POS交易时间').asstring:=output23; ParamByName('POS交易日期').asstring:=output24; ParamByName('业别代码').asstring:=output25; ExecSQl; end; end;//检查db.db 表中是否有重复的记录,如有提示错误 procedure TForm1.ChkPost(PostField:string); begin Query1.Close; Query1.SQl.Clear; Query1.SQl.Add('select 文件名 from "db.db" db where 文件名=:文件名'); Query1.Prepare; Query1.Open; if Query1.ParamByName('文件名').asstring = PostField then begin ShowMessage('数据库中已存在该文件的记录!请重新输入'); abort; end; end; procedure TForm1.O1Click(Sender: TObject); var TxtFileName:TextFile; StrFileName,Str:String; temp:TStringList; n,i,Len,s,x,Num:integer; begin with OpenDialog1 do beginFilter:='文本文件(*.txt)|*.txt|所有文件(*.*)|*.*'; InitialDir:=ExtractFilePath(Application.ExeName); Title:='选择文件'; if Execute then begin StrFileName:=OpenDialog1.FileName; //用 ExtractFileName(StrFileName) 取得打开文件的名 x.txt,用于将文件名插入数据库 ChkFileName:=ExtractFileName(StrFileName); ChkPost(ChkFileName); begin //将文件名插入到db.db表 with Query1 do begin close; sql.Clear; sql.Add('insert into "db.db"(文件名)'); sql.Add('values(:文件名)'); ParamByName('文件名').asstring:=ChkFileName; ExecSQl; end; //可以用另外的方法先将字符格式化,成为连续的字符串 begin temp:= TStringList.Create; try temp.LoadFromFile(StrFileName); n:=0; for i:=0 to temp.count-1 do begin n:=n+Length(temp[i]); end; n:=Length(Trim(temp.Text))-(temp.Count - 1)*2; finally temp.Free; Len:=n div 188; s:=n mod 188; if s=0 then Num:=Len-2 else Num:=Len-1; end; end; AssignFile(TxtFileName,StrFileName); Reset(TxtFileName); readln(TxtFileName,Str); ReadHead(Str); for x:=1 to Num do begin readln(TxtFileName,Str); HandleStr(Str); InsertName(ChkFileName); end; readln(TxtFileName,Str); ReadEnd(Str); CloseFile(TxtFileName); end; end; end; end;procedure TForm1.X2Click(Sender: TObject); begin halt; end;//读首记录并插入db.db表 procedure TForm1.ReadHead(Str:string); var HeadStr1,HeadStr2:string; begin HeadStr1:=Copy(Str,7,6); HeadStr2:=Copy(Str,32,6); //Temp:= Strtoint(读出来的字符串) 用来将字符型变量转换成整型with Query1 do begin close; SQL.Clear; SQL.Add('update "db.db" set 首记录发卡行代号=:首记录发卡行代号, 首记录收单行代号=:首记录收单行代号 where 文件名='+''''+ChkFileName+''''); ParamByName('首记录发卡行代号').asstring:=HeadStr1; ParamByName('首记录收单行代号').asstring:=HeadStr2; ExecSQL; end; end;//插入文件名到mydata.db作为与db.db的关联 procedure TForm1.InsertName(fieldname:string); begin with Query1 do begin close; SQL.Clear; SQL.Add('update "mydata.db" set 文件名=:文件名'); ParamByName('文件名').asstring:=fieldname; ExecSQL; end; end;//读尾记录,插入db.db表 procedure TForm1.ReadEnd(Str:string); var EndStr1,EndStr2:string; begin EndStr1:=Copy(Str,70,12); EndStr2:=Copy(Str,169,5);with Query1 do begin close; SQL.Clear; SQl.Add('update "db.db" set 尾记录交易总金额=:尾记录交易总金额, 尾记录交易总笔数=:尾记录交易总笔数 where 文件名='+''''+ChkFileName+''''); ParamByName('尾记录交易总金额').asstring:=EndStr1; ParamByName('尾记录交易总笔数').asstring:=EndStr2; ExecSQl; end; end; procedure TForm1.P1Click(Sender: TObject); begin Form3.show; end;end.
EDatabase Error with message "query1:field '文件名' is of an unknown type
"values"前面的空格哪儿去了?
Query1.SQl.Add('update db.db set 尾记录交易总金额=:尾记录交易总金额, 尾记录交易总笔数=:尾记录交易总笔数 where 文件名='+''''+ChkFileName+''''+'');
在values前加了空格,还是有上面的错误
to fanpingli: 这样该还是有上面的错
Query1.SQl.Add('select 文件名 from "db.db" db where 文件名=:文件名'); if Query1.ParamByName('文件名').asstring = PostField then 其中的 :文件名 可以为 :filename Query1.SQl.Add('select 文件名 from "db.db" db where 文件名=:filename'); if Query1.ParamByName('filename').asstring = PostField thentry
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, XPMenu, Grids, DBGrids, DB, DBTables;type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
XPMenu1: TXPMenu;
F1: TMenuItem;
O1: TMenuItem;
P1: TMenuItem;
X1: TMenuItem;
E1: TMenuItem;
H1: TMenuItem;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
OpenDialog1: TOpenDialog;
X2: TMenuItem;
Query1: TQuery;
procedure HandleStr(Str:string);
procedure ChkPost(PostField:string);
procedure O1Click(Sender: TObject);
procedure X2Click(Sender: TObject);
procedure ReadHead(Str:string);
procedure ReadEnd(Str:string);
procedure InsertName(fieldname:string);
procedure P1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
ChkFileName:string;implementationuses printset;{$R *.dfm}//将文本文件中的记录插入 mydata.db 表
procedure TForm1.HandleStr(Str:string);
var
input1,input2,input3,input4,input5,input6,input7,input8,input9,input10:string;
input11,input12,input13,input14,input15,input16,input17,input18,input19,input20:string;
input21,input22,input23,input24,input25:string;
output1,output2,output3,output4,output5,output6,output7,output8,output9,output10:string;
output11,output12,output13,output14,output15,output16,output17,output18,output19,output20:string;
output21,output22,output23,output24,output25:string;NewStr:string;begin
input1:=Copy(Str,1,6);
input2:=Copy(Str,7,6);
input3:=Copy(Str,13,19);
input4:=Copy(Str,32,6);
input5:=Copy(Str,38,12);
input6:=Copy(Str,50,6);
input7:=Copy(Str,56,8);
input8:=Copy(Str,64,6);
input9:=Copy(Str,70,12);
input10:=Copy(Str,82,4);
input11:=Copy(Str,86,12);
input12:=Copy(Str,98,2);
input13:=Copy(Str,100,6);
input14:=Copy(Str,106,8);
input15:=Copy(Str,114,15);
input16:=Copy(Str,129,19);
input17:=Copy(Str,148,3);
input18:=Copy(Str,151,12);
input19:=Copy(Str,163,1);
input20:=Copy(Str,164,1);
input21:=Copy(Str,165,4);
input22:=Copy(Str,169,6);
input23:=Copy(Str,175,6);
input24:=Copy(Str,181,4);
input25:=Copy(Str,185,4);NewStr:=input1+input2+input3+input4+input5+input6+input7+input8+input9+input10
+input11+input12+input13+input14+input15+input16+input17+input18+input19+input20
+input21+input22+input23+input24+input25;if Length(NewStr)<>188 then
begin
ShowMessage('源文件格式不符合要求,请校对!');
abort;
end;output1:=stringreplace(input1,' ','',[rfReplaceAll]);
output2:=stringreplace(input2,' ','',[rfReplaceAll]);
output3:=stringreplace(input3,' ','',[rfReplaceAll]);
output4:=stringreplace(input4,' ','',[rfReplaceAll]);
output5:=stringreplace(input5,' ','',[rfReplaceAll]);
output6:=stringreplace(input6,' ','',[rfReplaceAll]);
output7:=stringreplace(input7,' ','',[rfReplaceAll]);
output8:=stringreplace(input8,' ','',[rfReplaceAll]);
output9:=stringreplace(input9,' ','',[rfReplaceAll]);
output10:=stringreplace(input10,' ','',[rfReplaceAll]);
output11:=stringreplace(input11,' ','',[rfReplaceAll]);
output12:=stringreplace(input12,' ','',[rfReplaceAll]);
output13:=stringreplace(input13,' ','',[rfReplaceAll]);
output14:=stringreplace(input14,' ','',[rfReplaceAll]);
output15:=stringreplace(input15,' ','',[rfReplaceAll]);
output16:=stringreplace(input16,' ','',[rfReplaceAll]);
output17:=stringreplace(input17,' ','',[rfReplaceAll]);
output18:=stringreplace(input18,' ','',[rfReplaceAll]);
output19:=stringreplace(input19,' ','',[rfReplaceAll]);
output20:=stringreplace(input20,' ','',[rfReplaceAll]);
output21:=stringreplace(input21,' ','',[rfReplaceAll]);
output22:=stringreplace(input22,' ','',[rfReplaceAll]);
output23:=stringreplace(input23,' ','',[rfReplaceAll]);
output24:=stringreplace(input24,' ','',[rfReplaceAll]);
output25:=stringreplace(input25,' ','',[rfReplaceAll]);
with Query1 do
begin
close;
//sql.Clear;
//sql.Add('insert into "mydata.db" mydata');
//sql.Add('values(:序号,:发卡行代号,:交易帐号,:收单行代号,:系统参考号,:交易发生日,:交易时间,:POS交易流水,:交易金额,:回扣率,:调整系统参考,:交易类型码,:处理码,:POS机代码,:商户代号,:商户帐号,:交易币别,:清算金额,:人工授权标志,:GNET代授权记号,:清算日,:交易授权码,:POS交易时间,:POS交易日期,:业别代码)');
ParamByName('序号').asstring:=output1;
ParamByName('发卡行代号').asstring:=output2;
ParamByName('交易帐号').asstring:=output3;
ParamByName('收单行代号').asstring:=output4;
ParamByName('系统参考号').asstring:=output5;
ParamByName('交易发生日').asstring:=output6;
ParamByName('交易时间').asstring:=output7;
ParamByName('POS交易流水').asstring:=output8;
ParamByName('交易金额').asstring:=output9;
ParamByName('回扣率').asstring:=output10;
ParamByName('调整系统参考').asstring:=output11;
ParamByName('交易类型码').asstring:=output12;
ParamByName('处理码').asstring:=output13;
ParamByName('POS机代号').asstring:=output14;
ParamByName('商户代号').asstring:=output15;
ParamByName('商户帐号').asstring:=output16;
ParamByName('交易币别').asstring:=output17;
ParamByName('清算金额').asstring:=output18;
ParamByName('人工授权标志').asstring:=output19;
ParamByName('GNET代授权记号').asstring:=output20;
ParamByName('清算日').asstring:=output21;
ParamByName('交易授权码').asstring:=output22;
ParamByName('POS交易时间').asstring:=output23;
ParamByName('POS交易日期').asstring:=output24;
ParamByName('业别代码').asstring:=output25;
ExecSQl;
end;
end;//检查db.db 表中是否有重复的记录,如有提示错误
procedure TForm1.ChkPost(PostField:string);
begin
Query1.Close;
Query1.SQl.Clear;
Query1.SQl.Add('select 文件名 from "db.db" db where 文件名=:文件名');
Query1.Prepare;
Query1.Open;
if Query1.ParamByName('文件名').asstring = PostField then
begin
ShowMessage('数据库中已存在该文件的记录!请重新输入');
abort;
end;
end;
procedure TForm1.O1Click(Sender: TObject);
var
TxtFileName:TextFile;
StrFileName,Str:String;
temp:TStringList;
n,i,Len,s,x,Num:integer;
begin
with OpenDialog1 do
beginFilter:='文本文件(*.txt)|*.txt|所有文件(*.*)|*.*';
InitialDir:=ExtractFilePath(Application.ExeName);
Title:='选择文件';
if Execute then
begin
StrFileName:=OpenDialog1.FileName;
//用 ExtractFileName(StrFileName) 取得打开文件的名 x.txt,用于将文件名插入数据库
ChkFileName:=ExtractFileName(StrFileName);
ChkPost(ChkFileName);
begin
//将文件名插入到db.db表
with Query1 do
begin
close;
sql.Clear;
sql.Add('insert into "db.db"(文件名)');
sql.Add('values(:文件名)');
ParamByName('文件名').asstring:=ChkFileName;
ExecSQl;
end;
//可以用另外的方法先将字符格式化,成为连续的字符串
begin
temp:= TStringList.Create;
try
temp.LoadFromFile(StrFileName);
n:=0;
for i:=0 to temp.count-1 do
begin
n:=n+Length(temp[i]);
end;
n:=Length(Trim(temp.Text))-(temp.Count - 1)*2;
finally
temp.Free;
Len:=n div 188;
s:=n mod 188;
if s=0 then
Num:=Len-2
else
Num:=Len-1;
end;
end;
AssignFile(TxtFileName,StrFileName);
Reset(TxtFileName);
readln(TxtFileName,Str);
ReadHead(Str);
for x:=1 to Num do
begin
readln(TxtFileName,Str);
HandleStr(Str);
InsertName(ChkFileName);
end;
readln(TxtFileName,Str);
ReadEnd(Str);
CloseFile(TxtFileName);
end;
end;
end;
end;procedure TForm1.X2Click(Sender: TObject);
begin
halt;
end;//读首记录并插入db.db表
procedure TForm1.ReadHead(Str:string);
var
HeadStr1,HeadStr2:string;
begin
HeadStr1:=Copy(Str,7,6);
HeadStr2:=Copy(Str,32,6);
//Temp:= Strtoint(读出来的字符串) 用来将字符型变量转换成整型with Query1 do
begin
close;
SQL.Clear;
SQL.Add('update "db.db" set 首记录发卡行代号=:首记录发卡行代号, 首记录收单行代号=:首记录收单行代号 where 文件名='+''''+ChkFileName+'''');
ParamByName('首记录发卡行代号').asstring:=HeadStr1;
ParamByName('首记录收单行代号').asstring:=HeadStr2;
ExecSQL;
end;
end;//插入文件名到mydata.db作为与db.db的关联
procedure TForm1.InsertName(fieldname:string);
begin
with Query1 do
begin
close;
SQL.Clear;
SQL.Add('update "mydata.db" set 文件名=:文件名');
ParamByName('文件名').asstring:=fieldname;
ExecSQL;
end;
end;//读尾记录,插入db.db表
procedure TForm1.ReadEnd(Str:string);
var
EndStr1,EndStr2:string;
begin
EndStr1:=Copy(Str,70,12);
EndStr2:=Copy(Str,169,5);with Query1 do
begin
close;
SQL.Clear;
SQl.Add('update "db.db" set 尾记录交易总金额=:尾记录交易总金额, 尾记录交易总笔数=:尾记录交易总笔数 where 文件名='+''''+ChkFileName+'''');
ParamByName('尾记录交易总金额').asstring:=EndStr1;
ParamByName('尾记录交易总笔数').asstring:=EndStr2;
ExecSQl;
end;
end;
procedure TForm1.P1Click(Sender: TObject);
begin
Form3.show;
end;end.
这样该还是有上面的错
if Query1.ParamByName('文件名').asstring = PostField then
其中的 :文件名 可以为 :filename
Query1.SQl.Add('select 文件名 from "db.db" db where 文件名=:filename');
if Query1.ParamByName('filename').asstring = PostField thentry
在界面设计时(InternetExpress),用到了字段列表,后来因为删除或修改了Query组件,就出现上面的问题。
问题的原因我未完全弄清楚,不过我把界面重新做过一次就行了。
你可以试一试,有些问题不一定是程序错误。
查看数据库db.db中'文件名'字段,'首记录发卡行代号'字段 和 '首记录收单行代号'字段存在正常的记录(就是说这3个字段的数据库操作是成功的)。
但db.db的其他字段,和mydata.db中的所有字段都是空的,没有理想中插入的记录,请问程序还有哪些地方修改?
mydata.db是以一个自动增加数值字段为索引,db.db是以'文件名'字段为索引,同时这个字段也是跟mydata.db关联的字段(mydata.db中也有'文件名'这个字段)unit check;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, XPMenu, Grids, DBGrids, DB, DBTables;type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
XPMenu1: TXPMenu;
F1: TMenuItem;
O1: TMenuItem;
P1: TMenuItem;
X1: TMenuItem;
E1: TMenuItem;
H1: TMenuItem;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
OpenDialog1: TOpenDialog;
X2: TMenuItem;
Query1: TQuery;
procedure HandleStr(Str:string);
procedure ChkPost(PostField:string);
procedure O1Click(Sender: TObject);
procedure X2Click(Sender: TObject);
procedure ReadHead(Str:string);
procedure ReadEnd(Str:string);
procedure InsertName(fieldname:string);
procedure P1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
ChkFileName:string;implementationuses printset;{$R *.dfm}procedure TForm1.HandleStr(Str:string);
var
input1,input2,input3,input4,input5,input6,input7,input8,input9,input10:string;
input11,input12,input13,input14,input15,input16,input17,input18,input19,input20:string;
input21,input22,input23,input24,input25:string;
output1,output2,output3,output4,output5,output6,output7,output8,output9,output10:string;
output11,output12,output13,output14,output15,output16,output17,output18,output19,output20:string;
output21,output22,output23,output24,output25:string;NewStr:string;begin
input1:=Copy(Str,1,6);
input2:=Copy(Str,7,6);
input3:=Copy(Str,13,19);
input4:=Copy(Str,32,6);
input5:=Copy(Str,38,12);
input6:=Copy(Str,50,6);
input7:=Copy(Str,56,8);
input8:=Copy(Str,64,6);
input9:=Copy(Str,70,12);
input10:=Copy(Str,82,4);
input11:=Copy(Str,86,12);
input12:=Copy(Str,98,2);
input13:=Copy(Str,100,6);
input14:=Copy(Str,106,8);
input15:=Copy(Str,114,15);
input16:=Copy(Str,129,19);
input17:=Copy(Str,148,3);
input18:=Copy(Str,151,12);
input19:=Copy(Str,163,1);
input20:=Copy(Str,164,1);
input21:=Copy(Str,165,4);
input22:=Copy(Str,169,6);
input23:=Copy(Str,175,6);
input24:=Copy(Str,181,4);
input25:=Copy(Str,185,4);NewStr:=input1+input2+input3+input4+input5+input6+input7+input8+input9+input10
+input11+input12+input13+input14+input15+input16+input17+input18+input19+input20
+input21+input22+input23+input24+input25;if Length(NewStr)<>188 then
begin
ShowMessage('源文件格式不符合要求,请校对!');
abort;
end;output1:=stringreplace(input1,' ','',[rfReplaceAll]);
output2:=stringreplace(input2,' ','',[rfReplaceAll]);
output3:=stringreplace(input3,' ','',[rfReplaceAll]);
output4:=stringreplace(input4,' ','',[rfReplaceAll]);
output5:=stringreplace(input5,' ','',[rfReplaceAll]);
output6:=stringreplace(input6,' ','',[rfReplaceAll]);
output7:=stringreplace(input7,' ','',[rfReplaceAll]);
output8:=stringreplace(input8,' ','',[rfReplaceAll]);
output9:=stringreplace(input9,' ','',[rfReplaceAll]);
output10:=stringreplace(input10,' ','',[rfReplaceAll]);
output11:=stringreplace(input11,' ','',[rfReplaceAll]);
output12:=stringreplace(input12,' ','',[rfReplaceAll]);
output13:=stringreplace(input13,' ','',[rfReplaceAll]);
output14:=stringreplace(input14,' ','',[rfReplaceAll]);
output15:=stringreplace(input15,' ','',[rfReplaceAll]);
output16:=stringreplace(input16,' ','',[rfReplaceAll]);
output17:=stringreplace(input17,' ','',[rfReplaceAll]);
output18:=stringreplace(input18,' ','',[rfReplaceAll]);
output19:=stringreplace(input19,' ','',[rfReplaceAll]);
output20:=stringreplace(input20,' ','',[rfReplaceAll]);
output21:=stringreplace(input21,' ','',[rfReplaceAll]);
output22:=stringreplace(input22,' ','',[rfReplaceAll]);
output23:=stringreplace(input23,' ','',[rfReplaceAll]);
output24:=stringreplace(input24,' ','',[rfReplaceAll]);
output25:=stringreplace(input25,' ','',[rfReplaceAll]);
with Query1 do
begin
close;
sql.Clear;
sql.Add('insert into "mydata.db" mydata (序号,发卡行代号,交易帐号,收单行代号,系统参考号,交易发生日,交易时间,POS交易流水,交易金额,回扣率,调整系统参考,交易类型码,处理码,POS机代码,商户代号,商户帐号,交易币别,清算金额,人工授权标志,GNET代授权记号,清算日,交易授权码,POS交易时间,POS交易日期,业别代码) ');
sql.Add('values(:序号,:发卡行代号,:交易帐号,:收单行代号,:系统参考号,:交易发生日,:交易时间,:POS交易流水,:交易金额,:回扣率,:调整系统参考,:交易类型码,:处理码,:POS机代码,:商户代号,:商户帐号,:交易币别,:清算金额,:人工授权标志,:GNET代授权记号,:清算日,:交易授权码,:POS交易时间,:POS交易日期,:业别代码)');
params[0].asstring:=output1;
params[1].asstring:=output2;
params[2].asstring:=output3;
params[3].asstring:=output4;
params[4].asstring:=output5;
params[5].asstring:=output6;
params[6].asstring:=output7;
params[7].asstring:=output8;
params[8].asstring:=output9;
params[9].asstring:=output10;
params[10].asstring:=output11;
params[11].asstring:=output12;
params[12].asstring:=output13;
params[13].asstring:=output14;
params[14].asstring:=output15;
params[15].asstring:=output16;
params[16].asstring:=output17;
params[17].asstring:=output18;
params[18].asstring:=output19;
params[19].asstring:=output20;
params[20].asstring:=output21;
params[21].asstring:=output22;
params[22].asstring:=output23;
params[23].asstring:=output24;
params[24].asstring:=output25;
ExecSQl;
end;
end;procedure TForm1.ChkPost(PostField:string);
begin
Query1.Close;
Query1.SQl.Clear;
Query1.SQl.Add('select 文件名 from "db.db" db GROUP BY 文件名');
Query1.Prepare;
Query1.Open;
if Query1.ParamByName('文件名').asstring <> PostField then
begin
ShowMessage('数据库中已存在该文件的记录!请重新输入');
abort;
end;
end;procedure TForm1.O1Click(Sender: TObject);
var
TxtFileName:TextFile;
StrFileName,Str:String;
temp:TStringList;
n,i,Len,s,x,Num:integer;
begin
with OpenDialog1 do
beginFilter:='文本文件(*.txt)|*.txt|所有文件(*.*)|*.*';
InitialDir:=ExtractFilePath(Application.ExeName);
Title:='选择文件';
if Execute then
begin
StrFileName:=OpenDialog1.FileName;
//用 ExtractFileName(StrFileName) 取得打开文件的名 x.txt,用于将文件名插入数据库
ChkFileName:=ExtractFileName(StrFileName);
//ChkPost(ChkFileName);
begin
with Query1 do
begin
close;
sql.Clear;
sql.Add('insert into "db.db" (文件名) ');
sql.Add('values(:文件名)');
ParamByName('文件名').asstring:=ChkFileName;
ExecSQl;
end;
//可以用另外的方法先将字符格式化,成为连续的字符串
begin
temp:= TStringList.Create;
try
temp.LoadFromFile(StrFileName);
n:=0;
for i:=0 to temp.count-1 do
begin
n:=n+Length(temp[i]);
end;
n:=Length(Trim(temp.Text))-(temp.Count - 1)*2;
finally
temp.Free;
Len:=n div 188;
s:=n mod 188;
if s=0 then
Num:=Len-2
else
Num:=Len-1;
end;
end;
AssignFile(TxtFileName,StrFileName);
Reset(TxtFileName);
readln(TxtFileName,Str);
ReadHead(Str);
for x:=1 to Num do
begin
readln(TxtFileName,Str);
HandleStr(Str);
InsertName(ChkFileName);
end;
readln(TxtFileName,Str);
ReadEnd(Str);
CloseFile(TxtFileName);
end;
end;
end;
end;procedure TForm1.X2Click(Sender: TObject);
begin
halt;
end;procedure TForm1.ReadHead(Str:string);
var
HeadStr1,HeadStr2:string;
begin
HeadStr1:=Copy(Str,7,6);
HeadStr2:=Copy(Str,32,6);
//Temp:= Strtoint(读出来的字符串) 用来将字符型变量转换成整型with Query1 do
begin
close;
SQL.Clear;
SQL.Add('update "db.db" set 首记录发卡行代号=:首记录发卡行代号,首记录收单行代号=:首记录收单行代号 where 文件名='+''''+ChkFileName+'''');
ParamByName('首记录发卡行代号').asstring:=HeadStr1;
ParamByName('首记录收单行代号').asstring:=HeadStr2;
ExecSQL;
end;
end;procedure TForm1.InsertName(fieldname:string);
begin
with Query1 do
begin
close;
SQL.Clear;
SQL.Add('update "mydata.db" set 文件名='+''''+fieldname+''''+'');
ExecSQL;
end;
end;procedure TForm1.ReadEnd(Str:string);
var
EndStr1,EndStr2:string;
begin
EndStr1:=Copy(Str,70,12);
EndStr2:=Copy(Str,169,5);with Query1 do
begin
close;
SQL.Clear;
SQl.Add('update "db.db" set 尾记录交易总金额=:尾记录交易总金额, 尾记录交易总笔数=:尾记录交易总笔数 where 文件名='+''''+ChkFileName+''''+'');
ParamByName('尾记录交易总金额').asstring:=EndStr1;
ParamByName('尾记录交易总笔数').asstring:=EndStr2;
ExecSQl;
end;
end;procedure TForm1.P1Click(Sender: TObject);
begin
Form3.show;
end;end.
plz不要这么多codelist index out of bounds (2)”
可能是对数据指针的错误,指向了一个null
注意sql语句的逻辑上的错误
begin
close;
sql.Clear;
sql.Add('insert into "mydata.db" (序号,发卡行代号,交易帐号,收单行代号,系统参考号,交易发生日,交易时间,POS交易流水,交易金额,回扣率,调整系统参考,交易类型码,处理码,POS机代码,商户代号,商户帐号,交易币别,清算金额,人工授权标志,GNET代授权记号,清算日,交易授权码,POS交易时间,POS交易日期,业别代码) ');
sql.Add('values(:序号,:发卡行代号,:交易帐号,:收单行代号,:系统参考号,:交易发生日,:交易时间,:POS交易流水,:交易金额,:回扣率,:调整系统参考,:交易类型码,:处理码,:POS机代码,:商户代号,:商户帐号,:交易币别,:清算金额,:人工授权标志,:GNET代授权记号,:清算日,:交易授权码,:POS交易时间,:POS交易日期,:业别代码)');
params[0].asstring:=output1;
params[1].asstring:=output2;
params[2].asstring:=output3;
params[3].asstring:=output4;
params[4].asstring:=output5;
params[5].asstring:=output6;
params[6].asstring:=output7;
params[7].asstring:=output8;
params[8].asstring:=output9;
params[9].asstring:=output10;
params[10].asstring:=output11;
params[11].asstring:=output12;
params[12].asstring:=output13;
params[13].asstring:=output14;
params[14].asstring:=output15;
params[15].asstring:=output16;
params[16].asstring:=output17;
params[17].asstring:=output18;
params[18].asstring:=output19;
params[19].asstring:=output20;
params[20].asstring:=output21;
params[21].asstring:=output22;
params[22].asstring:=output23;
params[23].asstring:=output24;
params[24].asstring:=output25;
ExecSQl;
end;