程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 怎樣在自己的進銷存裡導入速達、管家婆和用友的數據

怎樣在自己的進銷存裡導入速達、管家婆和用友的數據

編輯:Delphi
 unit UpdateSD3000;

  interface

  uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, EditForm, KsControls, KsLabels, KsSkinLabels, dxEditor,
    dxExEdtr, dxEdLib, dxCntner, KsButtons, KsSkinButtons, KsTabs,
    KsSkinTabs, KsHooks, KsForms, KsSkinForms, KsEdits, KsComboBoxs,
    KsSkinComboBoxs, DB, IBDatabase, Registry, SysPublic, IBCustomDataSet,
    Grids, DBGrids, ADODB;

  type
    TfrmUpdateSD3000 = class(TfrmEditForm)
      PageControl: TSeSkinPageControl;
      TabSD3000: TKsCustomTabSheet;
      KsCustomTabSheet2: TKsCustomTabSheet;
      bbOk: TSeSkinButton;
      bbNo: TSeSkinButton;
      OpenDlg: TOpenDialog;
      edtSDData: TdxButtonEdit;
      SeSkinLabel1: TSeSkinLabel;
      SeSkinLabel2: TSeSkinLabel;
      SeSkinLabel3: TSeSkinLabel;
      SeSkinLabel4: TSeSkinLabel;
      SeSkinLabel5: TSeSkinLabel;
      edtServeName: TdxEdit;
      SeSkinLabel6: TSeSkinLabel;
      SeSkinLabel7: TSeSkinLabel;
      edtLoginName: TdxEdit;
      SeSkinLabel8: TSeSkinLabel;
      edtLoginPass: TdxEdit;
      bbLinkServer: TSeSkinButton;
      SeSkinLabel9: TSeSkinLabel;
      SeSkinLabel10: TSeSkinLabel;
      SeSkinLabel11: TSeSkinLabel;
      IBDatabase1: TIBDatabase;
      IBTransaction1: TIBTransaction;
      IBDataSet1: TIBDataSet;
      AdoDataSet: TADODataSet;
      KsCustomTabSheet3: TKsCustomTabSheet;
      SeSkinLabel15: TSeSkinLabel;
      edtYYData: TdxButtonEdit;
      SeSkinLabel12: TSeSkinLabel;
      SeSkinLabel13: TSeSkinLabel;
      SeSkinLabel14: TSeSkinLabel;
      SeSkinLabel16: TSeSkinLabel;
      SQLADOConnet: TADOConnection;
      SQLDataSet: TADODataSet;
      cbxSQLDB: TdxPickEdit;
      procedure edtSDDataButtonClick(Sender: TObject; AbsoluteIndex: Integer);
      procedure bbNoClick(Sender: TObject);
      procedure bbOkClick(Sender: TObject);
      procedure edtYYDataButtonClick(Sender: TObject;
        AbsoluteIndex: Integer);
      procedure bbLinkServerClick(Sender: TObject);
    private
      { Private declarations }
      bReturn: Boolean;
      function GetSD3000Path: string; //得到速達的安裝目錄
      function GetUFERPPath: string; //得到用友的安裝目錄
      function ConectGrASP(sData: string): Boolean;
      function ConectSD3000(sDBPath: string): Boolean;
      function OpenIBDataSet(sDBName: string): Boolean;
      procedure InputGrASP(sSql1, sSql2, sField1, sFIEld2, sConst: string);
      procedure InputSD3000(sSql1, sSql2, sField1, sFIEld2, sConst: string);
      procedure InputAllSD3000Data; //全部速達數據
      procedure InputAllGrASPData; //全部管家婆數據
      procedure InputAllUfSoft80Data; //全部用友數據
      procedure MainShow;
      procedure LoadData;
    public
      { Public declarations }
    end;

  function UpdateSD3000Show: Boolean;
  implementation

  uses DBData;
  {$R *.dfm}

  function UpdateSD3000Show: Boolean;
  var
    frmUpdateSD3000: TfrmUpdateSD3000;
  begin
    frmUpdateSD3000 := TfrmUpdateSD3000.Create(Application);
    with frmUpdateSD3000 do
    begin
      MainShow;
      Result := bReturn;
      Free;
    end;
  end;

  procedure TfrmUpdateSD3000.MainShow;
  begin
    LoadData;
    ShowModal;
  end;

  function TfrmUpdateSD3000.GetSD3000Path: string;
  var
    Reg: TRegistry;
  begin
    Result := '';
    Reg := TRegistry.Create;
    try
      Reg.RootKey := HKEY_LOCAL_MacHINE;
      if Reg.OpenKey('SoftwareSuperDataSD3000 et', False) then
        Result := Reg.ReadString('RemoteDBDir')
    finally
      Reg.CloseKey;
      Reg.Free;
    end;
  end;

  function TfrmUpdateSD3000.GetUFERPPath: string;
  var
    Reg: TRegistry;
  begin
    Result := '';
    Reg := TRegistry.Create;
    try
      Reg.RootKey := HKEY_LOCAL_MacHINE;
      if Reg.OpenKey('SoftwareSuperDataSD3000 et', False) then
        Result := Reg.ReadString('RemoteDBDir')
    finally
      Reg.CloseKey;
      Reg.Free;
    end;
  end;

  procedure TfrmUpdateSD3000.LoadData;
  begin
    PageControl.TabIndex := 0;
    edtSDData.Text := GetSD3000Path;
    edtYYData.text := GetUFERPPath;
  end;

  procedure TfrmUpdateSD3000.edtSDDataButtonClick(Sender: TObject;
    AbsoluteIndex: Integer);
  var
    sFileName: string;
  begin
    inherited;
    OpenDlg.FileName := edtSDData.Text;
    if OpenDlg.Execute then
    begin
      sFileName := OpenDlg.FileName;
      edtSDData.Text := sFileName;
    end;
  end;

  function TfrmUpdateSD3000.ConectSD3000(sDBPath: string): Boolean;
  begin
    Result := False;
    if Trim(sDBPath) = '' then
    begin
      ShowMsg('請輸入數據庫路徑!');
      Exit;
    end;
    if not FileExists(sDBPath) then
    begin
      ShowMsg('數據庫路徑不正確,系統找不到指定的文件!');
      Exit;
    end;
    IBDatabase1.DefaultTransaction := IBTransaction1;
    IBDatabase1.DatabaseName := sDBPath;
    try
      IBDatabase1.Open;
    except
    end;
    if IBDatabase1.Connected then
      Result := True
    else
      ShowMsg('連接數據庫出錯,請輸入正確的速達數據庫文件!');
  end;

  function TfrmUpdateSD3000.OpenIBDataSet(sDBName: string): Boolean;
  begin
    Result := True;
    if IBDataSet1.Active then
      IBDataSet1.Close;
    IBDataSet1.SelectSQL.Text := sDBName;
    try
      IBDataSet1.Open;
    except
      result := false;
    end;
  end;

  procedure TfrmUpdateSD3000.bbNoClick(Sender: TObject);
  begin
    inherited;
    Close;
  end;

  procedure TfrmUpdateSD3000.bbOkClick(Sender: TObject);
  begin
    inherited;
    if PageControl.TabIndex = 0 then
      InputAllSD3000Data
    else if PageControl.TabIndex = 1 then
      InputAllUfSoft80Data
    else if PageControl.TabIndex = 2 then
      InputAllGrASPData;
  end;

  procedure TfrmUpdateSD3000.InputAllUfSoft80Data;
  begin
    ShowMsg('請選擇正確的用友財務UFERP-M8系列的數據庫文件!');
  end;

  procedure TfrmUpdateSD3000.InputAllSD3000Data;
  var
    sSql1, sSql2, sField1, sFIEld2, sConst: string;
  begin
    if not ConectSD3000(edtSDData.Text) then
      Exit;
    Screen.Cursor := crHourglass;
    sSql1 := '';
    sSql2 := '';
    sFIEld1 := '';
    sFIEld2 := '';
    sConst := '';
    //部門
    sSql1 := 'SELECT * FROM DEPARTMENT';
    sSql2 := 'SELECT * FROM BaseInfo';
    sFIEld2 := 'Mode,Name1';
    sFIEld1 := '!CONST,Name';
    sConst := intToStr(BASE_DEPT);
    InputSD3000(sSql1, sSql2, sField1, sFIEld2, sConst);
    //職員類別
    sSql1 := 'SELECT * FROM EMPTYPE';
    sSql2 := 'SELECT * FROM BaseInfo';
    sFIEld2 := 'Mode,Name1';
    sFIEld1 := '!CONST,Name';
    sConst := intToStr(BASE_EMPLOYE_SORT);
    InputSD3000(sSql1, sSql2, sField1, sFIEld2, sConst);
    //職員
    sSql1 := 'SELECT e.*,s.Name as SexName,d.Name as DEPARTMENTName,t.Name as EmpTypeName '
      +
      'FROM EMPLOY e,EMPTYPE t,SEX s,DEPARTMENT d ' +
      'WHERE e.EMPTYPEID=t.EmpTYPEID and e.Sex=s.ID and e.DEPARTMENT=d.ID';
    sSql2 := 'SELECT * FROM Employe';
    sFIEld2 := 'Usercode,Name,Business,PostalCode,Place,DutyDate,Wage,ID_Card,Address,'
      +
      'Sex,ComeDate,EMail,Learning,PhoneCall,Phone,PhoneMove,Dept,Sort';
    sFIEld1 := 'EMPCODE,NAME,DUTY,POSTCODE,FOREFATHER,POSTDATE,PAY,IDCARD,ADDRESS,'
      +
      'SEXNAME,BIRTHDAY,EMAIL,CULTURE,BP,TELEPHONE,HOMEPHONE,DEPARTMENTNAME,EMPTYPENAME';
    InputSD3000(sSql1, sSql2, sField1, sFIEld2, sConst);
    //商品單位
    sSql1 := 'SELECT * FROM UNIT';
    sSql2 := 'SELECT * FROM BaseInfo';
    sFIEld2 := 'Mode,Name1';
    sFIEld1 := '!CONST,Name';
    sConst := intToStr(BASE_WARE_UNIT);
    InputSD3000(sSql1, sSql2, sField1, sFIEld2, sConst);
    //倉庫
    sSql1 := 'SELECT * FROM STORE';
    sSql2 := 'SELECT * FROM Depot';
    sFIEld2 := 'UserCode,Name,Address,Memo';
    sFIEld1 := 'STOREID,NAME,LOCATION,Memo';
    InputSD3000(sSql1, sSql2, sField1, sFIEld2, sConst);
    //商品分類
    sSql1 := 'SELECT * FROM GOODSTYPE';
    sSql2 := 'SELECT * FROM BaseInfo';
    sFIEld2 := 'mode,name1,name2';
    sFIEld1 := '!CONST,Name,description';
    sConst := intToStr(BASE_WARE_SORT);
    InputSD3000(sSql1, sSql2, sField1, sFIEld2, sConst);
    //商品
    sSql1 :=
      'SELECT g.*,t.name as GTypeName FROM GOODS g,GOODSTYPE t WHERE g.goodstypeid=t.goodstypeid';
    sSql2 := 'SELECT * FROM Ware';
    sFIEld2 := 'UserCode, Name, ShortName,Sort,Unit,Price1,ConstPrice';
    sFIEld1 := 'goodsid,name,name,GTypeName,Unit,sprice,Pprice';
    InputSD3000(sSql1, sSql2, sField1, sFIEld2, sConst);
    //地區
    sSql1 := 'SELECT * FROM AREA';
    sSql2 := 'SELECT * FROM BaseInfo';
    sFIEld2 := 'Mode,Name1';
    sFIEld1 := '!CONST,Name';
    sConst := intToStr(BASE_AREA);
    InputSD3000(sSql1, sSql2, sField1, sFIEld2, sConst);
    //客戶
    sSql1 :=
      'SELECT C.*,A.Name as AreaName FROM CLIENT c LEFT JOIN AREA A on A.AREAID=c.AREAID';
    sSql2 := 'SELECT * FROM Unit';
    sFIEld2 := 'Mode,UserCode,ShortName,Name,AreaName,LinkMan,Phone,PhoneMove,PhoneFax,PostalCode,'
      +
      'Address,Memo,Banking,Accounts,WWW,EMail,Receive';
    sField1 := '!CONST,ClIEntID,ShortName,Name,AreaName,CONTATOR,Phone,MOBILEPHONE,Fax,zip,'
      +
      'Address,memo,bank,bankID,URL,EMail,BALANCE';
    sConst := IntToStr(BASE_CLIENT);
    InputSD3000(sSql1, sSql2, sField1, sFIEld2, sConst);
    //供應商
    sSql1 :=
      'SELECT C.*,A.Name as AreaName FROM VENDOR c LEFT JOIN AREA A on A.AREAID=c.AREAID';
    sSql2 := 'SELECT * FROM Unit';
    sFIEld2 := 'Mode,UserCode,ShortName,Name,AreaName,LinkMan,Phone,PhoneMove,PhoneFax,PostalCode,'
      +
      'Address,Memo,Banking,Accounts,WWW,EMail,Payable';
    sFIEld1 := '!CONST,VENDORID,ShortName,Name,AreaName,CONTATOR,Phone,MOBILEPHONE,Fax,zip,'
      +
      'Address,memo,bank,bankID,URL,EMail,BALANCE';
    sConst := IntToStr(BASE_PROVIDE);
    InputSD3000(sSql1, sSql2, sField1, sFIEld2, sConst);

    ShowMsg('導入數據成功!');
    Screen.Cursor := crDefault;
  end;

  procedure TfrmUpdateSD3000.InputAllGrASPData;
  var
    sSqlData: string;
    sSql1, sSql2, sField1, sFIEld2, sConst: string;
  begin
    sSql1 := '';
    sSql2 := '';
    sFIEld1 := '';
    sFIEld2 := '';
    sConst := '';
    if cbxSQLDB.ItemIndex < 0 then
      Exit;
    sSqlData := cbxSQLDB.Items.Strings[cbxSQLDB.ItemIndex];
    if sSQLData = '' then
    begin
      ShowMsg('請先連接SQLServer數據庫!');
      Exit;
    end;
    if not ConectGrASP(sSqlData) then
    begin
      ShowMsg('連接SQLServer數據庫出錯,請重新輸入服務器名、用戶名、密碼!');
      Exit;
    end;
    Screen.Cursor := crHourglass;
    //倉庫
    sSql1 := 'SELECT * FROM STOCK WHERE TYPEID<>''00000''';
    sSql2 := 'SELECT * FROM Depot';
    sFIEld1 := 'USERCODE,FULLNAME,COMMENT';
    sFIEld2 := 'UserCode,Name,Memo';
    InputGrASP(sSql1, sSql2, sField1, sFIEld2, sConst);
    //商品
    sSql1 := 'SELECT * FROM ptype WHERE TYPEID<>''00000''';
    sSql2 := 'SELECT * FROM Ware';
    sFIEld1 := 'UserCode, FullName, Name,Unit1,preprice2,preprice1';
    sFIEld2 := 'UserCode, Name, ShortName,Unit,Price1,ConstPrice';
    InputGrASP(sSql1, sSql2, sField1, sFIEld2, sConst);
    //部門
    sSql1 := 'SELECT * FROM Department WHERE TYPEID<>''00000''';
    sSql2 := 'SELECT * FROM BaseInfo';
    sFIEld1 := '!CONST,FullName';
    sFIEld2 := 'Mode,Name1';
    sConst := intToStr(BASE_DEPT);
    InputGrASP(sSql1, sSql2, sField1, sFIEld2, sConst);
    //職員
    sSql1 := 'SELECT D.FullName AS DepName, E.* FROM employee E LEFT OUTER JOIN '
      +
      'Department D ON E.Department = D.typeid WHERE E.TYPEID<>''00000''';
    sSql2 := 'SELECT * FROM Employe';
    sFIEld1 := 'UserCode,FullName,ADDRESS,TEL,DepName,Comment';
    sFIEld2 := 'Usercode,Name,Address,Phone,Dept,Memo';
    InputGrASP(sSql1, sSql2, sField1, sFIEld2, sConst);
    //地區
    sSql1 := 'SELECT * FROM AreaType WHERE TYPEID<>''00000''';
    sSql2 := 'SELECT * FROM BaseInfo';
    sFIEld1 := '!CONST,FullName';
    sFIEld2 := 'Mode,Name1';
    sConst := intToStr(BASE_AREA);
    InputGrASP(sSql1, sSql2, sField1, sFIEld2, sConst);
    //客戶
    sSql1 := 'SELECT A.FullName AS AreaName, B.* FROM btype B LEFT OUTER JOIN AreaType A'
      +
      ' ON B.AreaTypeID = A.TypeID WHERE B.TypeID<>''00000''';
    sSql2 := 'SELECT * FROM Unit';
    sFIEld1 :=
      '!CONST,UserCode,Name,FullName,AreaName,PERSON,TELANDADDRESS,FAX,POSTCODE,AREA,Comment,BANKANDACOUNT,BANKANDACOUNT,ARTotal';
    sFIEld2 :=
      'Mode,UserCode,ShortName,Name,AreaName,LinkMan,Phone,PhoneFax,PostalCode,Address,Memo,Banking,Accounts,Receive';
    sConst := intToStr(BASE_CLIENT);
    InputGrASP(sSql1, sSql2, sField1, sFIEld2, sConst);
    //供應商
    sSql1 := 'SELECT A.FullName AS AreaName, B.* FROM btype B LEFT OUTER JOIN AreaType A'
      +
      ' ON B.AreaTypeID = A.TypeID WHERE B.TypeID<>''00000''';
    sSql2 := 'SELECT * FROM Unit';
    sFIEld1 :=
      '!CONST,UserCode,Name,FullName,AreaName,PERSON,TELANDADDRESS,FAX,POSTCODE,AREA,Comment,BANKANDACOUNT,BANKANDACOUNT,APTotal';
    sFIEld2 :=
      'Mode,UserCode,ShortName,Name,AreaName,LinkMan,Phone,PhoneFax,PostalCode,Address,Memo,Banking,Accounts,Payable';
    sConst := intToStr(BASE_PROVIDE);
    InputGrASP(sSql1, sSql2, sField1, sFIEld2, sConst);
    ShowMsg('導入數據成功!');
    Screen.Cursor := crDefault;
  end;

  procedure TfrmUpdateSD3000.InputGrASP(sSql1, sSql2, sField1, sFIEld2, sConst:
    string);
  begin
    if OpenDataSetEx(SQLADOConnet, SQLDataSet, sSql1) and OpenDataSet(AdoDataSet, sSql2) then
      DataSetInput(SQLDataSet, AdoDataSet, sField1, sFIEld2, sConst);
  end;

  procedure TfrmUpdateSD3000.InputSD3000(sSql1, sSql2, sField1, sFIEld2, sConst:
    string);
  begin
    if OpenIBDataSet(sSql1) and OpenDataSet(AdoDataSet, sSql2) then
      DataSetInput(IBDataSet1, AdoDataSet, sField1, sFIEld2, sConst);
  end;

  procedure TfrmUpdateSD3000.edtYYDataButtonClick(Sender: TObject;
    AbsoluteIndex: Integer);
  var
    sFileName: string;
  begin
    inherited;
    OpenDlg.FileName := edtYYData.Text;
    if OpenDlg.Execute then
    begin
      sFileName := OpenDlg.FileName;
      edtYYData.Text := sFileName;
    end;
  end;

  function TfrmUpdateSD3000.ConectGrASP(sData: string): Boolean;
  var
    sServer, sName, sPass: string;
  begin
    sServer := edtServeName.Text;
    sName := edtLoginName.Text;
    sPass := edtLoginPass.Text;
    if Trim(sServer) = '' then
      sServer := 'LocalHost';
    if Trim(sName) = '' then
      sName := 'sa';
    with SQLADOConnet do
    begin
      if Connected = True then
        Close;
      ConnectionString := GetSQLConnectionString(sServer, sData, sName, sPass);
      LoginPrompt := False;
      Open(sName, sPass);
      Result := Connected;
    end;
  end;

  procedure TfrmUpdateSD3000.bbLinkServerClick(Sender: TObject);
  var
    sSql, sName, sTmp: string;
  begin
    inherited;
    sSql := 'SELECT * FROM sysdatabases WHERE (dbid > 5)';
    sName := 'Name';
    sTmp := '';
    if ConectGrASP('Master') then
    begin
      if OpenDataSetEx(SQLADOConnet, SQLDataSet, sSql) then
      begin
        TableToStrings2(SQLDataSet, sName, sTmp, sTmp, #13);
        cbxSQLDB.Items.Text := sName;
        if cbxSQLDB.Items.Count > 0 then
          cbxSQLDB.ItemIndex := 0;
      end;
    end
    else
      ShowMsg('連接SQLServer數據庫出錯,請重新輸入服務器名、用戶名、密碼!');
  end;

  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved