亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? untcustorder.~pas

?? 這是一個不錯的數據庫管理程序
?? ~PAS
字號:
                                               unit untCustOrder;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Db, ADODB, StdCtrls, ExtCtrls, Grids, DBGrids, Buttons;

type
  TfrmCustOrder = class(TForm)
    qryOrderItemGrd: TADOQuery;
    uspTmp: TADOStoredProc;
    souOrderItemGrd: TDataSource;
    gupCustInfo: TGroupBox;
    Bevel1: TBevel;
    Bevel2: TBevel;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    edtOrderID: TEdit;
    edtCustID: TEdit;
    edtCustName: TEdit;
    edtTel: TEdit;
    edtZip: TEdit;
    edtAddress: TEdit;
    rdoSexMale: TRadioButton;
    rdoSexFemale: TRadioButton;
    gupOrderItem: TGroupBox;
    grdOrderItem: TDBGrid;
    btnAdd: TButton;
    btnDel: TButton;
    btnOK: TBitBtn;
    btnCancel: TBitBtn;
    edtCode: TEdit;

    procedure edtCustIDCodeExit(Sender: TObject);
    procedure grdOrderItemColExit(Sender: TObject);
    procedure btnOKClick(Sender: TObject);
    procedure btnAddClick(Sender: TObject);
    procedure btnDelClick(Sender: TObject);
    procedure edtChange(Sender: TObject);
  private
        IsOldCustomer:Boolean;
        function CheckAllRecords: Boolean;
        function SaveAllRecords: Boolean;
    { Private declarations }
  public
        function Execute:Boolean;
    { Public declarations }
  end;

var
  frmCustOrder: TfrmCustOrder;

implementation

uses untGoodsOrderDat;


function TfrmCustOrder.Execute:Boolean;
const
        cSqlOrderItem='SELECT A.GoodsCode,A.GoodsName,A.Unit,A.Price,A.Price,B.Quantity FROM Goods A,OrderItem B WHERE 1=0';
var
        sOrderID:   string;
begin
        //設置數據庫組件屬性,設置數據表以批方式存取
        qryOrderItemGrd.SQL.Text:=cSqlOrderItem;
        qryOrderItemGrd.LockType:=ltBatchOptimistic;
        qryOrderItemGrd.CursorType:=ctKeyset;
        qryOrderItemGrd.Open;
        //調用存儲過程,得到新訂單號
        uspTmp.Parameters.Clear;
        uspTmp.ProcedureName:='usp_GetNewOrderID';
        uspTmp.Parameters.CreateParameter('DataStr',ftString,pdInput, 8, FormatDateTime('YYYYMMDD',Now));
        uspTmp.Parameters.CreateParameter('OrderID',ftString,pdOutput,11,'');
        uspTmp.ExecProc;
        sOrderID:=uspTmp.Parameters.ParamByName('OrderID').Value;
        //初始化窗體顯示的內容
        edtOrderID.Text:=sOrderID;
        edtCustID.Text:='';
        edtCode.Text:='';
        edtCustName.Text:='';
        edtTel.Text:='';
        edtZip.Text:='';
        edtAddress.Text:='';
        rdoSexMale.Checked:=True;
        rdoSexFemale.Checked:=False;
        //顯示窗體,并返回函數結果
        Result:=ShowModal=mrOK;
end;


function TfrmCustOrder.CheckAllRecords:Boolean;
begin
        Result:=True;

        if Trim(edtCode.Text) =''then begin
                Result:=False;
                Exit;
        end;

        if Trim(edtCustName.Text) =''then begin
                Result:=False;
                Exit;
        end;

        if Trim(edtTel.Text)=''then begin
                Result := False;
                Exit;
        end;

        if Trim(edtZip.Text)=''then begin
                Result:=False;
                Exit;
        end;

        if Trim(edtAddress.Text)=''then begin
                Result:=False;
                Exit;
        end;
end;


function TfrmCustOrder.SaveAllRecords: Boolean;
var
        dAmount, dPrice, dQuantity: Currency;
