起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 287|回复: 8

【搞定】信息调用另一信息下窗体,数据集赋值问题**

[复制链接]
发表于 2007-8-31 16:09:30 | 显示全部楼层 |阅读模式
在信息A中的数据集甲的project_id字段上做onbutonclick,事件的内容为:调用已经做好的通用查询窗体,该窗体在信息B下。在通过数据集赋值的方式将窗体上查询出来的数据(即信息B上数据集乙的当前数据的ID字段的值)赋值给数据集甲的project_ID,代码如下:

procedure TINFOCONTRACTAPPROVE.FIELD_ContractApproveReport_project_idButtonClick(Sender: TObject);
var lINFODIALOGS:TINFODIALOGS;
    lProject_ID:integer;
begin
  //概算项目id选择
  lINFODIALOGS:= TINFODIALOGS.Create(Context);
  lINFODIALOGS.DataSetByID('Project').Open;
  try
   if   lINFODIALOGS.SelectProject(lProject_ID) then
   begin
    if DatasetContractApproveReport.IsEmpty then
      DatasetContractApproveReport.Append
    else DatasetContractApproveReport.Edit;
      DatasetContractApproveReport.FieldByName('project_id').AsInteger:=
        lProject_ID
   end;
  finally
    lINFODIALOGS.Free;
  end;

end;  


结果当我运行功能,点击project_ID字段时,弹出调用的查询窗体,但是无论我选择哪条数据,点击确定后,传回来给数据集甲的数据都是该窗体所属数据集(数据集乙)的第一条记录
回复

使用道具 举报

 楼主| 发表于 2007-8-31 16:10:08 | 显示全部楼层

被调用的信息

被调用的信息

查询窗体.jpg

13.01 KB, 下载次数: 195

回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-8-31 16:11:15 | 显示全部楼层

调用概算选择窗体

调用概算选择窗体,该窗体代码:
unit WINSELPROJECT;

interface

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

type
  TWINSELPROJECT = class(TForm)
    Panel: TPanel;
    DataSetBroker: TDataSetBroker;
    InfoBroker: TInfoBroker;
    ButtonOK: TButton;
    ButtonCancel: TButton;
    ControlBar1: TControlBar;
    DataNavigator1: TDataNavigator;
    Panel1: TPanel;
    PageControl: TPageControl;
    TabSheetTree2: TTabSheet;
    DataTreeList: TDataTreeList;
    DataTreeListID: TDataTreeListColumn;
    DataTreeListNAME: TDataTreeListColumn;
    DataTreeListPROJECT_CLASS: TDataTreeListColumn;
    DataTreeListCONSTRUCTION: TDataTreeListColumn;
    DataTreeListINSTALL: TDataTreeListColumn;
    DataTreeListMACHINE: TDataTreeListColumn;
    DataTreeListOTHER: TDataTreeListColumn;
    DataTreeListSUMCOST: TDataTreeListColumn;
    DataTreeListPARENT_ID: TDataTreeListColumn;
    TabSheetList: TTabSheet;
    DataGrid: TDataGrid;
    DataGridID: TDataGridColumn;
    DataGridNO: TDataGridColumn;
    DataGridNAME: TDataGridColumn;
    DataGridPROJECT_CLASS: TDataGridColumn;
    DataGridCONSTRUCTION: TDataGridColumn;
    DataGridINSTALL: TDataGridColumn;
    DataGridMACHINE: TDataGridColumn;
    DataGridOTHER: TDataGridColumn;
    DataGridSUMCOST: TDataGridColumn;
    DataGridPARENT_ID: TDataGridColumn;
    procedure BizFormShow(Sender: TObject);
    procedure DblClick(Sender: TObject);
    procedure BizFormClose(Sender: TObject; var Action: TCloseAction);
  private
    FUpdating: Boolean;
    FID: Integer;
    procedure BeginUpdate;
    procedure ApplyUpdate;
    procedure CancelUpdate;
  public
    {public declarations}
  end;

