我的目的是要实现在DBGRID里把多选的行插入到另一个表里,大家该怎么做?
我这样做代码错在哪里?为什么在提交时总是提示数据集没有打开?(cannot perform this operation on a closed dataset)
////这是选中事件的代码
procedure TProdIdentForm.DBGrid1CellClick(Column: TColumn);
var
I: Integer;
vBook: string;
begin
DBGrid1.DataSource.DataSet.DisableControls;
vBook := DBGrid1.DataSource.DataSet.Book;
try
for I := 0 to DBGrid1.SelectedRows.Count - 1 do
begin
DBGrid1.DataSource.DataSet.Book := DBGrid1.SelectedRows[I];
with DataM.MutiSelectADOQ do
begin
close;
sql.Clear;
sql.Add('insert into item_master ');
sql.Add('select * from prod_master where prod_code=:code ');
parameters.ParamValues['code']:=''''+DBGrid1.DataSource.DataSet.fieldByName('prod_code').AsString+'''';
DataM.MutiSelectADOQ.ExecSQL;
end ;
end;
finally
DBGrid1.DataSource.DataSet.Book := vBook;
DBGrid1.DataSource.DataSet.EnableControls;
end;end;
/////这是提交代码
procedure TProdIdentForm.BitBtn3Click(Sender: TObject);
begin
DataM.ADOConnect.BeginTrans;
try DataM.MutiSelectADOQ.UpdateBatch;
showmessage('OK!');
DataM.ADOConnect.CommitTrans;
except
DataM.ADOConnect.RollbackTrans;
showmessage('Error!');
end;
end;
我这样做代码错在哪里?为什么在提交时总是提示数据集没有打开?(cannot perform this operation on a closed dataset)
////这是选中事件的代码
procedure TProdIdentForm.DBGrid1CellClick(Column: TColumn);
var
I: Integer;
vBook: string;
begin
DBGrid1.DataSource.DataSet.DisableControls;
vBook := DBGrid1.DataSource.DataSet.Book;
try
for I := 0 to DBGrid1.SelectedRows.Count - 1 do
begin
DBGrid1.DataSource.DataSet.Book := DBGrid1.SelectedRows[I];
with DataM.MutiSelectADOQ do
begin
close;
sql.Clear;
sql.Add('insert into item_master ');
sql.Add('select * from prod_master where prod_code=:code ');
parameters.ParamValues['code']:=''''+DBGrid1.DataSource.DataSet.fieldByName('prod_code').AsString+'''';
DataM.MutiSelectADOQ.ExecSQL;
end ;
end;
finally
DBGrid1.DataSource.DataSet.Book := vBook;
DBGrid1.DataSource.DataSet.EnableControls;
end;end;
/////这是提交代码
procedure TProdIdentForm.BitBtn3Click(Sender: TObject);
begin
DataM.ADOConnect.BeginTrans;
try DataM.MutiSelectADOQ.UpdateBatch;
showmessage('OK!');
DataM.ADOConnect.CommitTrans;
except
DataM.ADOConnect.RollbackTrans;
showmessage('Error!');
end;
end;
var i: integer;
strsql: string;
begin
for i:=0 to DBGrid1.SelectedRows.count-1 do
begin
DBGrid1.DataSource.DataSet.GotoBook(pointer(DBGrid1.SelectedRows.Items[i]));
strsql :='insert to table1(v1) values('+DBGrid1.DataSource.DataSet.Fields[0].AsString+')';
adoconnection1.execute(strsql);
end;//...end for
end;
可我要的是在DBGRID的里多选的啊,你的方法只能提交一条啊,不能提交我所选的啊
var
I: Integer;
strsql: string;
begin
DataM.ADOConnect.begintrans;
for i:=0 to DBGrid1.SelectedRows.count-1 do
begin
DBGrid1.DataSource.DataSet.GotoBook(pointer(DBGrid1.SelectedRows.Items[i]));
with DataM.MutiSelectADOQ do
begin
sql.Clear;
sql.Text:='insert into prod_master select * from item_master where item_code='''+DBGrid1.DataSource.DataSet.fieldByName('item_code').AsString+''' and IsProdut=''0''';
//DataM.ADOConnect.execute(strsql);
execsql;
end;
end;
try
DataM.ADOConnect.CommitTrans;
with DataM.PubADOQ do
begin
sql.Clear;
sql.Text:='update prod_master set IsProdut=''1''';
execsql;
end;
application.MessageBox('更新成功!','系统提示',48);
except
DataM.ADOConnect.RollbackTrans;
application.MessageBox('更新失败!','系统提示',16);
end;
end;