begin
        Result:=False;

        with datGoodsOrder do begin
                //開始事務提交
                conGoodsOrder.BeginTrans;

                try
                        //打開顧客表
                        if IsOldCustomer then
                                qryCustomer.SQL.Text:='SELECT * FROM Customer WHERE CustID=''' + Trim(edtCustID.Text) + ''''
                        else
                                qryCustomer.SQL.Text:='SELECT * FROM Customer WHERE 1=0';
                        qryCustomer.LockType := ltBatchOptimistic;
                        qryCustomer.CursorType := ctKeyset;
                        qryCustomer.open;
                        //打開訂單表
                        qryCustomer.SQL.Text := 'SELECT * FROM Orders WHERE 1=0';
                        qryCustomer.LockType := ltBatchOptimistic;
                        qryCustomer.CursorType := ctKeyset;
                        qryCustomer.open;
                        //打開訂單明細表
                        qryCustomer.SQL.Text := 'SELECT * FROM OrderItem WHERE 1=0';
                        qryCustomer.LockType := ltBatchOptimistic;
                        qryCustomer.CursorType := ctKeyset;
                        qryCustomer.open;

                        //修改或增加顧客記錄
                        if IsOldCustomer then
                                qryCustomer.Edit
                        else begin
                                qryCustomer.Append;
                                qryCustomer.FieldByName('CustID').AsString := Trim(edtCustID.Text);
                                qryCustomer.FieldByName('Code').AsString := Trim(edtCode.Text);
                        end;
                        qryCustomer.FieldByName('CustName').AsString := Trim(edtCustName.Text);
                        qryCustomer.FieldByName('Sex').AsString :=  '';
                        if rdoSexMale.Checked then
                                qryCustomer.FieldByName('Sex').AsString :=  'M'
                        else if rdoSexFemale.Checked then
                        qryCustomer.FieldByName('Sex').AsString :=  'F';
                        qryCustomer.FieldByName('Tel').AsString := Trim(edtTel.Text);
                        qryCustomer.FieldByName('Zip').AsString := Trim(edtZip.Text);
                        qryCustomer.FieldByName('Address').AsString := Trim(edtAddress.Text);
                        qryCustomer.Post;
                        //增加訂單明細記錄
                        dAmount := 0.0;
                        qryOrderItemGrd.First;
                        while not qryOrderItemGrd.Eof do begin
                                dPrice := qryOrderItemGrd.FieldByName('Price').AsCurrency;
                                dQuantity := qryOrderItemGrd.FieldByName('Quantity').AsCurrency;
                                dAmount := dAmount + dPrice * dQuantity;

                                qryOrderItem.Append;
                                qryOrderItem.FieldByName('OrderID').AsString := Trim(edtOrderID.Text);
                                qryOrderItem.FieldByName('ItemNo').AsInteger := qryOrderItemGrd.RecNo + 1;
                                qryOrderItem.FieldByName('GoodsCode').AsString := qryOrderItemGrd.FieldByName('GoodsCode').AsString;
                                qryOrderItem.FieldByName('Quantity').AsCurrency := qryOrderItemGrd.FieldByName('Quantity').AsCurrency;
                                qryOrderItem.Post;

                                qryOrderItemGrd.Next;
                        end;
                        //增加訂單記錄
                        qryOrders.Append;
                        qryOrders.FieldByName('OrderID').AsString := Trim(edtOrderID.Text);
                        qryOrders.FieldByName('CustID').AsString := Trim(edtCustID.Text);
                        qryOrders.FieldByName('Amount').AsCurrency := dAmount;
                        qryOrders.Post;

                        //批更新數據表
                        qryCustomer.UpdateBatch;
                        qryOrders.UpdateBatch;
                        qryOrderItem.UpdateBatch;

                        //事務提交
                        conGoodsOrder.CommitTrans;
                        Result := True;
                except
                        //回滾事務
                        conGoodsOrder.RollbackTrans;
                        MessageDlg('保存數據失敗!',mtError, [mbOK], 0);
                        Close;
                end;
        end;
end;


//如何讓多個事件響應同一個消息?
//如何修改缺省的消息響應函數名稱?
procedure TfrmCustOrder.edtCustIDCodeExit(Sender: TObject);
const
        cSqlCustom = 'SELECT * FROM Customer WHERE RTRIM(CustID)=''%s'' AND RTRIM(Code)=''%s''';
var
        sCustID, sCode: string;