implementation

//--------------------------------- 内部函数 -----------------------------------

{ 功能:开始更新
  参数:
  返回:
  说明:进行内部控制
}
procedure TWINSELPROJECT.BeginUpdate;
begin
  if not FUpdating then
  begin
    with DataSetBroker.DataSet do
    begin
      if Active then Refresh else Open;
      FID := FieldByName('id').AsInteger;
    end;
    DataTreeList.FullCollapse;
    FUpdating := True;
  end;
end;

{ 功能:应用更新
  参数:
  返回:
  说明:进行内部控制
}
procedure TWINSELPROJECT.ApplyUpdate;
begin
  if FUpdating then
  begin
    FUpdating := False;
  end;
end;

{ 功能:取消更新
  参数:
  返回:
  说明:进行内部控制
}
procedure TWINSELPROJECT.CancelUpdate;
begin
  if FUpdating then
  begin
    DataSetBroker.DataSet.Locate('id', FID, []);
    FUpdating := False;
  end;
end;

//------------------------------  事件处理函数  --------------------------------

procedure TWINSELPROJECT.BizFormShow(Sender: TObject);
begin
  PageControl.ActivePageIndex := 0;
  BeginUpdate;
end;

procedure TWINSELPROJECT.DblClick(Sender: TObject);
begin
  ModalResult := Business.Forms.Controls.mrOk;
end;

procedure TWINSELPROJECT.BizFormClose(Sender: TObject; var Action: TCloseAction);
begin
  if ModalResult = Business.Forms.Controls.mrOk then
    ApplyUpdate
  else
    CancelUpdate;
end;

end.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-8-31 16:11:55 | 显示全部楼层

调用信息的代码

调用信息的代码:
unit INFODIALOGS;

interface

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

type
  TINFODIALOGS = class(TInfo)
    DataSetProject: TSQLDataSet;
    DataSetContract: TSQLDataSet;
    FIELD_Contract_CONTRACTOR_ID: TUserDataField;
    DataSetStuff: TSQLDataSet;
    FIELD_Stuff_DEPARTMENT_ID: TUserDataField;
    FIELD_Project_PROJECT_CLASS: TUserDataField;
    FIELD_Contract_AmentValue: TExprCalcField;
    FIELD_Contract_AmentResult: TExprCalcField;
    FIELD_Contract_CONTRACT_CATEGORY_ID: TUserDataField;
    FIELD_Project_XMMC: TExprCalcField;
    FIELD_Project_CONSTRUCTION: TUserDataField;
    FIELD_Project_INSTALL: TUserDataField;
    FIELD_Project_MACHINE: TUserDataField;
    FIELD_Project_OTHER: TUserDataField;
    FIELD_Project_SUMCOST: TUserDataField;
    DataSetLendContract: TSQLDataSet;
    FIELD_LendContract_LEND_DEPT_ID: TUserDataField;
    DataSetSubject: TSQLDataSet;
    DataSetContractor: TSQLDataSet;
  private
    {private declarations}
  public
    // 选择概算项目
    function SelectProject: Boolean;  overload;
    // 选择概算项目
    function SelectProject (var AProject_ID: Integer): Boolean;  overload;
    // 选择合同
    function SelectContract: Boolean; overload;
    // 选择合同
    function SelectContract(var AContractID: Integer): Boolean; overload;
    // 选择贷款合同
    function SelectLendContract: Boolean;
    // 选择合同单位(乙方)
    function SelectContractor: Boolean;
    // 选择人员
    function SelectStuff: Boolean;
    // 选择科目
    function SelectSubject: Boolean;
  end;

implementation

//--------------------------------- 内部函数 -----------------------------------

{ 功能:选择概算项目
  参数:
  返回:Boolean, 是否选择
  说明:选择的项目通过访问DataSetProject数据集得到
}
function TINFODIALOGS.SelectProject: Boolean;
begin
  with TWinSelProject.Create(Context) do
  try
    Result := ShowModal = Business.Forms.Controls.mrOk;
  finally
    Free;
  end;
