cann't perform this operation on a closed dataset(200分)

  • 主题发起人 主题发起人 rumble
  • 开始时间 开始时间
R

rumble

Unregistered / Unconfirmed
GUEST, unregistred user!
上面的错误困扰小弟多日,望大侠解救


数据库paradox7+Tquery
再一个form的创建事件中有
Query_B1.sql.Clear;
Query_b1.sql.Add('select * from B1 ');
Query_B1.Active := true;
第一次创建时执行上面的代码正常
然后关掉这个form(已释放掉),再次创建这个form并执行上述代码时
出现上面的错误
 
好像不是这几句代码出的错!
Query_B1.Close;
Query_B1.sql.Clear;
Query_b1.sql.Add('select * from B1');
Query_B1.Open;
 
把你的代码贴出来看看!
 
你的query_b1的空间是放置在本form中吗?建议在前面添加
query_b1.close
 
procedure TCpck_Form.FormCreate(Sender: TObject);
var
i : integer;
sTemp : string;
begin
with DM do
begin
Query_B1.Active := false;
Query_B1.sql.Clear;
Query_b1.sql.Add('select * from B1 ');
for i:=0 to TopMainForm.QueryCondition.Count-1 do
begin
sTemp := TopMainForm.QueryCondition.Strings;
Query_B1.sql.Add(sTemp);
end;
Query_B1.Active := true;
end;

 
你在窗体释放之前最好把query close
 
上面几个方法都试过了,都不行的
 
你最好先把SQL语句拼接好后再用query_b1.sql.add()
 
把那些代码从 OnCreate 移到 OnShow 事件去
 
找到错误所在,但不会解决
在与Query_B1相连的几个DBEdit地onchange事件中添加了以下事件,所以在每次Query_B1
激活或上一条记录和下一条记录都会触发这个事件,注释掉这部分代码就没事了



with Dm.Query_B1 do
begin
if state<>dsEDit then
edit;
case TDbEdit(Sender).tag of
1:begin
FieldByName('收入合计').AsFloat := FieldByName('自行出口').AsFloat+
FieldByName('代理出口').AsFloat+
FieldByName('其他收入').AsFloat ;
end;
2:begin
FieldByName('支出合计').AsFloat := FieldByName('利润分配').AsFloat +
FieldByName('进口用汇').AsFloat +
FieldByName('工资').AsFloat +
FieldByName('外事经费').AsFloat +
FieldByName('贷款本息').AsFloat +
FieldByName('其他支出').AsFloat;
end;
3:begin
FieldByName('差额').AsFloat := FieldByName('收入合计').AsFloat-
FieldByName('支出合计').AsFloat;
end;
4:begin
FieldByName('外汇收支结余').AsFloat :=FieldByName('差额').AsFloat;
end;
5,7,8,9:begin
if FieldByName('商品销售收入').AsFloat <> 0 then
FieldByName('实际出口比例').AsFloat := (FieldByName('出口销售收入').AsFloat/
FieldByName('商品销售收入').AsFloat)*100;
if FieldByName('商品销售收入').AsFloat <> 0 then
FieldByName('销售利润率').AsFloat := (FieldByName('利润总额').AsFloat/
FieldByName('商品销售收入').AsFloat)*100;
if FieldByName('商品销售收入').AsFloat <> 0 then
FieldByName('费用水平').AsFloat := (FieldByName('费用总额').AsFloat/
FieldByName('商品销售收入').AsFloat)*100;
if FieldByName('净资产').AsFloat <> 0 then
FieldByName('净资产收益率').AsFloat := (FieldByName('利润总额').AsFloat/
FieldByName('净资产').AsFloat)*100;
end;
6:begin
if FieldByName('注册资本').AsFloat <> 0 then
FieldByName('注资比例').AsFloat := (FieldByName('实收资本').AsFloat/
FieldByName('注册资本').AsFloat)*100;
end;
end;
end ;
 
with Dm.Query_B1 do
begin
<font color = #ff0000><strong>if not Active then Exit;</font></strong>
if state<>dsEDit then
edit;
 
同意BakuBaKu,
或者
...
if not Active then Open;
if state<>dsEdit then
edit;
.....
 
请尽快结束你的帖子
 
是不是起用了传输过程,或rollback、commit之类的东西,
这个问题好象在上诉过程中database的intransate为false时会激发
 
先Query_B1.Close; 然后再更改其参数
 
多人接受答案了。
 
后退
顶部