begin
        sCustID := Trim(edtCustID.Text);  // Trim()是什么意思?
        sCode := Trim(edtCode.Text);      // 為什么要使用Trim()函數?
        //下面程序段的功能是什么意思?
        if (sCustID <> '') and (sCode <> '') then begin
                with datGoodsOrder do begin       // with ... do是什么意思?
                        qryCustomer.SQL.Text := Format(cSqlCustom, [sCustID, sCode]);
                        qryCustomer.Open;
                        // 如果是老顧客(為什么這樣可以判斷是老顧客?)
                        if not qryCustomer.IsEmpty() then begin
                                IsOldCustomer := True;
                                edtCustName.Text := qryCustomer.FieldByName('CustName').AsString;
                                rdoSexMale.Checked := qryCustomer.FieldByName('Sex').AsString = 'M';
                                rdoSexFemale.Checked := qryCustomer.FieldByName('Sex').AsString = 'F';
                                edtTel.Text := qryCustomer.FieldByName('Tel').AsString;
                                edtZip.Text := qryCustomer.FieldByName('Zip').AsString;
                                edtAddress.Text := qryCustomer.FieldByName('Address').AsString;
                        end
                        //否則是新顧客
                        else begin
                                IsOldCustomer := False;
                                ShowMessage('顧客號與身份證號不相符,該顧客是新顧客!');
                                // 調用存儲過程,得到新顧客號
                                uspTmp.Parameters.Clear;
                                uspTmp.ProcedureName := 'usp_GetNewCustID';
                                uspTmp.parameters.CreateParameter('DateStr', ftString, pdInput, 8, FormatDateTime('YYYYMMDD', now));
                                uspTmp.parameters.CreateParameter('CustID', ftString, pdInput, 11, '');
                                uspTmp.ExecProc;
                                sCustID := uspTmp.Parameters.ParamByName('CustID').Value;
                                edtCustID.Text := sCustID;
                        end;
                end;
        end;
        // 如果訂單號為空,表明是新顧客
        if (sCustID = '') and (sCode <> '') then begin
                //調用存儲過程,得到新顧客號
                uspTmp.Parameters.Clear;
                uspTmp.ProcedureName := 'usp_GetNewCustID';
                uspTmp.parameters.CreateParameter('DateStr', ftString, pdInput, 8, FormatDateTime('YYYYMMDD', now));
                uspTmp.parameters.CreateParameter('CustID', ftString, pdoutput, 11, '');
                uspTmp.ExecProc;
                sCustID := uspTmp.Parameters.ParamVALUES['CustID'];
                edtCustID.Text := sCustID;
        end;
end;

procedure TfrmCustOrder.grdOrderItemColExit(Sender: TObject);
var
        sGoodsCode: string;
begin
        if grdOrderItem.SelectedIndex = 0 then begin
                sGoodsCode := qryOrderItemGrd.FieldByName('GoodsCode').AsString;
                //  調用存儲過程,得到商品的名稱,單位和單價
                uspTmp.Parameters.Clear;
                uspTmp.ProcedureName := 'usp_GetGoodsInfo';
                uspTmp.Parameters.CreateParameter('GoodsCode', ftString, pdInput, 10, sGoodsCode);
                uspTmp.Parameters.CreateParameter('GoodsName', ftString, pdOutput, 20, '');
                uspTmp.Parameters.CreateParameter('Find', ftSmallInt, pdOutput, 0, 0);
                uspTmp.Parameters.CreateParameter('Unit', ftString, pdOutput, 20, '');
                uspTmp.Parameters.CreateParameter('Price', ftCurrency, pdOutput, 0, 0);
                uspTmp.Parameters.CreateParameter('SafeStock', ftCurrency, pdOutput, 0, 0);
                uspTmp.Parameters.CreateParameter('QtyBuyMin', ftCurrency, pdOutput, 0, 0);
                uspTmp.ExecProc;

                //輸出當前商品代碼的商品名稱、單位和單價
                qryOrderItemGrd.Edit;
                // 如果返回的幾個值可能為空,數據轉換時就會錯誤,為了避免中斷程序執行,采用下面方法
                if uspTmp.Parameters.ParamByName('Find').Value = 1 then begin
                        qryOrderItemGrd.FieldByName('GoodsName').AsString :=uspTmp.Parameters.ParamByName('GoodsName').Value;
                        qryOrderItemGrd.FieldByName('Unit').AsString :=uspTmp.Parameters.ParamByName('Unit').Value;
                        qryOrderItemGrd.FieldByName('Price').AsCurrency :=uspTmp.Parameters.ParamByName('Price').Value;
                end;
                qryOrderItemGrd.Post;
                grdOrderItem.SelectedIndex := 4;    // 是什么意思?
        end;
