我的form2里有一个DBGRID1和删除的按钮
点删除按钮就可以把DBGRID1的指定记录(就是根据我存储过程的条件)删除
但指能删除一次第二次就报错
我的代码如下
begin
if messagedlg('确定要删除'+dbgrid1.fields[2].asstring+'吗?',mtconfirmation,[mbYes,mbNo],0)=mryes then
begin
with dataform.StoredProc6 do
begin
close;
unprepare;
parambyname('@样本控制号').Value:=dbgrid1.Fields[0].AsString;
{执行的这句是就报错:'Access violation at address 004bf77 in module 'project1.exe'.read of address 00000000'}
prepare;
execproc;
end;
dataform.StoredProc6.Close;
dataform.StoredProc6.Open;
dbgrid1.DataSource:=dataform.DataSource10;
end;
end;
先谢谢了,对了,我是用BDE连的,datafrom是数据模块.
点删除按钮就可以把DBGRID1的指定记录(就是根据我存储过程的条件)删除
但指能删除一次第二次就报错
我的代码如下
begin
if messagedlg('确定要删除'+dbgrid1.fields[2].asstring+'吗?',mtconfirmation,[mbYes,mbNo],0)=mryes then
begin
with dataform.StoredProc6 do
begin
close;
unprepare;
parambyname('@样本控制号').Value:=dbgrid1.Fields[0].AsString;
{执行的这句是就报错:'Access violation at address 004bf77 in module 'project1.exe'.read of address 00000000'}
prepare;
execproc;
end;
dataform.StoredProc6.Close;
dataform.StoredProc6.Open;
dbgrid1.DataSource:=dataform.DataSource10;
end;
end;
先谢谢了,对了,我是用BDE连的,datafrom是数据模块.
解决方案 »
- 如何取得一个对象的成员函数地址
- DBLookupComboBox 问题!!!!!!
- 动态创建的TABSHEET和STRINGGRID,怎么样判别该窗体内有该控件,怎样释放?
- 关于日期的一个问题
- 有关webbrowse无法访问本地机器上网页的问题~~
- 几种开发语言的结合
- WaitForSingleObject 与TTimer定时器的问题
- 请问用delphi开发的游戏中有.map类型的文件,这个文件是地图文件,它是怎么做出来的?(能解释一下吗?)
- 怎么把TJPEGImage中的图片调入canvas中编辑后再由TJPEGImage保存成jpeg
- 用delphi调用execl,如何打开一个已存在的execl文件?有分
- 如何对DBGRID控件(和TQuery相连)进行缓存更新?
- 一个简单但我不会的问题,如何能获得表中更新数据
dataform.StoredProc6.Close;
dataform.StoredProc6.Open;
这2句是否应该改成你的查询控件,不应该是执行存储过程的控件啊!
大侠:写具体点好吗?
把大概的代码写上好吗?
to lincanwen(密码错误)
查询控件我没有啊
dataform.StoredProc6.Open;
这2句应该改成:
dataform.adoquery1.Close;
dataform.adoquery1.Open;
//其中Adoquery1是你的dataform.DataSource10的DataSet属性中设置的控件
我在后面用接着用dbgrid1.DataSource.DataSet.Close;
dbgrid1.DataSource.DataSet.Open;
或者是dbgrid1.Refresh;还是会在那报错
那DBGRID的内容怎么刷新呢?不好意思啊,我很菜的
if messagedlg('确定要删除'+dbgrid1.fields[2].asstring+'吗?',mtconfirmation,[mbYes,mbNo],0)=mryes then
begin
with dataform.StoredProc6 do
begin
close;
unprepare;
parambyname('@样本控制号').Value:=dbgrid1.Fields[0].AsString;
{执行的这句是就报错:'Access violation at address 004bf77 in module 'project1.exe'.read of address 00000000'}
prepare;
execproc;
end;
dataform.StoredProc6.Close;
dataform.StoredProc6.Open;
dbgrid1.DataSource:=dataform.DataSource10;
end;
end;//不是很清楚的問題:你的控件StoredProc6的作用是什麼?
如果是執行刪除功能:Execproc就可以了,為何後面還要來個Close與Open????
如果是執委檢索數據功能:Open就得了,為何上面又Execproc??如果象這樣的功能實現是不會有問題的.
with dataform.StoredProc6 do
begin
close;
unprepare;
parambyname('@样本控制号').AsString:=dbgrid1.Fields[0].AsString;
prepare;
execproc;
end;
我覺得問題的關鍵在於你的控件StoredProc6在使用時所實現的功能目的不明確.
加入了参数
我不知道怎样刷新顾DBGRID?不好意思啊,我很菜的
我现在的问题是
我可以删除一次
但要删除第二次就不行了
好像是刷新DBGRID的问题
if messagedlg('确定要删除'+dbgrid1.fields[2].asstring+'吗?',mtconfirmation,[mbYes,mbNo],0)=mryes then
begin
with dataform.StoredProc6 do
begin
close;
unprepare;
parambyname('@样本控制号').Value:=dbgrid1.Fields[0].AsString;
{执行的这句是就报错:'Access violation at address 004bf77 in module 'project1.exe'.read of address 00000000'}
prepare;
execproc;
end;
//去掉刷新
dbgrid1.DataSource:=dataform.DataSource10;
//你是想刷新grid1吗?那DataSource10的数据原是什么???????
end;
end;
dbgrid1.DataSource:=dataform.DataSource10;
//你是想刷新grid1吗?那DataSource10的数据原是什么???????
end;
end;数据源是删除的存储过程 StoredProc6
过程也分开!!!!!!!!!!!!!!!!!!
create proce 名
@flag int
as
if @flag=1
del...
else
select..
begin
if messagedlg('确定要删除'+dbgrid1.fields[2].asstring+'吗?',mtconfirmation,[mbYes,mbNo],0)=mryes then
begin
with dataform.StoredProc6 do
begin
close;
unprepare;
parambyname('@样本控制号').Value:=dbgrid1.Fields[0].AsString;
prepare;
execproc;
end;
///另一个专门用来显示的storedproc刷新
dataform.StoredProc7.close;
dataform.StoredProc7.open;
///
end;
end;