感谢大哥们的持续帮忙,终于程序运行通过,但是调试上出了问题~~~
with ADOQueryID do
try
begin
close;
sql.Clear;
sql.add('select max(ID) as ID from spectrum ');
// prepared;
Open;
if ADOQueryID.RecordCount>1 then
maxID:=ADOQueryID.Fields.Fields[0].AsInteger+1
else
maxID:=1;
ADOQueryID.close;
ExecSQL;
end; with ADOQuery1 do
begin
close;
sql.Clear;
sql.add('insert into spectrum (ID,Wavenumber,Intensity) values(:maxID,:arrwave[i],:arrintensity[i])');
for i:=0 to 2090 do
begin
try
begin
// ADOQuery1.Open;
ADOConnection1.BeginTrans;
append;----------------------------------------------------运行完这句出错~~
fieldbyname('ID').value:=maxID;
fieldbyname('Wavenumber').value:=arrwave[i];
fieldbyname('Intensity').value:=arrintensity[i];
post;
next;
ADOConnection1.CommitTrans;
ExecSQL;
showmessage('done');
end;
except
begin
showmessage('同步出错');
ADOConnection1.RollbackTrans;
end;
end;
end;
end;
finally;
end;
end;
with ADOQueryID do
try
begin
close;
sql.Clear;
sql.add('select max(ID) as ID from spectrum ');
// prepared;
Open;
if ADOQueryID.RecordCount>1 then
maxID:=ADOQueryID.Fields.Fields[0].AsInteger+1
else
maxID:=1;
ADOQueryID.close;
ExecSQL;
end; with ADOQuery1 do
begin
close;
sql.Clear;
sql.add('insert into spectrum (ID,Wavenumber,Intensity) values(:maxID,:arrwave[i],:arrintensity[i])');
for i:=0 to 2090 do
begin
try
begin
// ADOQuery1.Open;
ADOConnection1.BeginTrans;
append;----------------------------------------------------运行完这句出错~~
fieldbyname('ID').value:=maxID;
fieldbyname('Wavenumber').value:=arrwave[i];
fieldbyname('Intensity').value:=arrintensity[i];
post;
next;
ADOConnection1.CommitTrans;
ExecSQL;
showmessage('done');
end;
except
begin
showmessage('同步出错');
ADOConnection1.RollbackTrans;
end;
end;
end;
end;
finally;
end;
end;
解决方案 »
- 关于定时器运行一段时间后,程序反应很慢的问题。
- 马上给分如何让dbgrid没有竖直滚动条
- 如何把数据库的操作类放到一个单独的单元中?
- 小弟在用fsMDIForm和fsMDIChild时遇到一个小问题? 帮忙看下呀!
- Canvas dos not Allow Drawing 是什么错误,怎么解决?
- 请问如何更改bitbtn按钮的背景颜色?(急)
- 嘿嘿,不好意思。
- 有没有功能和DBGrid相同的控件,但要漂亮的。
- 调用CHM帮助文件时,如何定位对应功能的帮助页?
- 我要成批的拷贝文件,想加一个TProgressBar进度条,但我不知道怎么样控制进度条?
- delphi中如何添加realaudio控件,请高手指教?
- 求修改EXE文件内容的代码
begin
close;
sql.Clear;
sql.add('insert into spectrum (ID,Wavenumber,Intensity) values(:maxID,:arrwave[i],:arrintensity[i])');
for i:=0 to 2090 do
begin
try
begin
// ADOQuery1.Open;
ADOConnection1.BeginTrans;
append;----------------------------------------------------运行完这句出错~~
//前面你已经用insert into 语句了,没有必要再Append,把append去掉
fieldbyname('ID').value:=maxID;
fieldbyname('Wavenumber').value:=arrwave[i];
fieldbyname('Intensity').value:=arrintensity[i];
post; //去掉
next;
ADOConnection1.CommitTrans;
ExecSQL;
showmessage('done');
end;
except
begin
showmessage('同步出错');
ADOConnection1.RollbackTrans;
end;
end;
end;
end; ADOQuery1要先打开才能编辑的
begin
close;
sql.Clear;
sql.add('insert into spectrum (ID,Wavenumber,Intensity) values(:maxID,:arrwave[i],:arrintensity[i])');
for i:=0 to 2090 do
begin
try
begin
// ADOQuery1.Open;
ADOConnection1.BeginTrans;
append;----------------------------------------------------运行完这句出错~~
前面你已经用insert into 语句了,没有必要再Append,把append去掉
fieldbyname('ID').value:=maxID;
fieldbyname('Wavenumber').value:=arrwave[i];
fieldbyname('Intensity').value:=arrintensity[i];
post; 去掉
next;
ADOConnection1.CommitTrans;
ExecSQL;
showmessage('done');
end;
except
begin
showmessage('同步出错');
ADOConnection1.RollbackTrans;
end;
end;
end;
end;
ADOConnection1.BeginTrans;
with ADOQuery1 do
begin
close;
sql.Clear;
sql.add('insert into spectrum (ID,Wavenumber,Intensity) values(:maxID,:arrwave[i],:arrintensity[i])');
for i:=0 to 2090 do
begin
try
begin
// ADOQuery1.Open;
//append;----------------------------------------------------运行完这句出错~~
fieldbyname('ID').value:=maxID;
fieldbyname('Wavenumber').value:=arrwave[i];
fieldbyname('Intensity').value:=arrintensity[i];
//post;
next;
//showmessage('done'); //不要在这提示,要不会出现2000多个对话框
end;
except
begin
showmessage('同步出错');
ADOConnection1.RollbackTrans;
end;
end;
ExecSQL;
end;
ADOConnection1.CommitTrans;
end;
Open;//-----------------------
for i:=0 to 2090 do
begin
try
begin
append;---------------------------
fieldbyname('ID').value:=maxID;
fieldbyname('Wavenumber').value:=arrwave[i];
fieldbyname('Intensity').value:=arrintensity[i];
next;
按照你的修改了在执行完open;后出现错误: 索引或主关键字不能包含一个空(null)值~~~
ADOConnection1.BeginTrans;
with ADOQuery1 do
begin
close;
sql.Clear;
sql.add('insert into spectrum (ID,Wavenumber,Intensity) values(:maxID,:arrwave[i],:arrintensity[i])');
for i:=0 to 2090 do
begin
try
begin
// ADOQuery1.Open;
//append;----------------------------------------------------运行完这句出错~~
Parameters.ParamByName('ID').Value:=maxID;//fieldbyname('ID').value:=maxID; 修改此处
Parameters.ParamByName('Wavenumber').Value:=arrwave[i];//fieldbyname('Wavenumber').value:=arrwave[i]; 修改此处
Parameters.ParamByName('Intensity').Value:=arrintensity[i]//fieldbyname('Intensity').value:=arrintensity[i]; 修改此处
//post;
next;
//showmessage('done'); //不要在这提示,要不会出现2000多个对话框
end;
except
begin
showmessage('同步出错');
ADOConnection1.RollbackTrans;
end;
end;
ExecSQL;
end;
ADOConnection1.CommitTrans;
end;
var
I :Integer;
begin
ADOConnection1.Open;
ADOConnection1.BeginTrans;
try
with ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('select top 0 * from test');//做的一个小例子,你不要写成insert into 这样,要不没有办法保存多条记录,先把ADOQuery1的//LockType属性设置为ltBatchOptimistic
Open;
for I :=0 to 3 do
begin
Append;
FieldByName('StudentID').AsString :='111';
FieldByName('ClassID').AsString :='222';
end;
end;
ADOQuery1.Post;
ADOQuery1.UpdateBatch();
ADOConnection1.CommitTrans;
except
if ADOConnection1.InTransaction then ADOConnection1.RollbackTrans;
end;
with ADOQueryID do
try
begin
close;
sql.Clear;
sql.add('select max(ID) as ID from spectrum ');
// prepared;
Open;
if ADOQueryID.RecordCount>1 then
maxID:=ADOQueryID.Fields.Fields[0].AsInteger+1
else
maxID:=1;
ADOQueryID.close;
ExecSQL;
end; with ADOQuery1 do
begin
close;
sql.text := 'select * from spectrum where 1=2';
open;
for i:=0 to 2090 do
begin
try
ADOConnection1.BeginTrans;
append;
fieldbyname('ID').value:= maxID;
fieldbyname('Wavenumber').value:=arrwave[i];
fieldbyname('Intensity').value:=arrintensity[i];
post;
next;
ADOConnection1.CommitTrans;
except
begin
showmessage('同步出错');
ADOConnection1.RollbackTrans;
end;
end;
end;
showmessage('Done');
end;
finally;
end;
end;這是操作數據集的提交方法
ADOQuery1.Edit;
我按照这个运行了一下,但是发现数据没有写入到access数据表中~~
with ADOQueryID do
try
begin
close;
sql.Clear;
sql.add('select max(ID) as ID from spectrum ');
// prepared;
Open;
if ADOQueryID.RecordCount>1 then
maxID:=ADOQueryID.Fields.Fields[0].AsInteger+1
else
maxID:=1;
ADOQueryID.close;
ExecSQL;
end; with ADOQuery1 do
begin
close;
sql.text := 'select * from spectrum where 1=2';
open;
ADOConnection1.BeginTrans;
for i:=0 to 2090 do
begin
try
append;
fieldbyname('ID').value:= maxID;
fieldbyname('Wavenumber').value:=arrwave[i];
fieldbyname('Intensity').value:=arrintensity[i];
post;
except
begin
showmessage('同步出错');
ADOConnection1.RollbackTrans;
Abort;
end;
end;
end;
ADOConnection1.CommitTrans;
showmessage('Done');
end;
finally;
end;
end;