end;





procedure TfrmCustOrder.btnOKClick(Sender: TObject);
begin
        // 如果處于編輯狀態,退出編輯狀態
        if qryOrderItemGrd.State = dsEdit then
                qryOrderItemGrd.Post;
        // 如果訂單明細不為空,才認為該訂單是有效訂單
        if not qryOrderItemGrd.IsEmpty then
                SaveAllRecords;
end;


{$R *.DFM}



procedure TfrmCustOrder.btnAddClick(Sender: TObject);
begin
        qryOrderItemGrd.Append;
end;

procedure TfrmCustOrder.btnDelClick(Sender: TObject);
begin
        qryOrderItemGrd.Delete;
end;

procedure TfrmCustOrder.edtChange(Sender: TObject);
begin
 if CheckAllRecords then begin
                grdOrderItem.Enabled := True;
                btnAdd.Enabled := True;
                btnDel.Enabled := True;
        end
        else begin
                grdOrderItem.Enabled := False;
                btnAdd.Enabled := False;
                btnDel.Enabled := False;
        end;
end;

end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本不卡视频在线| 欧美优质美女网站| 一本到高清视频免费精品| 精品对白一区国产伦| 中文在线一区二区| 日本va欧美va精品发布| 成人精品免费看| 91精品在线一区二区| 亚洲欧洲中文日韩久久av乱码| 日韩国产欧美三级| 色综合中文字幕| 亚洲精品国久久99热| 九九精品视频在线看| 欧美性大战久久久久久久蜜臀| 久久亚洲精品国产精品紫薇| 亚洲成人资源在线| 91在线免费看| 国产精品素人一区二区| 精品一区二区在线播放| 欧美日韩高清一区二区| 亚洲精品伦理在线| 成人精品免费网站| 国产亚洲精品bt天堂精选| 秋霞电影一区二区| 欧美精品久久久久久久久老牛影院| 国产精品乱子久久久久| 国产尤物一区二区| 欧美r级在线观看| 日韩成人午夜电影| 欧美日韩国产高清一区二区三区 | 国产精品一二三四五| 欧美一卡二卡三卡四卡| 偷拍与自拍一区| 在线播放一区二区三区| 婷婷成人综合网| 91麻豆精品国产91久久久使用方法 | 色又黄又爽网站www久久| 欧美国产日韩亚洲一区| 国产成人福利片| 欧美高清在线精品一区| 高清成人在线观看| 国产精品久久久久天堂| 成人国产精品免费观看| 国产精品国产三级国产aⅴ中文 | 2023国产精品自拍| 六月丁香综合在线视频| 日韩精品专区在线| 国产乱人伦精品一区二区在线观看| 日韩视频不卡中文| 精品亚洲成a人| 欧美激情综合五月色丁香 | 欧美在线免费观看亚洲| 一区二区三区**美女毛片| 久久婷婷国产综合精品青草| 久久99九九99精品| 国产欧美日韩视频在线观看| 懂色av中文字幕一区二区三区| 国产精品久久午夜夜伦鲁鲁| 色综合网色综合| 偷拍日韩校园综合在线| 亚洲精品一区二区三区99| 国产.欧美.日韩| 亚洲精品视频一区二区| 91精品国产一区二区三区香蕉| 久久99精品久久久久久动态图 | 欧美日韩大陆一区二区| 麻豆精品蜜桃视频网站| 中文字幕巨乱亚洲| 欧美日韩一区二区在线观看 | 亚洲最大成人综合| 日韩欧美国产午夜精品| 成人午夜视频免费看| 性做久久久久久免费观看 | 国产精品美日韩| 欧美亚洲动漫精品| 九色综合狠狠综合久久| 亚洲欧洲精品天堂一级 | 亚洲一区免费观看| 精品久久久久久亚洲综合网| 成人av在线一区二区三区| 香蕉影视欧美成人| 国产精品亲子伦对白| 宅男噜噜噜66一区二区66| 成人午夜大片免费观看| 日韩精品免费专区| 亚洲日本va在线观看| 精品噜噜噜噜久久久久久久久试看 | 日本v片在线高清不卡在线观看| 欧美极品美女视频| 日韩免费一区二区三区在线播放| 成人av网址在线观看| 麻豆国产91在线播放| 亚洲一级二级三级在线免费观看| 亚洲精品一区二区三区福利| 色欧美片视频在线观看 | 国产三级精品三级在线专区| 欧美色图免费看| 99久久综合狠狠综合久久| 激情五月播播久久久精品| 一区2区3区在线看| 日韩美女视频一区| 欧美激情综合在线| 久久久久国产精品麻豆ai换脸| 欧美夫妻性生活| 色狠狠桃花综合| 99久久精品免费看国产| 国产成人一区在线| 国产曰批免费观看久久久| 午夜精品在线视频一区| 亚洲精品中文在线观看| 国产精品国产三级国产普通话三级 | 丝袜美腿亚洲色图| 亚洲成人7777| 亚洲制服丝袜av| 亚洲一区在线视频| 久久精品国产亚洲高清剧情介绍| 一区二区在线免费观看| 亚洲人精品午夜| 亚洲色图色小说| 又紧又大又爽精品一区二区| 中文字幕一区二区三| 国产精品国产三级国产aⅴ中文 | 国产精品18久久久久久久久| 狠狠色丁香久久婷婷综| 狠狠色丁香九九婷婷综合五月| 久久国产夜色精品鲁鲁99| 久久国产免费看| 国产一区二区三区久久久 | 国产亚洲欧洲一区高清在线观看| 26uuu国产在线精品一区二区| 日韩精品一区二区三区视频在线观看| 欧美一区二区三区视频在线观看| 欧美一区二区免费| 精品女同一区二区| 国产欧美视频一区二区三区| 国产精品你懂的在线欣赏| 国产精品传媒入口麻豆| 亚洲黄色片在线观看| 日韩专区在线视频| 狠狠色狠狠色综合日日91app| 国产麻豆成人精品| 91色九色蝌蚪| 欧美高清视频在线高清观看mv色露露十八| 欧美日韩中字一区| 久久中文字幕电影| 亚洲精品乱码久久久久久| 视频一区二区三区在线| 国产一区二区免费看| 本田岬高潮一区二区三区| 欧美吻胸吃奶大尺度电影| 欧美电视剧免费观看| 国产精品久久国产精麻豆99网站| 亚洲一线二线三线视频| 久久成人综合网| 成人国产在线观看| 欧美日韩视频专区在线播放| 欧美成人一区二区三区在线观看| 日本一区二区免费在线| 亚洲国产日韩在线一区模特| 久久精品国产色蜜蜜麻豆| 99视频超级精品| 日韩一区二区电影在线| 中文字幕一区二区三区视频| 日日夜夜免费精品| 99久久伊人精品| 欧美不卡视频一区| 亚洲综合色丁香婷婷六月图片| 狠狠久久亚洲欧美| 欧美日本精品一区二区三区| 国产欧美一区二区精品性色超碰| 性欧美大战久久久久久久久| 成人性色生活片免费看爆迷你毛片| 欧美日韩国产首页| 国产精品不卡视频| 激情综合色播五月| 在线免费观看日韩欧美| 国产亚洲一区二区三区四区 | 亚洲欧洲精品天堂一级 | 国产+成+人+亚洲欧洲自线| 欧美久久久久久久久中文字幕| 国产精品美女久久久久久| 久久激情五月婷婷| 欧美精品色一区二区三区| 自拍偷拍亚洲欧美日韩| 国产成人av电影在线| 精品久久久久一区二区国产| 香蕉久久一区二区不卡无毒影院| 成人av第一页| 中文字幕av一区 二区| 国产在线日韩欧美| 精品国产一区二区三区久久久蜜月| 亚洲最色的网站| 日本丶国产丶欧美色综合| 亚洲欧洲精品一区二区三区不卡| 国产精品一二一区| 福利视频网站一区二区三区| 亚洲精品国产无套在线观| 亚洲国产一二三| 91美女精品福利| 亚洲精品视频自拍|