我用ADOQuery查询表a ,并将表a放连到dbgrid中,然后在dbgrid中添加记录后在ADOQury.edit后用Aupdatebatch或post进行保存时总是提示‘Insuficient base table information for updating or refreshing’,如何解决?请各位帮助,谢谢!
procedure Twsbzform.bzbbtnClick(Sender: TObject); //创建表格 var bm,sqlstr:string; vtblf:boolean; begin if messagedlg('创建卫生标准表吗?',mtInformation,[mbYes,mbNo],0)=mrYes then begin tembm:=wsbzform.ADODataSet1.FieldValues['wb_dh']; vtblf:=wsbzform.ADODataSet1.FieldValues['wb_table']; bm:=wbdhconve(tembm); if vtblf =true then begin Application.MessageBox('要创建的表格已存在!','提示信息',MB_OK);; Exit; end else begin sqlstr:='create table'+' '+bm+'(wb_xm text(40) NOT NULL, wb_fh text(2) NOT NULL, wb_zb text(80) NOT NULL, wb_bz text(80) NOT NULL )'; wsbzform.ADOQuery1.Close; wsbzform.ADOQuery1.SQL.Clear; wsbzform.ADOQuery1.SQL.Add(sqlstr); try wsbzform.ADOQuery1.ExecSQL; wsbzform.ADODataSet1.Edit; wsbzform.ADODataSet1.FieldByName('wb_table').AsBoolean:=true; wsbzform.ADODataSet1.UpdateBatch; Application.MessageBox('创建表格成功!','提示信息',MB_OK); except Application.MessageBox('创建表格失败!','提示信息',MB_OK); Exit; end; end; end; end;procedure Twsbzform.Button1Click(Sender: TObject); //选择表格 var vbm1:widestring; begin tembm:=wsbzform.ADODataSet1.FieldValues['wb_dh']; vbm1:=wbdhconve(tembm); wsbzform.ADOQuery2.Close; wsbzform.ADOQuery2.SQL.Clear; wsbzform.ADOQuery2.SQL.Add('select*from'+' '+vbm1 ); wsbzform.ADOQuery2.Open; wsbzform.DataSource2.DataSet:=wsbzform.ADOQuery2; wsbzform.DBGrid2.DataSource:=wsbzform.DataSource2; WSBZFORM.DBNavigator1.DataSource:=WSBZFORM.DataSource2; end;procedure Twsbzform.btn1Click(Sender: TObject); //添加记录 begin with wsbzform do begin btn1.Enabled:=false; btn2.Enabled:=false; btn3.Enabled:=false; btn4.Enabled:=true; btn5.Enabled:=true; DBNavigator1.Enabled:=false; ADOQuery2.Edit; ADOQuery2.Append; end; end;procedure Twsbzform.btn5Click(Sender: TObject); //取消 begin with wsbzform do begin btn1.Enabled:=true; btn2.Enabled:=true; btn3.Enabled:=true; btn4.Enabled:=false; btn5.Enabled:=false; DBNavigator1.Enabled:=true; ADOQuery2.CancelBatch(arAll); end; end;end.
对了上面代码漏了‘保存’现贴上。 procedure Twsbzform.btn4Click(Sender: TObject); //保存记录 begin with wsbzform do begin btn1.Enabled:=true; btn2.Enabled:=true; btn3.Enabled:=true; btn4.Enabled:=false; btn5.Enabled:=false; DBNavigator1.Enabled:=true; ADOQuery2.UpdateBatch(arAll);
ADOQuery.UpdateBatch(arall);
ADOQuery.Append;
...
ADOQuery.Post;
ADOQuery.UpdateBatch
dbgrid中添加记录后在ADOQury.edit后??
应该是先ADOQury.edit,再在dbgrid中添加记录,然后POST,就OK了
ADOQuery2.CursorType:=Ctkeyset;
ADOQuery2.LockTYPE:=ltBatchOptimistic;
procedure Twsbzform.bzbbtnClick(Sender: TObject); //创建表格
var
bm,sqlstr:string;
vtblf:boolean;
begin
if messagedlg('创建卫生标准表吗?',mtInformation,[mbYes,mbNo],0)=mrYes then
begin
tembm:=wsbzform.ADODataSet1.FieldValues['wb_dh'];
vtblf:=wsbzform.ADODataSet1.FieldValues['wb_table'];
bm:=wbdhconve(tembm);
if vtblf =true then
begin
Application.MessageBox('要创建的表格已存在!','提示信息',MB_OK);;
Exit;
end
else
begin
sqlstr:='create table'+' '+bm+'(wb_xm text(40) NOT NULL, wb_fh text(2) NOT NULL, wb_zb text(80) NOT NULL, wb_bz text(80) NOT NULL )';
wsbzform.ADOQuery1.Close;
wsbzform.ADOQuery1.SQL.Clear;
wsbzform.ADOQuery1.SQL.Add(sqlstr);
try
wsbzform.ADOQuery1.ExecSQL;
wsbzform.ADODataSet1.Edit;
wsbzform.ADODataSet1.FieldByName('wb_table').AsBoolean:=true;
wsbzform.ADODataSet1.UpdateBatch;
Application.MessageBox('创建表格成功!','提示信息',MB_OK);
except
Application.MessageBox('创建表格失败!','提示信息',MB_OK);
Exit;
end;
end;
end;
end;procedure Twsbzform.Button1Click(Sender: TObject); //选择表格
var
vbm1:widestring;
begin
tembm:=wsbzform.ADODataSet1.FieldValues['wb_dh'];
vbm1:=wbdhconve(tembm);
wsbzform.ADOQuery2.Close;
wsbzform.ADOQuery2.SQL.Clear;
wsbzform.ADOQuery2.SQL.Add('select*from'+' '+vbm1 );
wsbzform.ADOQuery2.Open;
wsbzform.DataSource2.DataSet:=wsbzform.ADOQuery2;
wsbzform.DBGrid2.DataSource:=wsbzform.DataSource2;
WSBZFORM.DBNavigator1.DataSource:=WSBZFORM.DataSource2;
end;procedure Twsbzform.btn1Click(Sender: TObject); //添加记录
begin
with wsbzform do
begin
btn1.Enabled:=false;
btn2.Enabled:=false;
btn3.Enabled:=false;
btn4.Enabled:=true;
btn5.Enabled:=true;
DBNavigator1.Enabled:=false;
ADOQuery2.Edit;
ADOQuery2.Append;
end;
end;procedure Twsbzform.btn5Click(Sender: TObject); //取消
begin
with wsbzform do
begin
btn1.Enabled:=true;
btn2.Enabled:=true;
btn3.Enabled:=true;
btn4.Enabled:=false;
btn5.Enabled:=false;
DBNavigator1.Enabled:=true;
ADOQuery2.CancelBatch(arAll);
end;
end;end.
ADOQuery2.Append;换一下位置: ADOQuery2.Append;
ADOQuery2.Edit;呵呵,最好你单步跟踪试试
ADOQuery2.Updatebatch(arAll);时出错误提示。
wsbzform.ADODataSet1.Edit;
wsbzform.ADOQuery1.ExecSQL;
procedure Twsbzform.btn4Click(Sender: TObject); //保存记录
begin
with wsbzform do
begin
btn1.Enabled:=true;
btn2.Enabled:=true;
btn3.Enabled:=true;
btn4.Enabled:=false;
btn5.Enabled:=false;
DBNavigator1.Enabled:=true;
ADOQuery2.UpdateBatch(arAll);
ADOQuery2.Append;
不知道为什么你要写两个,添加直接用ADOQuery2.Append;
不就可以了,为什么要ADOQuery2.Edit;???