起步软件技术论坛-X3

 找回密码
 立即注册
搜索
楼主: 新来小职员

写了几个事件后,运行时弹出个错误[问题]**

[复制链接]
发表于 2007-9-13 16:22:06 | 显示全部楼层
楼主在优惠金额改变时写没写代码进行赋值?不行的话就在优惠金额改变时也进行与需求相同的赋值,优惠后金额不就留住了么
回复 支持 反对

使用道具 举报

发表于 2007-9-13 16:27:16 | 显示全部楼层
合计金额 - 优惠金额 = 优惠后金额 是这样吧。
那么只有“合计金额”和“ 优惠金额”改变时才去修改“优惠后金额”,这样是最合理的,你说不管哪个字段修改,都无所谓,那随便你吧,这样做肯定是不合理的。

7楼的现象不可能,除非 HJJE 不是DataSetBroker2 中的字段,是这样吗?如果是当然不会了,因为条件永远为假。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-9-13 16:37:17 | 显示全部楼层
7楼的现象不可能,除非 HJJE 不是DataSetBroker2 中的字段,是这样吗?如果是当然不会了,因为条件永远为假。
HJJE怎么可能不是DataSetBroker2中的字段,如果不是怎么能合计出合计金额?合计金额做为临时字段是不会立刻就将合计值显示出来的,而是在新增记录或保存时才显示或更新,仅仅用合计金额做判断能否及时将优惠后金额显示出来,我就不知道了,但保险的方法就是让大部分字段改变时优惠后金额都能及时的显示出来。

做法是否合理这以后还可以在修改,但是运行时出现BUG就必须得马上解决,现在出现这样的BUG才是让我头疼的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-9-13 16:50:20 | 显示全部楼层
回11楼,非常感谢你的建议,但是我现在的问题就出在“优惠金额”写相同的赋值代码上,两个数据集写相同代码也会出现一楼错。
回复 支持 反对

使用道具 举报

发表于 2007-9-13 16:56:57 | 显示全部楼层
应该是会报错的 数据集2 数据改变时 去改变数据集1的数据 数据集1数据改变时 又去改变数据集2的数据 这不就死了么? 你就在需要改变时再改变吧 如果像你写的这样每个字段改变都执行代码的话我觉得挺不合理的 如果没有想要的结果 可以试试在信息的FieldChange里面写一下代码 我是每次都在这里写
其实你这个需求不难实现
回复 支持 反对

使用道具 举报

发表于 2007-9-13 16:59:50 | 显示全部楼层
能把你的代码帖全了吗?别截图,直接帖代码。我看看。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-9-13 17:06:12 | 显示全部楼层
unit XSDSP;

interface

uses
  Business.System, Business.Model, Business.Forms, Business.Data,
  Business.Model.Flow;

type
  TXSDSP = class(TForm)
    FuncBroker: TFuncBroker;
    InfoBrokerXSDSPXX: TInfoBroker;
    ControlBar: TControlBar;
    DataNavigator: TDataNavigator;
    DocViewBar: TDocViewBar;
    Panel: TPanel;
    DocViewXSDSPXX_XSDSPYW: TDocView;
    DataSetBroker1: TDataSetBroker;
    DataSetBroker2: TDataSetBroker;
    FlowBroker1: TFlowBroker;
    Query1: TQuery;
    procedure DataNavigatorAfterAction(Sender: TObject);
    procedure FlowBroker1AfterFlowOut(Sender: TObject; Command: TFlowOutCommand);
    procedure DataSetBroker2DataChange(Sender: TObject; Field: TDataField);
    procedure DataSetBroker1UpdateData(Sender: TObject);
    procedure DataSetBroker1DataChange(Sender: TObject; Field: TDataField);
  private
    {private declarations}
  public
    {public declarations}
  end;

implementation


