这条数据写入表bb中,分别对应的类型结果为:int char int datetime float bit
1 gg 6 2008-07-12 9.365 1 (false在逻辑类型里显示为1)
这种转换并写入表的过程应该怎么写呢?
难点在于要把纯字符串的内容再写入到表中的各种类型中去。
高手们帮我想想吧。
16 个解决方案
#1
想了好久了,请高手们帮我解决一下吧,让我也学点技巧,谢谢啦~~~~~~~~~~~
#2
AdoQuery1.Close;
AdoQuery1.Sql.Text:='insert into table(field1,field2,field3,field4,field5,field6) values(:v1,:v2,:v3,:v4,:v5,:v6)';
AdoQuery1.Parameters.ParamByName('v1').Value:=1;
AdoQuery1.Parameters.ParamByName('v2').Value:='gg';
AdoQuery1.Parameters.ParamByName('v3').Value:=6;
AdoQuery1.Parameters.ParamByName('v4').Value:=StrToDate('2008-07-12');
AdoQuery1.Parameters.ParamByName('v5').Value:=9.365;
AdoQuery1.Parameters.ParamByName('v2').Value:=false;
AdoQuery1.ExecSql;
AdoQuery1.Sql.Text:='insert into table(field1,field2,field3,field4,field5,field6) values(:v1,:v2,:v3,:v4,:v5,:v6)';
AdoQuery1.Parameters.ParamByName('v1').Value:=1;
AdoQuery1.Parameters.ParamByName('v2').Value:='gg';
AdoQuery1.Parameters.ParamByName('v3').Value:=6;
AdoQuery1.Parameters.ParamByName('v4').Value:=StrToDate('2008-07-12');
AdoQuery1.Parameters.ParamByName('v5').Value:=9.365;
AdoQuery1.Parameters.ParamByName('v2').Value:=false;
AdoQuery1.ExecSql;
#3
如果加上循环,让它自己一条条往里写,而不是我直接打字符串,怎么写呢?
我写的循环不对,一条也写不进。
我写的循环不对,一条也写不进。
#4
2楼的写法,是直接写进去了,若在已经取出20条记录的情况下,怎样把记录一条条写入呢?
#5
var
strs,strsLine:TStringList;
i:integer;
begin
strs:=TStringList.Create;
strs.LoadFromFile('c:\1.txt');
strsLine:=TStringLIst.Create;
for i:=0 to strs.Count-1 do
begin
strsLine.DelimitedText:=strs.Strings[i];
AdoQuery1.Close;
AdoQuery1.Sql.Text:='insert into table(field1,field2,field3,field4,field5,field6) values(:v1,:v2,:v3,:v4,:v5,:v6)';
AdoQuery1.Parameters.ParamByName('v1').Value:=StrToInt(strsLine.String[0]);
AdoQuery1.Parameters.ParamByName('v2').Value:=strsLine.String[1];
AdoQuery1.Parameters.ParamByName('v3').Value:=StrToInt(strsLine.String[2]);
AdoQuery1.Parameters.ParamByName('v4').Value:=StrToDate(strsLine.String[3]);
AdoQuery1.Parameters.ParamByName('v5').Value:=strsLine.String[4];
AdoQuery1.Parameters.ParamByName('v2').Value:=StrToBool(strsLine.String[2]);
AdoQuery1.ExecSql;
end;
strsLine.Free;
strs.Free;
end;
#6
我这有一段读取txt文件的小例了,你看一下
function TPaperImpl.ImportPrice: Boolean;
var
vfile: TextFile;
vfilePath,lineInfo:String;
vOpenDialog: TOpenDialog;
ID,Name,Code,BRecv,KaiPan,Price: String;
i: integer;
begin
vOpenDialog := TOpenDialog.Create(nil);
try
vOpenDialog.Filter := '*.txt';
vOpenDialog.FileName:='*.txt';
if not vOpenDialog.Execute then Exit;
FAC.BeginTrans;
try
vfilePath := vOpendialog.FileName;
AssignFile(vfile, vfilePath);
reset(vfile);
i:=0;
while not eof(vfile) do
begin
readln(vfile,lineInfo);
if i>0 then
begin
ID:=trim(copy(lineInfo,0,6));
Name:=trim(copy(lineInfo,8,8));
Code:=trim(copy(lineInfo,17,8));
BRecv:=trim(copy(lineInfo,29,4));
KaiPan:=trim(copy(lineInfo,37,4));
Price:=trim(copy(lineInfo,45,4));
//开始列新价格
with FQ do
begin
Close;
.....
ExecSql;
end;
end;
inc(i);
end;
closefile(vfile);
Result := true;
FAC.CommitTrans;
except
FAC.RollbackTrans;
Result := false;
end;
finally
vOpenDialog.Free;
end;
end;
function TPaperImpl.ImportPrice: Boolean;
var
vfile: TextFile;
vfilePath,lineInfo:String;
vOpenDialog: TOpenDialog;
ID,Name,Code,BRecv,KaiPan,Price: String;
i: integer;
begin
vOpenDialog := TOpenDialog.Create(nil);
try
vOpenDialog.Filter := '*.txt';
vOpenDialog.FileName:='*.txt';
if not vOpenDialog.Execute then Exit;
FAC.BeginTrans;
try
vfilePath := vOpendialog.FileName;
AssignFile(vfile, vfilePath);
reset(vfile);
i:=0;
while not eof(vfile) do
begin
readln(vfile,lineInfo);
if i>0 then
begin
ID:=trim(copy(lineInfo,0,6));
Name:=trim(copy(lineInfo,8,8));
Code:=trim(copy(lineInfo,17,8));
BRecv:=trim(copy(lineInfo,29,4));
KaiPan:=trim(copy(lineInfo,37,4));
Price:=trim(copy(lineInfo,45,4));
//开始列新价格
with FQ do
begin
Close;
.....
ExecSql;
end;
end;
inc(i);
end;
closefile(vfile);
Result := true;
FAC.CommitTrans;
except
FAC.RollbackTrans;
Result := false;
end;
finally
vOpenDialog.Free;
end;
end;
#7
5楼的方法好,利用TStringList来处理。
#8
我把数据从数据表写到TXT文件是用以下代码写的,但发现文本文件里一行记录都是连在一起的,怎样把每个数据分开呢?
不然再写回到数据库时,会认为这是一体的,只是一个数据. 提示错误:1gg62008-07-129.365False不是int型。
帮我看看读数据到文本的代码哪里欠妥?
procedure TForm1.Button2Click(Sender: TObject);
var
F1:TextFile;
str:string;
j:integer;
begin
if SaveDialog1.Execute
then
begin
AssignFile(F1,SaveDialog1.FileName);
Rewrite(F1);
with adoquery1 do
begin
close;
sql.Clear;
sql.Add('select * from aa ');
open;
first;
for j:=1 to 20 do
begin
memo1.Lines.Add(adoquery1.fieldbyname('no').AsString+trim(adoquery1.fieldbyname('t1').AsString)+adoquery1.fieldbyname('t2').AsString+adoquery1.fieldbyname('t3').AsString+adoquery1.fieldbyname('t4').AsString+adoquery1.fieldbyname('t5').AsString);
next;
end;
end;
str:= '';
str:= memo1.Lines.Text;
writeln(f1,str);
CloseFile(F1);
showmessage('已完成保存!');
end;
end;
不然再写回到数据库时,会认为这是一体的,只是一个数据. 提示错误:1gg62008-07-129.365False不是int型。
帮我看看读数据到文本的代码哪里欠妥?
procedure TForm1.Button2Click(Sender: TObject);
var
F1:TextFile;
str:string;
j:integer;
begin
if SaveDialog1.Execute
then
begin
AssignFile(F1,SaveDialog1.FileName);
Rewrite(F1);
with adoquery1 do
begin
close;
sql.Clear;
sql.Add('select * from aa ');
open;
first;
for j:=1 to 20 do
begin
memo1.Lines.Add(adoquery1.fieldbyname('no').AsString+trim(adoquery1.fieldbyname('t1').AsString)+adoquery1.fieldbyname('t2').AsString+adoquery1.fieldbyname('t3').AsString+adoquery1.fieldbyname('t4').AsString+adoquery1.fieldbyname('t5').AsString);
next;
end;
end;
str:= '';
str:= memo1.Lines.Text;
writeln(f1,str);
CloseFile(F1);
showmessage('已完成保存!');
end;
end;
#9
memo1.Lines.Add(adoquery1.fieldbyname('no').AsString+trim(adoquery1.fieldbyname('t1').AsString)+adoquery1.fieldbyname('t2').AsString+adoquery1.fieldbyname('t3').AsString+adoquery1.fieldbyname('t4').AsString+adoquery1.fieldbyname('t5').AsString);
你这中间也没有加个分隔符之类的,比如tab或分号
你这中间也没有加个分隔符之类的,比如tab或分号
#10
你最好用INI文件存储数据,然后读出来就是一个一个的了,如果是文本文件还得根据格式一个一个的拆分,麻烦死了!
参考代码:
参考代码:
procedure TForm1.BitBtn1Click(Sender: TObject);
var
SFileName: string;
begin
{将配置文件 参数读出显示在edit}
SFileName := ExtractFilePath(paramstr(0)) + 'MyTest.ini';
if not FileExists(SFileName) then
raise Exception.Create('文件不存在!')
else
begin
Myinifile := TIniFile.Create(SFileName);
edit2.Text := Myinifile.ReadString('小节名一','关键字1','');
edit3.Text := Myinifile.ReadString('小节名一','关键字2','');
edit4.Text := Myinifile.ReadString('小节名二','关键字1','');
myinifile.Free;
end;
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
var
SFileName: string;
begin
{将配置文件 参数读出显示在edit}
SFileName := ExtractFilePath(paramstr(0)) + 'MyTest.ini';
Myinifile := TIniFile.Create(SFileName);
Myinifile.WriteString('小节名一','关键字1',edit2.Text);
Myinifile.WriteString('小节名一','关键字2','关键字2的内容');
Myinifile.WriteString('小节名二','关键字1',edit4.Text);
myinifile.Free;
end;
#11
我用5楼的办法,现在可以写进数据了,但是最后会出一个错,什么问题?
#12
五楼的最后一个
AdoQuery1.Parameters.ParamByName ('v2').Value:=StrToBool(strsLine.String[2]);
改成V6
晕,你不会直接拿过去原封不动的就用了吧
AdoQuery1.Parameters.ParamByName ('v2').Value:=StrToBool(strsLine.String[2]);
改成V6
晕,你不会直接拿过去原封不动的就用了吧
#13
晕,我当然是改好了再用的了。我改好了才用的,这个我还是看的到的啦。
procedure TForm1.Button3Click(Sender: TObject);
var
strs,strsLine:TStringList;
i:integer;
begin
if OpenDialog1.Execute then
begin
strs:=TStringList.Create;
strs.LoadFromFile(OpenDialog1.FileName);
strsLine:=TStringLIst.Create;
for i:=0 to strs.Count-1 do
begin
strsLine.DelimitedText:=strs.Strings[i];
showmessage(strsLine.DelimitedText);
AdoQuery2.Close;
AdoQuery2.sql.Clear;
AdoQuery2.Sql.Text:='insert into bb(no,t1,t2,t3,t4,t5) values(:v1,:v2,:v3,:v4,:v5,:v6)';
AdoQuery2.Parameters.ParamByName('v1').Value:=StrToInt(strsLine.Strings[0]);
AdoQuery2.Parameters.ParamByName('v2').Value:=strsLine.Strings[1];
AdoQuery2.Parameters.ParamByName('v3').Value:=strsLine.Strings[2];
AdoQuery2.Parameters.ParamByName('v4').Value:=StrToDate(strsLine.Strings[3]);
AdoQuery2.Parameters.ParamByName('v5').Value:=StrTofloat(strsLine.Strings[4]);
AdoQuery2.Parameters.ParamByName('v6').Value:=StrToBool(strsLine.Strings[5]);
AdoQuery2.ExecSql;
next;
end;
strsLine.Free;
strs.Free;
end;
showmessage('已完成保存!');
end;
错误提示:list index out of bound(0),数组越界?
procedure TForm1.Button3Click(Sender: TObject);
var
strs,strsLine:TStringList;
i:integer;
begin
if OpenDialog1.Execute then
begin
strs:=TStringList.Create;
strs.LoadFromFile(OpenDialog1.FileName);
strsLine:=TStringLIst.Create;
for i:=0 to strs.Count-1 do
begin
strsLine.DelimitedText:=strs.Strings[i];
showmessage(strsLine.DelimitedText);
AdoQuery2.Close;
AdoQuery2.sql.Clear;
AdoQuery2.Sql.Text:='insert into bb(no,t1,t2,t3,t4,t5) values(:v1,:v2,:v3,:v4,:v5,:v6)';
AdoQuery2.Parameters.ParamByName('v1').Value:=StrToInt(strsLine.Strings[0]);
AdoQuery2.Parameters.ParamByName('v2').Value:=strsLine.Strings[1];
AdoQuery2.Parameters.ParamByName('v3').Value:=strsLine.Strings[2];
AdoQuery2.Parameters.ParamByName('v4').Value:=StrToDate(strsLine.Strings[3]);
AdoQuery2.Parameters.ParamByName('v5').Value:=StrTofloat(strsLine.Strings[4]);
AdoQuery2.Parameters.ParamByName('v6').Value:=StrToBool(strsLine.Strings[5]);
AdoQuery2.ExecSql;
next;
end;
strsLine.Free;
strs.Free;
end;
showmessage('已完成保存!');
end;
错误提示:list index out of bound(0),数组越界?
#14
你文本里大概有违法的语法数据吧,没有严格按照上面的结构?这里没考虑这个异常处理。
#15
OK了,我改好了,现在正常了.
多循环了一次,空循环了一次。
for i:=0 to strs.Count-1 do 改为 for i:=0 to strs.Count-2 do
OK啦~~~~~~
谢谢各位~~~~~~太感谢了。
多循环了一次,空循环了一次。
for i:=0 to strs.Count-1 do 改为 for i:=0 to strs.Count-2 do
OK啦~~~~~~
谢谢各位~~~~~~太感谢了。
#16
不好意思,看来作为女性在编程方面的确有待加强。谢谢各位帮助,还好自己也动了一下小脑。呵~~~~~~~~
#1
想了好久了,请高手们帮我解决一下吧,让我也学点技巧,谢谢啦~~~~~~~~~~~
#2
AdoQuery1.Close;
AdoQuery1.Sql.Text:='insert into table(field1,field2,field3,field4,field5,field6) values(:v1,:v2,:v3,:v4,:v5,:v6)';
AdoQuery1.Parameters.ParamByName('v1').Value:=1;
AdoQuery1.Parameters.ParamByName('v2').Value:='gg';
AdoQuery1.Parameters.ParamByName('v3').Value:=6;
AdoQuery1.Parameters.ParamByName('v4').Value:=StrToDate('2008-07-12');
AdoQuery1.Parameters.ParamByName('v5').Value:=9.365;
AdoQuery1.Parameters.ParamByName('v2').Value:=false;
AdoQuery1.ExecSql;
AdoQuery1.Sql.Text:='insert into table(field1,field2,field3,field4,field5,field6) values(:v1,:v2,:v3,:v4,:v5,:v6)';
AdoQuery1.Parameters.ParamByName('v1').Value:=1;
AdoQuery1.Parameters.ParamByName('v2').Value:='gg';
AdoQuery1.Parameters.ParamByName('v3').Value:=6;
AdoQuery1.Parameters.ParamByName('v4').Value:=StrToDate('2008-07-12');
AdoQuery1.Parameters.ParamByName('v5').Value:=9.365;
AdoQuery1.Parameters.ParamByName('v2').Value:=false;
AdoQuery1.ExecSql;
#3
如果加上循环,让它自己一条条往里写,而不是我直接打字符串,怎么写呢?
我写的循环不对,一条也写不进。
我写的循环不对,一条也写不进。
#4
2楼的写法,是直接写进去了,若在已经取出20条记录的情况下,怎样把记录一条条写入呢?
#5
var
strs,strsLine:TStringList;
i:integer;
begin
strs:=TStringList.Create;
strs.LoadFromFile('c:\1.txt');
strsLine:=TStringLIst.Create;
for i:=0 to strs.Count-1 do
begin
strsLine.DelimitedText:=strs.Strings[i];
AdoQuery1.Close;
AdoQuery1.Sql.Text:='insert into table(field1,field2,field3,field4,field5,field6) values(:v1,:v2,:v3,:v4,:v5,:v6)';
AdoQuery1.Parameters.ParamByName('v1').Value:=StrToInt(strsLine.String[0]);
AdoQuery1.Parameters.ParamByName('v2').Value:=strsLine.String[1];
AdoQuery1.Parameters.ParamByName('v3').Value:=StrToInt(strsLine.String[2]);
AdoQuery1.Parameters.ParamByName('v4').Value:=StrToDate(strsLine.String[3]);
AdoQuery1.Parameters.ParamByName('v5').Value:=strsLine.String[4];
AdoQuery1.Parameters.ParamByName('v2').Value:=StrToBool(strsLine.String[2]);
AdoQuery1.ExecSql;
end;
strsLine.Free;
strs.Free;
end;
#6
我这有一段读取txt文件的小例了,你看一下
function TPaperImpl.ImportPrice: Boolean;
var
vfile: TextFile;
vfilePath,lineInfo:String;
vOpenDialog: TOpenDialog;
ID,Name,Code,BRecv,KaiPan,Price: String;
i: integer;
begin
vOpenDialog := TOpenDialog.Create(nil);
try
vOpenDialog.Filter := '*.txt';
vOpenDialog.FileName:='*.txt';
if not vOpenDialog.Execute then Exit;
FAC.BeginTrans;
try
vfilePath := vOpendialog.FileName;
AssignFile(vfile, vfilePath);
reset(vfile);
i:=0;
while not eof(vfile) do
begin
readln(vfile,lineInfo);
if i>0 then
begin
ID:=trim(copy(lineInfo,0,6));
Name:=trim(copy(lineInfo,8,8));
Code:=trim(copy(lineInfo,17,8));
BRecv:=trim(copy(lineInfo,29,4));
KaiPan:=trim(copy(lineInfo,37,4));
Price:=trim(copy(lineInfo,45,4));
//开始列新价格
with FQ do
begin
Close;
.....
ExecSql;
end;
end;
inc(i);
end;
closefile(vfile);
Result := true;
FAC.CommitTrans;
except
FAC.RollbackTrans;
Result := false;
end;
finally
vOpenDialog.Free;
end;
end;
function TPaperImpl.ImportPrice: Boolean;
var
vfile: TextFile;
vfilePath,lineInfo:String;
vOpenDialog: TOpenDialog;
ID,Name,Code,BRecv,KaiPan,Price: String;
i: integer;
begin
vOpenDialog := TOpenDialog.Create(nil);
try
vOpenDialog.Filter := '*.txt';
vOpenDialog.FileName:='*.txt';
if not vOpenDialog.Execute then Exit;
FAC.BeginTrans;
try
vfilePath := vOpendialog.FileName;
AssignFile(vfile, vfilePath);
reset(vfile);
i:=0;
while not eof(vfile) do
begin
readln(vfile,lineInfo);
if i>0 then
begin
ID:=trim(copy(lineInfo,0,6));
Name:=trim(copy(lineInfo,8,8));
Code:=trim(copy(lineInfo,17,8));
BRecv:=trim(copy(lineInfo,29,4));
KaiPan:=trim(copy(lineInfo,37,4));
Price:=trim(copy(lineInfo,45,4));
//开始列新价格
with FQ do
begin
Close;
.....
ExecSql;
end;
end;
inc(i);
end;
closefile(vfile);
Result := true;
FAC.CommitTrans;
except
FAC.RollbackTrans;
Result := false;
end;
finally
vOpenDialog.Free;
end;
end;
#7
5楼的方法好,利用TStringList来处理。
#8
我把数据从数据表写到TXT文件是用以下代码写的,但发现文本文件里一行记录都是连在一起的,怎样把每个数据分开呢?
不然再写回到数据库时,会认为这是一体的,只是一个数据. 提示错误:1gg62008-07-129.365False不是int型。
帮我看看读数据到文本的代码哪里欠妥?
procedure TForm1.Button2Click(Sender: TObject);
var
F1:TextFile;
str:string;
j:integer;
begin
if SaveDialog1.Execute
then
begin
AssignFile(F1,SaveDialog1.FileName);
Rewrite(F1);
with adoquery1 do
begin
close;
sql.Clear;
sql.Add('select * from aa ');
open;
first;
for j:=1 to 20 do
begin
memo1.Lines.Add(adoquery1.fieldbyname('no').AsString+trim(adoquery1.fieldbyname('t1').AsString)+adoquery1.fieldbyname('t2').AsString+adoquery1.fieldbyname('t3').AsString+adoquery1.fieldbyname('t4').AsString+adoquery1.fieldbyname('t5').AsString);
next;
end;
end;
str:= '';
str:= memo1.Lines.Text;
writeln(f1,str);
CloseFile(F1);
showmessage('已完成保存!');
end;
end;
不然再写回到数据库时,会认为这是一体的,只是一个数据. 提示错误:1gg62008-07-129.365False不是int型。
帮我看看读数据到文本的代码哪里欠妥?
procedure TForm1.Button2Click(Sender: TObject);
var
F1:TextFile;
str:string;
j:integer;
begin
if SaveDialog1.Execute
then
begin
AssignFile(F1,SaveDialog1.FileName);
Rewrite(F1);
with adoquery1 do
begin
close;
sql.Clear;
sql.Add('select * from aa ');
open;
first;
for j:=1 to 20 do
begin
memo1.Lines.Add(adoquery1.fieldbyname('no').AsString+trim(adoquery1.fieldbyname('t1').AsString)+adoquery1.fieldbyname('t2').AsString+adoquery1.fieldbyname('t3').AsString+adoquery1.fieldbyname('t4').AsString+adoquery1.fieldbyname('t5').AsString);
next;
end;
end;
str:= '';
str:= memo1.Lines.Text;
writeln(f1,str);
CloseFile(F1);
showmessage('已完成保存!');
end;
end;
#9
memo1.Lines.Add(adoquery1.fieldbyname('no').AsString+trim(adoquery1.fieldbyname('t1').AsString)+adoquery1.fieldbyname('t2').AsString+adoquery1.fieldbyname('t3').AsString+adoquery1.fieldbyname('t4').AsString+adoquery1.fieldbyname('t5').AsString);
你这中间也没有加个分隔符之类的,比如tab或分号
你这中间也没有加个分隔符之类的,比如tab或分号
#10
你最好用INI文件存储数据,然后读出来就是一个一个的了,如果是文本文件还得根据格式一个一个的拆分,麻烦死了!
参考代码:
参考代码:
procedure TForm1.BitBtn1Click(Sender: TObject);
var
SFileName: string;
begin
{将配置文件 参数读出显示在edit}
SFileName := ExtractFilePath(paramstr(0)) + 'MyTest.ini';
if not FileExists(SFileName) then
raise Exception.Create('文件不存在!')
else
begin
Myinifile := TIniFile.Create(SFileName);
edit2.Text := Myinifile.ReadString('小节名一','关键字1','');
edit3.Text := Myinifile.ReadString('小节名一','关键字2','');
edit4.Text := Myinifile.ReadString('小节名二','关键字1','');
myinifile.Free;
end;
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
var
SFileName: string;
begin
{将配置文件 参数读出显示在edit}
SFileName := ExtractFilePath(paramstr(0)) + 'MyTest.ini';
Myinifile := TIniFile.Create(SFileName);
Myinifile.WriteString('小节名一','关键字1',edit2.Text);
Myinifile.WriteString('小节名一','关键字2','关键字2的内容');
Myinifile.WriteString('小节名二','关键字1',edit4.Text);
myinifile.Free;
end;
#11
我用5楼的办法,现在可以写进数据了,但是最后会出一个错,什么问题?
#12
五楼的最后一个
AdoQuery1.Parameters.ParamByName ('v2').Value:=StrToBool(strsLine.String[2]);
改成V6
晕,你不会直接拿过去原封不动的就用了吧
AdoQuery1.Parameters.ParamByName ('v2').Value:=StrToBool(strsLine.String[2]);
改成V6
晕,你不会直接拿过去原封不动的就用了吧
#13
晕,我当然是改好了再用的了。我改好了才用的,这个我还是看的到的啦。
procedure TForm1.Button3Click(Sender: TObject);
var
strs,strsLine:TStringList;
i:integer;
begin
if OpenDialog1.Execute then
begin
strs:=TStringList.Create;
strs.LoadFromFile(OpenDialog1.FileName);
strsLine:=TStringLIst.Create;
for i:=0 to strs.Count-1 do
begin
strsLine.DelimitedText:=strs.Strings[i];
showmessage(strsLine.DelimitedText);
AdoQuery2.Close;
AdoQuery2.sql.Clear;
AdoQuery2.Sql.Text:='insert into bb(no,t1,t2,t3,t4,t5) values(:v1,:v2,:v3,:v4,:v5,:v6)';
AdoQuery2.Parameters.ParamByName('v1').Value:=StrToInt(strsLine.Strings[0]);
AdoQuery2.Parameters.ParamByName('v2').Value:=strsLine.Strings[1];
AdoQuery2.Parameters.ParamByName('v3').Value:=strsLine.Strings[2];
AdoQuery2.Parameters.ParamByName('v4').Value:=StrToDate(strsLine.Strings[3]);
AdoQuery2.Parameters.ParamByName('v5').Value:=StrTofloat(strsLine.Strings[4]);
AdoQuery2.Parameters.ParamByName('v6').Value:=StrToBool(strsLine.Strings[5]);
AdoQuery2.ExecSql;
next;
end;
strsLine.Free;
strs.Free;
end;
showmessage('已完成保存!');
end;
错误提示:list index out of bound(0),数组越界?
procedure TForm1.Button3Click(Sender: TObject);
var
strs,strsLine:TStringList;
i:integer;
begin
if OpenDialog1.Execute then
begin
strs:=TStringList.Create;
strs.LoadFromFile(OpenDialog1.FileName);
strsLine:=TStringLIst.Create;
for i:=0 to strs.Count-1 do
begin
strsLine.DelimitedText:=strs.Strings[i];
showmessage(strsLine.DelimitedText);
AdoQuery2.Close;
AdoQuery2.sql.Clear;
AdoQuery2.Sql.Text:='insert into bb(no,t1,t2,t3,t4,t5) values(:v1,:v2,:v3,:v4,:v5,:v6)';
AdoQuery2.Parameters.ParamByName('v1').Value:=StrToInt(strsLine.Strings[0]);
AdoQuery2.Parameters.ParamByName('v2').Value:=strsLine.Strings[1];
AdoQuery2.Parameters.ParamByName('v3').Value:=strsLine.Strings[2];
AdoQuery2.Parameters.ParamByName('v4').Value:=StrToDate(strsLine.Strings[3]);
AdoQuery2.Parameters.ParamByName('v5').Value:=StrTofloat(strsLine.Strings[4]);
AdoQuery2.Parameters.ParamByName('v6').Value:=StrToBool(strsLine.Strings[5]);
AdoQuery2.ExecSql;
next;
end;
strsLine.Free;
strs.Free;
end;
showmessage('已完成保存!');
end;
错误提示:list index out of bound(0),数组越界?
#14
你文本里大概有违法的语法数据吧,没有严格按照上面的结构?这里没考虑这个异常处理。
#15
OK了,我改好了,现在正常了.
多循环了一次,空循环了一次。
for i:=0 to strs.Count-1 do 改为 for i:=0 to strs.Count-2 do
OK啦~~~~~~
谢谢各位~~~~~~太感谢了。
多循环了一次,空循环了一次。
for i:=0 to strs.Count-1 do 改为 for i:=0 to strs.Count-2 do
OK啦~~~~~~
谢谢各位~~~~~~太感谢了。
#16
不好意思,看来作为女性在编程方面的确有待加强。谢谢各位帮助,还好自己也动了一下小脑。呵~~~~~~~~