unit U_ZDYHelpSelXR; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, cxStyles, cxCustomData, cxGraphics, cxFilter, cxData, cxDataStorage, cxEdit, DB, cxDBData, ToolWin, ComCtrls, cxGridCustomTableView, cxGridTableView, cxGridDBTableView, cxGridLevel, cxClasses, cxControls, cxGridCustomView, cxGrid, DBClient, ADODB, ImgList, StdCtrls, ExtCtrls, cxCheckBox, cxTextEdit, cxLookAndFeels, cxLookAndFeelPainters, cxNavigator, dxDateRanges, System.ImageList, System.Types, dxBarBuiltInMenu, cxGridCustomPopupMenu, cxGridPopupMenu, dxScrollbarAnnotations, Vcl.Menus; type TfrmZDYHelpSelXR = class(TForm) TV1: TcxGridDBTableView; cxGrid1Level1: TcxGridLevel; cxGrid1: TcxGrid; V1Code: TcxGridDBColumn; V1Name: TcxGridDBColumn; ToolBar1: TToolBar; ADOQueryMain: TADOQuery; ADOQueryTemp: TADOQuery; ADOQueryCmd: TADOQuery; DataSource1: TDataSource; ClientDataSet1: TClientDataSet; TBAdd: TToolButton; TBSave: TToolButton; TBDel: TToolButton; TBClose: TToolButton; ToolButton1: TToolButton; TBEdit: TToolButton; V1Note: TcxGridDBColumn; V1OrderNo: TcxGridDBColumn; ADOConnection1: TADOConnection; Panel1: TPanel; Label1: TLabel; ZDYName: TEdit; ThreeImgList: TImageList; Label2: TLabel; ImageList_new32: TImageList; cxGridPopupMenu1: TcxGridPopupMenu; cxGrid2: TcxGrid; Tv2: TcxGridDBTableView; cxGridDBColumn1: TcxGridDBColumn; cxGridDBColumn2: TcxGridDBColumn; cxGridDBColumn3: TcxGridDBColumn; cxGridDBColumn4: TcxGridDBColumn; cxGridDBColumn5: TcxGridDBColumn; cxGridLevel1: TcxGridLevel; ClientDataSet2: TClientDataSet; DataSource2: TDataSource; TV1Column1: TcxGridDBColumn; PopupMenu1: TPopupMenu; N1: TMenuItem; procedure FormCreate(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure TBAddClick(Sender: TObject); procedure TBSaveClick(Sender: TObject); procedure TBDelClick(Sender: TObject); procedure TBCloseClick(Sender: TObject); procedure FormShow(Sender: TObject); procedure ToolButton1Click(Sender: TObject); procedure TBEditClick(Sender: TObject); procedure TV1CellDblClick(Sender: TcxCustomGridTableView; ACellViewInfo: TcxGridTableDataCellViewInfo; AButton: TMouseButton; AShift: TShiftState; var AHandled: Boolean); procedure ZDYNameChange(Sender: TObject); procedure V1NamePropertiesEditValueChanged(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure V1NotePropertiesEditValueChanged(Sender: TObject); procedure V1Column1PropertiesChange(Sender: TObject); procedure TV1Column1PropertiesEditValueChanged(Sender: TObject); procedure N1Click(Sender: TObject); procedure Tv2CellDblClick(Sender: TcxCustomGridTableView; ACellViewInfo: TcxGridTableDataCellViewInfo; AButton: TMouseButton; AShift: TShiftState; var AHandled: Boolean); private procedure InitGrid(); { Private declarations } public flag, flagname, FChkStr, snote, MainType, ReturnStr, FGStr: string; fnote, forderno: Boolean; PPSTE, JiangeStr: integer; { Public declarations } end; var frmZDYHelpSelXR: TfrmZDYHelpSelXR; implementation uses U_DataLink, U_RTFun; {$R *.dfm} procedure TfrmZDYHelpSelXR.FormCreate(Sender: TObject); begin try cxGrid1.Align := alClient; with ADOConnection1 do begin Connected := false; ConnectionString := DConString; //ConnectionString:=''; Connected := true; end; except {if Application.MessageBox('网络连接失败,是否要再次连接?','提示',32+4)=IDYES then begin try with ADOConnection1 do begin Connected:=false; ConnectionString:=DConString; //ConnectionString:='23242'; Connected:=true; end; except end; end; } frmZDYHelpSelXR.Free; end; end; procedure TfrmZDYHelpSelXR.FormClose(Sender: TObject; var Action: TCloseAction); begin writeCxGrid('自定义' + Trim(flag), TV1, '自定义数据'); ZDYName.SetFocus; Action := caFree; end; procedure TfrmZDYHelpSelXR.InitGrid(); begin try ADOQueryMain.DisableControls; with ADOQueryMain do begin Close; sql.Clear; sql.Add('select * from KH_ZDY where Type=''' + flag + ''''); if Trim(MainType) <> '' then begin sql.Add(' and MainType=''' + Trim(MainType) + ''''); end; Open; end; SCreateCDS(ADOQueryMain, ClientDataSet1); SInitCDSData(ADOQueryMain, ClientDataSet1); SCreateCDS(ADOQueryMain, ClientDataSet2); SInitCDSData(ADOQueryMain, ClientDataSet2); ClientDataSet2.EmptyDataSet finally ADOQueryMain.EnableControls; end; end; procedure TfrmZDYHelpSelXR.N1Click(Sender: TObject); begin with ClientDataSet2 do begin Append; FieldByName('SSel').Value := True; FieldByName('ZDYName').Value := ClientDataSet1.FieldByName('ZDYName').asstring; Post; end; end; procedure TfrmZDYHelpSelXR.TBAddClick(Sender: TObject); var i: Integer; begin ZDYName.SetFocus; TV1.OptionsData.Editing := True; TV1.OptionsSelection.CellSelect := True; for i := 0 to TV1.ColumnCount - 1 do begin if uppercase(TV1.Columns[i].DataBinding.FieldName) <> 'SSEL' then TV1.Columns[i].Options.Editing := True; end; for i := 0 to 5 do begin with ClientDataSet1 do begin Append; Post; end; end; end; procedure TfrmZDYHelpSelXR.TBSaveClick(Sender: TObject); var maxno: string; begin if ClientDataSet1.IsEmpty then Exit; try ADOQueryCmd.Connection.BeginTrans; with ADOQueryTemp do begin Close; SQL.Clear; SQL.Add('select * from KH_ZDY where ZdyNo=''' + Trim(flag) + ''''); open; end; if ADOQueryTemp.IsEmpty then begin with ADOQueryCmd do begin close; sql.Clear; sql.Add('insert into KH_ZDY(ZDYNo,ZDYName,Type,MainType) select :ZDYNo,:ZDYName,:Type,:MainType '); Parameters.ParamByName('ZDYNo').Value := Trim(flag); Parameters.ParamByName('ZDYName').Value := Trim(flagname); Parameters.ParamByName('Type').Value := 'Main'; Parameters.ParamByName('MainType').Value := Trim(MainType); ExecSQL; end; end; with ADOQueryCmd do begin with ClientDataSet1 do begin First; while not eof do begin if Trim(ClientDataSet1.FieldByName('ZDYNO').AsString) = '' then begin if GetLSNo(ADOQueryTemp, maxno, 'SY', 'KH_ZDY', 3, 1) = False then begin ADOQueryCmd.Connection.RollbackTrans; Application.MessageBox('取最大编号失败!', '提示', 0); Exit; end; end else begin maxno := Trim(ClientDataSet1.fieldbyname('ZDYNo').AsString); end; with ADOQueryCmd do begin Close; sql.Clear; SQL.Add('delete KH_ZDY where ZDYNO=''' + Trim(ClientDataSet1.fieldbyname('ZDYNO').AsString) + ''''); ExecSQL; end; with ADOQueryCmd do begin Close; sql.Clear; sql.Add('select * from KH_ZDY where 1<>1'); Open; end; if Trim(ClientDataSet1.FieldByName('ZDYName').AsString) = '' then begin ADOQueryCmd.Connection.RollbackTrans; Application.MessageBox('名称不能为空!', '提示', 0); Exit; end; ADOQueryCmd.Append; ADOQueryCmd.FieldByName('ZDYNo').Value := Trim(maxno); ADOQueryCmd.FieldByName('ZDYName').Value := ClientDataSet1.fieldbyname('ZDYName').AsString; ADOQueryCmd.FieldByName('note').Value := Trim(snote); //ADOQueryCmd.FieldByName('orderno').Value:=ClientDataSet1.fieldbyname('Name').AsString; ADOQueryCmd.FieldByName('Type').Value := flag; ADOQueryCmd.FieldByName('valid').Value := 'Y'; if Trim(MainType) <> '' then ADOQueryCmd.FieldByName('MainType').Value := Trim(MainType); //ADOQueryCmd.FieldByName('sel').Value:=0; ADOQueryCmd.Post; ClientDataSet1.Edit; ClientDataSet1.FieldByName('ZDYNo').Value := Trim(maxno); ClientDataSet1.Post; Next; end; end; end; ADOQueryCmd.Connection.CommitTrans; Application.MessageBox('保存成功!', '提示', 0); except ADOQueryCmd.Connection.RollbackTrans; Application.MessageBox('保存失败!', '提示', 0); end; // TV1.OptionsData.Editing:=False; end; procedure TfrmZDYHelpSelXR.TBDelClick(Sender: TObject); begin if ClientDataSet1.IsEmpty then Exit; if (Trim(ClientDataSet1.FieldByName('ZDYNo').AsString) <> '') or (Trim(ClientDataSet1.FieldByName('ZDYname').AsString) <> '') then begin if application.MessageBox('确定要删除吗?', '提示信息', 1) = 2 then exit; with ADOQueryCmd do begin Close; sql.Clear; sql.Add('delete KH_ZDY where ZDYNo=''' + Trim(ClientDataSet1.fieldbyname('ZDYNo').AsString) + ''''); SQL.Add('and Type=''' + Trim(flag) + ''''); ExecSQL; end; end; ClientDataSet1.Delete; end; procedure TfrmZDYHelpSelXR.TBCloseClick(Sender: TObject); begin ModalResult := 2; ZDYName.SetFocus; Close; end; procedure TfrmZDYHelpSelXR.FormShow(Sender: TObject); var fsj, fsj1: string; FStrs: TStringList; i: Integer; begin {if PPSTE=1 then begin Application.Terminate; Exit; end; } for i := 0 to TV1.ColumnCount - 1 do begin if uppercase(TV1.Columns[i].DataBinding.FieldName) <> 'SSEL' then TV1.Columns[i].Options.Editing := false; end; ReadCxGrid('自定义' + Trim(flag), TV1, '自定义数据'); InitGrid(); fsj := Trim(flag) + '01'; fsj1 := Trim(flagname) + '01'; if Trim(FChkStr) <> '' then begin FStrs := TStringList.Create(); ExtractStrings(['|'], [' '], PChar(FChkStr), FStrs); frmZDYHelpSelXR.Caption := Trim(flagname); with ClientDataSet1 do begin First; while not eof do begin if FStrs.IndexOf(Trim(FieldByName('ZDYName').AsString)) >= 0 then begin Edit; FieldByName('SSel').Value := true; Post; end; Next; end; end; FStrs.Free; end; end; procedure TfrmZDYHelpSelXR.ToolButton1Click(Sender: TObject); begin ReturnStr := ''; with ClientDataSet1 do begin First; while not Eof do begin if FieldByName('SSel').AsBoolean = True then begin if JiangeStr <> 99 then begin if FGStr <> '' then ReturnStr := ReturnStr + Trim(fieldbyname('ZDYName').AsString) + FGStr else ReturnStr := ReturnStr + Trim(fieldbyname('ZDYName').AsString) + ';' end else ReturnStr := ReturnStr + Trim(fieldbyname('ZDYName').AsString); end; Next; end; end; if JiangeStr <> 99 then ReturnStr := Copy(ReturnStr, 1, Length(ReturnStr) - 1); ModalResult := 1; end; procedure TfrmZDYHelpSelXR.TBEditClick(Sender: TObject); var i: Integer; begin for i := 0 to TV1.ColumnCount - 1 do begin if uppercase(TV1.Columns[i].DataBinding.FieldName) <> 'SSEL' then TV1.Columns[i].Options.Editing := True; end; end; procedure TfrmZDYHelpSelXR.TV1CellDblClick(Sender: TcxCustomGridTableView; ACellViewInfo: TcxGridTableDataCellViewInfo; AButton: TMouseButton; AShift: TShiftState; var AHandled: Boolean); begin // if TV1.OptionsData.Editing = False then // begin // ModalResult := 1; // end; with ClientDataSet2 do begin Append; FieldByName('SSel').Value := True; FieldByName('ZDYName').Value := ClientDataSet1.FieldByName('ZDYName').asstring; Post; end; end; procedure TfrmZDYHelpSelXR.TV1Column1PropertiesEditValueChanged(Sender: TObject); var mvalue: string; begin if Trim(ClientDataSet1.fieldbyname('ZdyName').AsString) = '' then begin Application.MessageBox('名称不能为空!', '提示', 0); Exit; end; mvalue := TcxTextEdit(Sender).EditingText; if Trim(mvalue) = '' then begin mvalue := ''; end; with ClientDataSet1 do begin Edit; FieldByName('Note1').Value := mvalue; Post; end; with ADOQueryCmd do begin Close; SQL.Clear; sql.Add('Update KH_Zdy Set Note1=''' + Trim(mvalue) + ''''); sql.Add(' where ZdyNo=''' + Trim(ClientDataSet1.fieldbyname('ZdyNo').AsString) + ''''); ExecSQL; end; end; procedure TfrmZDYHelpSelXR.Tv2CellDblClick(Sender: TcxCustomGridTableView; ACellViewInfo: TcxGridTableDataCellViewInfo; AButton: TMouseButton; AShift: TShiftState; var AHandled: Boolean); begin ClientDataSet2.delete; end; procedure TfrmZDYHelpSelXR.ZDYNameChange(Sender: TObject); begin if ADOQueryMain.Active then begin SDofilter(ADOQueryMain, SGetFilters(Panel1, 1, 2)); SCreateCDS(ADOQueryMain, ClientDataSet1); SInitCDSData(ADOQueryMain, ClientDataSet1); end; end; procedure TfrmZDYHelpSelXR.V1Column1PropertiesChange(Sender: TObject); begin if ClientDataSet1.FieldByName('SSel').AsBoolean = True then begin with ClientDataSet2 do begin Append; FieldByName('SSel').Value := True; FieldByName('ZDYName').Value := ClientDataSet1.FieldByName('ZDYName').asstring; Post; end; end else begin // if CDS_2.Locate('ZDYName', JYXH.Text, []) = True then end; end; procedure TfrmZDYHelpSelXR.V1NamePropertiesEditValueChanged(Sender: TObject); var maxno, mvalue: string; begin mvalue := TcxTextEdit(Sender).EditingText; if Trim(mvalue) = '' then begin //Application.MessageBox('名称不能为空!','提示',0); Exit; end; with ClientDataSet1 do begin Edit; FieldByName('ZdyName').Value := Trim(mvalue); //Post; end; try ADOQueryCmd.Connection.BeginTrans; with ADOQueryTemp do begin Close; SQL.Clear; SQL.Add('select * from KH_ZDY where ZdyNo=''' + Trim(flag) + ''''); open; end; if ADOQueryTemp.IsEmpty then begin with ADOQueryCmd do begin close; sql.Clear; sql.Add('insert into KH_ZDY(ZDYNo,ZDYName,Type,MainType) select :ZDYNo,:ZDYName,:Type,:MainType '); Parameters.ParamByName('ZDYNo').Value := Trim(flag); Parameters.ParamByName('ZDYName').Value := Trim(flagname); Parameters.ParamByName('Type').Value := 'Main'; Parameters.ParamByName('MainType').Value := Trim(MainType); ExecSQL; end; end; with ADOQueryCmd do begin //ClientDataSet1.DisableControls; //with ClientDataSet1 do //begin //First; //while not eof do //begin if Trim(ClientDataSet1.FieldByName('ZDYNO').AsString) = '' then begin if GetLSNo(ADOQueryTemp, maxno, 'SY', 'KH_ZDY', 3, 1) = False then begin ADOQueryCmd.Connection.RollbackTrans; //ClientDataSet1.EnableControls; Application.MessageBox('取最大编号失败!', '提示', 0); Exit; end; end else begin maxno := Trim(ClientDataSet1.fieldbyname('ZDYNo').AsString); end; with ADOQueryTemp do begin Close; sql.Clear; sql.add('select * from KH_Zdy where Type=''' + Trim(flag) + ''''); if Trim(MainType) <> '' then SQL.Add(' and MainType=''' + Trim(MainType) + ''''); sql.Add(' and ZdyName=''' + Trim(ClientDataSet1.fieldbyname('ZdyName').AsString) + ''''); Open; end; if ADOQueryTemp.IsEmpty = False then begin if ADOQueryTemp.RecordCount > 1 then begin ADOQueryCmd.Connection.RollbackTrans; //ClientDataSet1.EnableControls; Application.MessageBox('名称重复!', '提示', 0); Exit; end; if Trim(ClientDataSet1.fieldbyname('ZdyNo').AsString) = '' then begin ADOQueryCmd.Connection.RollbackTrans; //ClientDataSet1.EnableControls; Application.MessageBox('名称重复!', '提示', 0); Exit; end else begin if Trim(ADOQueryTemp.fieldbyname('ZdyNo').AsString) <> Trim(ClientDataSet1.fieldbyname('ZdyNo').AsString) then begin ADOQueryCmd.Connection.RollbackTrans; //ClientDataSet1.EnableControls; Application.MessageBox('名称重复!', '提示', 0); Exit; end; end; end; with ADOQueryCmd do begin Close; sql.Clear; SQL.Add('delete KH_ZDY where ZDYNO=''' + Trim(ClientDataSet1.fieldbyname('ZDYNO').AsString) + ''''); ExecSQL; end; with ADOQueryCmd do begin Close; sql.Clear; sql.Add('select * from KH_ZDY where 1<>1'); Open; end; ADOQueryCmd.Append; ADOQueryCmd.FieldByName('ZDYNo').Value := Trim(maxno); ADOQueryCmd.FieldByName('ZDYName').Value := ClientDataSet1.fieldbyname('ZDYName').AsString; ADOQueryCmd.FieldByName('note').Value := Trim(snote); //ADOQueryCmd.FieldByName('orderno').Value:=ClientDataSet1.fieldbyname('Name').AsString; ADOQueryCmd.FieldByName('Type').Value := flag; ADOQueryCmd.FieldByName('valid').Value := 'Y'; if Trim(MainType) <> '' then ADOQueryCmd.FieldByName('MainType').Value := Trim(MainType); //ADOQueryCmd.FieldByName('sel').Value:=0; ADOQueryCmd.Post; ClientDataSet1.Edit; ClientDataSet1.FieldByName('ZDYNo').Value := Trim(maxno); //ClientDataSet1.Post; // Next; //end; //end; // ClientDataSet1.EnableControls; end; ADOQueryCmd.Connection.CommitTrans; //Application.MessageBox('保存成功!','提示',0); //TV1.OptionsData.Editing:=False; //TV1.OptionsSelection.CellSelect:=False; except ADOQueryCmd.Connection.RollbackTrans; Application.MessageBox('保存失败!', '提示', 0); end; end; procedure TfrmZDYHelpSelXR.V1NotePropertiesEditValueChanged(Sender: TObject); var mvalue: string; begin if Trim(ClientDataSet1.fieldbyname('ZdyName').AsString) = '' then begin Application.MessageBox('名称不能为空!', '提示', 0); Exit; end; mvalue := TcxTextEdit(Sender).EditingText; if Trim(mvalue) = '' then begin mvalue := ''; end; with ClientDataSet1 do begin Edit; FieldByName('Note').Value := mvalue; Post; end; with ADOQueryCmd do begin Close; SQL.Clear; sql.Add('Update KH_Zdy Set Note=''' + Trim(mvalue) + ''''); sql.Add(' where ZdyNo=''' + Trim(ClientDataSet1.fieldbyname('ZdyNo').AsString) + ''''); ExecSQL; end; end; procedure TfrmZDYHelpSelXR.FormDestroy(Sender: TObject); begin frmZDYHelpSelXR := nil; end; end.