end;
{  功能:选择概算项目
  参数:
  返回:Boolean, 是否选择
  说明:选择的项目通过访问DataSetProject数据集得到
}
function TINFODIALOGS.SelectProject (var AProject_ID: Integer): Boolean;
begin
   with TWinSelProject.Create(Context) do
  try
    Result := ShowModal = Business.Forms.Controls.mrOk;
    AProject_ID :=DataSetProject.FieldByName('id').AsInteger;
  finally
    Free;
  end;
end;
{ 功能:选择合同
  参数:
  返回:Boolean, 是否选择
  说明:选择的合同通过访问DataSetContract数据集得到
}
function TINFODIALOGS.SelectContract: Boolean;
begin
  with TWinSelContract.Create(Context) do
  try
    Result := ShowModal = Business.Forms.Controls.mrOk;
  finally
    Free;
  end;
end;

{ 功能:选择合同
  参数:[in, out] AContractID: Integer,合同默认值
  返回:Boolean, 是否选择
  说明:选择的合同通过访问DataSetContract数据集得到
}
function TINFODIALOGS.SelectContract(var AContractID: Integer): Boolean;
begin
  with TWinSelContract.Create(Context) do
  try
    Result := ShowModal = Business.Forms.Controls.mrOk;
    AContractID := DataSetContract.FieldByName('id').AsInteger;
  finally
    Free;
  end;
end;

{ 功能:选择贷款合同
  参数:
  返回:Boolean, 是否选择
  说明:选择的贷款合同通过访问DataSetLendContract数据集得到
}
function TINFODIALOGS.SelectLendContract: Boolean;
begin
  with TWinSelLendContract.Create(Context) do
  try
    Result := ShowModal = Business.Forms.Controls.mrOk;
  finally
    Free;
  end;
end;

{ 功能:选择合同单位(乙方)
  参数:
  返回:Boolean, 是否选择
  说明:选择的合同单位通过访问DataSetContractor数据集得到
}
function TINFODIALOGS.SelectContractor: Boolean;
begin
  with TWinSelContractor.Create(Context) do
  try
    Result := ShowModal = Business.Forms.Controls.mrOk;
  finally
    Free;
  end;
end;

{ 功能:选择人员
  参数:
  返回:Boolean, 是否选择
  说明:选择的人员通过访问DataSetStuff数据集得到
}
function TINFODIALOGS.SelectStuff: Boolean;
begin
  with TWinSelStuff.Create(Context) do
  try
    Result := ShowModal = Business.Forms.Controls.mrOk;
  finally
    Free;
  end;
end;

{ 功能:选择科目
  参数:
  返回:Boolean, 是否选择
  说明:选择的科目通过访问DataSetSubject数据集得到
}
function TINFODIALOGS.SelectSubject: Boolean;
begin
  with TWinSelSubject.Create(Context) do
  try
    Result := ShowModal = Business.Forms.Controls.mrOk;
  finally
    Free;
  end;
end;

end.
回复 支持 反对

使用道具 举报

发表于 2007-8-31 16:22:49 | 显示全部楼层
这样的东东,肯定只有设置断点跟踪代码了,看你传进去的值是否对了。
回复 支持 反对

使用道具 举报

发表于 2007-8-31 17:01:31 | 显示全部楼层
看一下你的概算选择窗体中的信息代理的引用属性设置的是不是Default,如果不是,改成Default
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-8-31 17:23:12 | 显示全部楼层

雾水

改好了,可以保存数据,但是,我不明白为什么?难道不支持回路ip?????呵呵,请指点。
回复 支持 反对

使用道具 举报

发表于 2007-8-31 17:25:51 | 显示全部楼层
请搜专门的  环境链  的帖子!!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-8-31 17:27:38 | 显示全部楼层
好的,我们加紧学习,非常感谢,结帖。
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-1-15 17:24 , Processed in 0.045617 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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