FormOrder.pas
上传用户:etonglee
上传日期:2014-03-01
资源大小:698k
文件大小:9k
源码类别:

Internet/IE编程

开发平台:

Delphi

  1. unit FormOrder;
  2. interface
  3. uses
  4.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  5.   Dialogs, ComCtrls, Grids, DBGrids, ExtCtrls, DB, DBClient, ActnList,
  6.   Menus, StdCtrls, Mask, DBCtrls, Provider, ADODB;
  7. type
  8.   TFrmOrder = class(TForm)
  9.     ScrollBox: TScrollBox;
  10.     pnlControls: TPanel;
  11.     Splitter: TSplitter;
  12.     dbgrdDetail: TDBGrid;
  13.     StatusBar: TStatusBar;
  14.     btnFind: TButton;
  15.     btnRefresh: TButton;
  16.     btnSave: TButton;
  17.     btnCancel: TButton;
  18.     btnAdd: TButton;
  19.     btnModify: TButton;
  20.     ActionList: TActionList;
  21.     PopupMenu: TPopupMenu;
  22.     actAdd: TAction;
  23.     actModify: TAction;
  24.     actRefresh: TAction;
  25.     actSave: TAction;
  26.     actFind: TAction;
  27.     actCancel: TAction;
  28.     actAddRow: TAction;
  29.     actDelRow: TAction;
  30.     cltdsOrders: TClientDataSet;
  31.     cltdsOrderDetails: TClientDataSet;
  32.     dsOrders: TDataSource;
  33.     dsOrderDetails: TDataSource;
  34.     Button1: TButton;
  35.     actDelete: TAction;
  36.     N1: TMenuItem;
  37.     N2: TMenuItem;
  38.     N3: TMenuItem;
  39.     N4: TMenuItem;
  40.     N5: TMenuItem;
  41.     N6: TMenuItem;
  42.     N7: TMenuItem;
  43.     N8: TMenuItem;
  44.     N9: TMenuItem;
  45.     cltdsOrdersCustomerID: TWideStringField;
  46.     cltdsOrdersEmployeeID: TIntegerField;
  47.     cltdsOrdersOrderDate: TDateTimeField;
  48.     cltdsOrdersRequiredDate: TDateTimeField;
  49.     cltdsOrdersShippedDate: TDateTimeField;
  50.     cltdsOrdersShipVia: TIntegerField;
  51.     cltdsOrdersFreight: TBCDField;
  52.     cltdsOrdersShipName: TWideStringField;
  53.     cltdsOrdersShipAddress: TWideStringField;
  54.     cltdsOrdersShipCity: TWideStringField;
  55.     cltdsOrdersShipRegion: TWideStringField;
  56.     cltdsOrdersShipPostalCode: TWideStringField;
  57.     cltdsOrdersShipCountry: TWideStringField;
  58.     cltdsOrderDetailsOrderID: TIntegerField;
  59.     cltdsOrderDetailsProductID: TIntegerField;
  60.     cltdsOrderDetailsUnitPrice: TBCDField;
  61.     cltdsOrderDetailsQuantity: TSmallintField;
  62.     cltdsOrderDetailsDiscount: TFloatField;
  63.     PopupMenu_grid: TPopupMenu;
  64.     N10: TMenuItem;
  65.     N11: TMenuItem;
  66.     cltdsOrderDetailsProductName: TStringField;
  67.     cltdsOrderDetailsTotal: TFloatField;
  68.     Label1: TLabel;
  69.     DBEdit1: TDBEdit;
  70.     Label2: TLabel;
  71.     Label3: TLabel;
  72.     Label4: TLabel;
  73.     DBEdit4: TDBEdit;
  74.     Label5: TLabel;
  75.     DBEdit5: TDBEdit;
  76.     Label6: TLabel;
  77.     DBEdit6: TDBEdit;
  78.     Label7: TLabel;
  79.     Label8: TLabel;
  80.     DBEdit8: TDBEdit;
  81.     Label9: TLabel;
  82.     DBEdit9: TDBEdit;
  83.     Label10: TLabel;
  84.     DBEdit10: TDBEdit;
  85.     Label11: TLabel;
  86.     DBEdit11: TDBEdit;
  87.     Label12: TLabel;
  88.     DBEdit12: TDBEdit;
  89.     Label13: TLabel;
  90.     DBEdit13: TDBEdit;
  91.     Label14: TLabel;
  92.     DBEdit14: TDBEdit;
  93.     DBLookupComboBox1: TDBLookupComboBox;
  94.     DBLookupComboBox2: TDBLookupComboBox;
  95.     DBLookupComboBox3: TDBLookupComboBox;
  96.     cltdsOrdersOrderID: TIntegerField;
  97.     procedure cltdsOrderDetailsCalcFields(DataSet: TDataSet);
  98.     procedure actAddExecute(Sender: TObject);
  99.     procedure actModifyExecute(Sender: TObject);
  100.     procedure FormCreate(Sender: TObject);
  101.     procedure actCancelExecute(Sender: TObject);
  102.     procedure actAddRowExecute(Sender: TObject);
  103.     procedure actDelRowExecute(Sender: TObject);
  104.     procedure FormClose(Sender: TObject; var Action: TCloseAction);
  105.     procedure actFindExecute(Sender: TObject);
  106.     procedure actRefreshExecute(Sender: TObject);
  107.     procedure actSaveExecute(Sender: TObject);
  108.   private
  109.     { Private declarations }
  110.     FOrderID:integer;
  111.     Procedure RefreshButtons();
  112.     Procedure OpenOrder(OrderID:integer);
  113.     Procedure OpenOrderDetail(OrderID:integer);
  114.     Procedure OpenOther();
  115.     Procedure SaveData();
  116.     Procedure RefreshData();
  117.   public
  118.     { Public declarations }
  119.     Class Procedure ShowOrder();
  120.   end;
  121. implementation
  122. uses DtmdMain, SvrObj_Orders_TLB, UnitShare, FormFind;
  123. {$R *.dfm}
  124. Class Procedure TFrmOrder.ShowOrder();
  125. var
  126.   oFrm:TFrmOrder;
  127. begin
  128.   oFrm:=TFrmOrder.Create(Application);
  129.   try
  130.     oFrm.Show();
  131.   except
  132.     oFrm.Free();
  133.   end;
  134. end;
  135. Procedure TFrmOrder.SaveData();
  136. var
  137.   DeltaOrder,DeltaOrderDetail:OleVariant;
  138.   Orders:IOrders;
  139.   OrderId:integer;
  140.   IsOk:WordBool;
  141.   ErrorMsg:WideString;
  142. begin
  143.   if cltdsOrdersOrderID.IsNull then
  144.   begin
  145.     showmessage('请输入OrderID!');
  146.     exit;
  147.   end;
  148.   IsOk:=false;
  149.   ErrorMsg:='';
  150.   OrderId:= cltdsOrdersOrderID.AsInteger;
  151.   if cltdsOrders.State<>dsBrowse then
  152.     cltdsOrders.Post();
  153.     //把更新数据写入Delta中
  154.   if cltdsOrders.ChangeCount>0 then //判断是否有更新
  155.     DeltaOrder:=cltdsOrders.Delta;
  156.   if cltdsOrderDetails.State<>dsBrowse then
  157.     cltdsOrderDetails.Post();
  158.     //把更新数据写入Delta中
  159.   if cltdsOrderDetails.ChangeCount>0 then //判断是否有更新
  160.     DeltaOrderDetail:=cltdsOrderDetails.Delta;
  161.   Orders:=CoOrders.CreateRemote(APPSVR);
  162.   Orders.UpdateOrder(OrderId,DeltaOrder,DeltaOrderDetail,IsOk,ErrorMsg);
  163.   if not IsOk then
  164.   begin
  165.     showmessage('错误信息:'+#13+ErrorMsg);//接收服务器端传递过来的错误信息
  166.     exit;
  167.   end;
  168.   FOrderID:=OrderId;
  169.   RefreshData();  //刷新
  170. end;
  171. Procedure TFrmOrder.OpenOther();
  172. var
  173.   RetData:OleVariant;
  174.   Orders:IOrders;
  175. begin
  176.   if (DmMain.cltdsCustomers.Active and DmMain.cltdsShipper.Active and
  177.       DmMain.cltdsProducts.Active and DmMain.cltdsEmployees.Active) then
  178.     exit;
  179.   Orders:=CoOrders.CreateRemote(APPSVR);
  180.   //APPSVR是应用服务器地址或机器名
  181.   //创建远程对象实例
  182.   Orders.GetOtherData(RetData);
  183.   DmMain.cltdsEmployees.Data:=RetData[0];
  184.   DmMain.cltdsCustomers.Data:=RetData[1];
  185.   DmMain.cltdsShipper.Data:=RetData[2];
  186.   DmMain.cltdsProducts.Data:=RetData[3];
  187. end;
  188. Procedure TFrmOrder.OpenOrder(OrderID:integer);
  189. var
  190.   RetData:OleVariant;
  191.   Orders:IOrders;
  192. begin
  193.   Orders:=CoOrders.CreateRemote(APPSVR);
  194.   Orders.GetOrder(OrderID,RetData);
  195.   cltdsOrders.Data:=RetData;
  196.   cltdsOrders.ReadOnly:=true;
  197. end;
  198. Procedure TFrmOrder.OpenOrderDetail(OrderID:integer);
  199. var
  200.   RetData:OleVariant;
  201.   Orders:IOrders;
  202. begin
  203.   Orders:=CoOrders.CreateRemote(APPSVR);
  204.   Orders.GetOrderDetail(OrderID,RetData);
  205.   cltdsOrderDetails.Data:=RetData;
  206.   cltdsOrderDetails.ReadOnly:=true;
  207. end;
  208. Procedure TFrmOrder.RefreshButtons();
  209. begin
  210.   if not cltdsOrders.Active then
  211.   begin
  212.     actFind.Enabled:=true;
  213.     actAdd.Enabled:=true;
  214.     actAddRow.Enabled:=false;
  215.     actModify.Enabled:=false;
  216.     actRefresh.Enabled:=false;
  217.     actSave.Enabled:=false;
  218.     actCancel.Enabled:=false;
  219.     actDelRow.Enabled:=false;
  220.     actDelete.Enabled:=false;
  221.     exit;
  222.   end;
  223.   if cltdsOrders.ReadOnly then
  224.   begin
  225.     actFind.Enabled:=true;
  226.     actAdd.Enabled:=true;
  227.     actAddRow.Enabled:=false;
  228.     actModify.Enabled:=true;
  229.     actRefresh.Enabled:=true;
  230.     actSave.Enabled:=false;
  231.     actCancel.Enabled:=false;
  232.     actDelRow.Enabled:=false;
  233.     if cltdsOrders.IsEmpty then
  234.       actDelete.Enabled:=false
  235.     else
  236.       actDelete.Enabled:=true;
  237.     dbgrdDetail.Options:=dbgrdDetail.Options+[dgRowSelect];
  238.   end
  239.   else
  240.   begin
  241.     actFind.Enabled:=false;
  242.     actAdd.Enabled:=false;
  243.     actAddRow.Enabled:=true;
  244.     actModify.Enabled:=false;
  245.     actRefresh.Enabled:=false;
  246.     actSave.Enabled:=true;
  247.     actCancel.Enabled:=true;
  248.     actDelRow.Enabled:=true;
  249.     actDelete.Enabled:=false;
  250.     dbgrdDetail.Options:=dbgrdDetail.Options-[dgRowSelect]+[dgEditing];
  251.   end;
  252. end;
  253. procedure TFrmOrder.cltdsOrderDetailsCalcFields(DataSet: TDataSet);
  254. begin
  255.   cltdsOrderDetailsTotal.AsFloat:=cltdsOrderDetailsUnitPrice.AsFloat*
  256.     cltdsOrderDetailsQuantity.AsFloat*(1-cltdsOrderDetailsDiscount.AsFloat);
  257. end;
  258. procedure TFrmOrder.actAddExecute(Sender: TObject);
  259. begin
  260.   if not cltdsOrders.Active then
  261.     exit;
  262.   FOrderID:=-1;
  263.   RefreshData();
  264.   cltdsOrders.ReadOnly:=false;
  265.   cltdsOrderDetails.ReadOnly:=false;
  266.   cltdsOrders.Append();
  267.   RefreshButtons();
  268. end;
  269. procedure TFrmOrder.actModifyExecute(Sender: TObject);
  270. begin
  271.   if not cltdsOrders.Active then
  272.     exit;
  273.   cltdsOrders.ReadOnly:=false;
  274.   cltdsOrderDetails.ReadOnly:=false;
  275.   RefreshButtons();
  276. end;
  277. procedure TFrmOrder.FormCreate(Sender: TObject);
  278. begin
  279.   FOrderID:=-1;
  280.   OpenOther();
  281. end;
  282. Procedure TFrmOrder.RefreshData();
  283. begin
  284.   OpenOrder(FOrderID);
  285.   OpenOrderDetail(FOrderID);
  286.   RefreshButtons();
  287. end;
  288. procedure TFrmOrder.actCancelExecute(Sender: TObject);
  289. begin
  290.   if not cltdsOrders.Active then
  291.     exit;
  292.   cltdsOrders.CancelUpdates();
  293.   cltdsOrderDetails.CancelUpdates();
  294.   cltdsOrders.ReadOnly:=true;
  295.   cltdsOrderDetails.ReadOnly:=true;
  296.   RefreshButtons();
  297. end;
  298. procedure TFrmOrder.actAddRowExecute(Sender: TObject);
  299. begin
  300.   if not cltdsOrderDetails.Active then
  301.     exit;
  302.   if cltdsOrderDetails.ReadOnly then
  303.     exit;
  304.   cltdsOrderDetails.Append();
  305. end;
  306. procedure TFrmOrder.actDelRowExecute(Sender: TObject);
  307. begin
  308.   if not cltdsOrderDetails.Active then
  309.     exit;
  310.   if cltdsOrderDetails.ReadOnly then
  311.     exit;
  312.   if cltdsOrderDetails.RecordCount>0 then
  313.     cltdsOrderDetails.Delete();
  314. end;
  315. procedure TFrmOrder.FormClose(Sender: TObject; var Action: TCloseAction);
  316. begin
  317.   Action:=caFree;
  318. end;
  319. procedure TFrmOrder.actFindExecute(Sender: TObject);
  320. var
  321.   ResultValue:integer;
  322. begin
  323.   ResultValue:= TFrmFind.ShowFind();
  324.   if ResultValue<>-1 then
  325.   begin
  326.     FOrderID:=ResultValue;
  327.     RefreshData();
  328.   end;
  329. end;
  330. procedure TFrmOrder.actRefreshExecute(Sender: TObject);
  331. begin
  332.   RefreshData();
  333. end;
  334. procedure TFrmOrder.actSaveExecute(Sender: TObject);
  335. begin
  336.   SaveData();
  337. end;
  338. end.