procedure TXSDSP.DataNavigatorAfterAction(Sender: TObject);
//var Query1:TQuery;
//    na,mon:string;
begin
     {na:=Self.DataSetBroker1.DataSet.FieldByName('XSDDFKZH').AsString.Trim();
     mon:=Self.DataSetBroker1.DataSet.FieldByName('XSDDFKJE').AsString.Trim();
     Query1.Close;
     Query1.ConnectionString := 'DATABASEURL=Biz:\JXC_GJP_\SJK.Database';
     Query1.CommandText := 'update KMXX set KMXX_BHJE=(SELECT isnull(KMXX_BHJE,0) FROM KMXX  where KMXX_KMQM='''+ na +''')+ '+ mon +' where KMXX_KMQM=''' + na + '''' ;
     Query1.Execute;}
end;

procedure TXSDSP.FlowBroker1AfterFlowOut(Sender: TObject; Command: TFlowOutCommand);
var
    na:string;
    mon:integer;
begin
     na:=Self.DataSetBroker1.DataSet.FieldByName('XSDDFKZH').AsString.Trim();
     mon:=Self.DataSetBroker1.DataSet.FieldByName('XSDDFKJE').AsInteger;
     if (na<>'') and (mon<>'') then
     begin
     Query1.Close;
     Query1.ConnectionString := 'DATABASEURL=Biz:\JXC_GJP_\SJK.Database';
     Query1.CommandText := 'update KMXX set KMXX_BHJE=(SELECT isnull(KMXX_BHJE,0) FROM KMXX where KMXX_KMQM='''+ na +''')+ '+ SysUtils.IntToStr(mon) +' where KMXX_KMQM=''' + na + '''';
     Query1.Execute;
     end;
end;

procedure TXSDSP.DataSetBroker2DataChange(Sender: TObject; Field: TDataField);
begin
     if (Field <> nil) and (Field.FieldName = 'HJJE') then
     begin
     DataSetBroker1.DataSet.Edit;
     //DataSetBroker2.DataSet.Edit;
     DataSetBroker1.DataSet.FieldByName('XSDDYHHJE').AsInteger:=DataSetBroker2.DataSet.FieldByName('HJJE').AsInteger-DataSetBroker1.DataSet.FieldByName('XSDDYHJE').AsInteger;
     //DataSetBroker1.DataSet.Open;
     end;
end;

procedure TXSDSP.DataSetBroker1UpdateData(Sender: TObject);
begin
     //DataSetBroker2.DataSet.Edit;
     //DataSetBroker1.DataSet.Edit;
     //DataSetBroker1.DataSet.FieldByName('XSDDYHHJE').AsInteger:=DataSetBroker2.DataSet.FieldByName('HJJE').AsInteger-DataSetBroker1.DataSet.FieldByName('XSDDYHJE').AsInteger;
end;

procedure TXSDSP.DataSetBroker1DataChange(Sender: TObject; Field: TDataField);
begin
     if (Field <> nil) and (Field.FieldName = 'HJJE') then
     begin
     DataSetBroker1.DataSet.Edit;
     //DataSetBroker2.DataSet.Edit;
     DataSetBroker1.DataSet.FieldByName('XSDDYHHJE').AsInteger:=DataSetBroker2.DataSet.FieldByName('HJJE').AsInteger-DataSetBroker1.DataSet.FieldByName('XSDDYHJE').AsInteger;
     //DataSetBroker1.DataSet.Open;
     end;
end;

end.
这样写优惠金额变时,优惠后金额也会消失.
回复 支持 反对

使用道具 举报

发表于 2007-9-13 17:14:12 | 显示全部楼层
越来越晕了 HJJE这个字段到底是谁的啊 怎么两个DataChange事件都拿他做条件啊 晕
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-9-13 17:14:16 | 显示全部楼层
回15楼,其实改变的字段就是主数据集的优惠后金额,其他字段就只是取值,
搞了这么多错,让各位都把注意里集中在除错中了,其实我要解决的是当改变优惠金额时优惠后金额值消失的问题,因为我一开始认为是因为优惠金额改变时,没有给优惠金额赋值所以就在优惠金额字段所在的数据集写代码,这才引发错误的出现,只要有办法让代码正确运行,我想应该可以解决吧。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-9-13 17:18:14 | 显示全部楼层
回18楼
不好意思,为了还原错误代码,我只是将上面代码复制下来,但是忘记改了.应该是这样
procedure TXSDSP.DataSetBroker1DataChange(Sender: TObject; Field: TDataField);
begin
     if (Field <> nil) and (Field.FieldName = 'XSDDYHJE') then
     begin
     DataSetBroker1.DataSet.Edit;
     //DataSetBroker2.DataSet.Edit;
     DataSetBroker1.DataSet.FieldByName('XSDDYHHJE').AsInteger:=DataSetBroker2.DataSet.FieldByName('HJJE').AsInteger-DataSetBroker1.DataSet.FieldByName('XSDDYHJE').AsInteger;
     //DataSetBroker1.DataSet.Open;
     end;
end;
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-6-27 23:22 , Processed in 0.041914 second(s), 14 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表