⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unitdm.pas

📁 手机批发商进销存管理
💻 PAS
字号:
unit UnitDM;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Db, ADODB, Menus, Comctrls, Registry, IniFiles;

const INIFILE = 'Xstxgc.ini';
const REGSHOPMIS = '\Software\XstxgcMis\1.0\LastLogin';
const ODBC_DSN_NAME='XstxgcMis';
const DATABASE_NAME='Db\Xstxgc.dat';
const BAK_DATABASE_NAME='Db\__Xstxgc.dat';

type
  TDM1 = class(TDataModule)
    ADOConnection1: TADOConnection;
    ADOQuery1: TADOQuery;
    ADOQuery2: TADOQuery;
    ADOQuery3: TADOQuery;
    procedure DataModuleCreate(Sender: TObject);
    procedure DataModuleDestroy(Sender: TObject);
  private
    ConnctStr:string;
    procedure ReadIni;
    procedure AutoRegDSN;
  public
    procedure GetGoodsNameType;
    procedure GetGoodsOwner;
  end;

var
  DM1: TDM1;
  UserID,UserName,UserPWD : String;
  strDSN,strDBPATH,strPWD : String;
  strBackJpg,strWelCome : String;
  TsGoodsOwner: TStrings;
  TsGoodsNameType: TStringList;

implementation

uses UnitPublicFunction;

{$R *.dfm}

procedure TDM1.AutoRegDSN;
var
  registerTemp: TRegistry;
  bData: array[0..0]of byte;
  SysDir: array[0..255] of char;
begin
  try
    registerTemp := TRegistry.Create;
    registerTemp.RootKey := HKEY_LOCAL_MACHINE;

    if not registerTemp.OpenKey('Software\ODBC\ODBC.INI\ODBC Data Sources', True) then
    begin
      registerTemp.CloseKey;
      Exit;
    end;
    registerTemp.WriteString(ODBC_DSN_NAME, 'Microsoft Access Driver (*.mdb)'); //数据源名称和数据库类型
    registerTemp.CloseKey;

    if not registerTemp.OpenKey('Software\ODBC\ODBC.INI\'+ODBC_DSN_NAME, True) then
    begin
      registerTemp.CloseKey;
      Exit;
    end;
    registerTemp.WriteString('DBQ', ExtractFilePath(Application.ExeName) + DATABASE_NAME);   //数据库路径
    registerTemp.WriteString('Description', '浠水通信广场商品管理系统数据源');                           //数据库描述
    GetSystemDirectory(SysDir, sizeof(SysDir)-1);
    if not FileExists(SysDir + '\odbcjt32.dll') then
    begin
      registerTemp.CloseKey;    
      Application.MessageBox(PChar('数据源驱动程序 '+SysDir + '\odbcjt32.dll'+' 没有安装'), '错误', MB_OK);
      Exit;
    end;
    registerTemp.WriteString('Driver', SysDir + '\odbcjt32.dll');                            //驱动程序,可见ODBCINST.INI
    registerTemp.WriteInteger('DriverId', 25 );                                              //驱动程序标识,0x00000019(25)数字,表示驱动程序标识,不能改变
    registerTemp.WriteString('FIL', 'Ms Access;');                                           //Filter依据
    registerTemp.WriteInteger('SafeTransaction', 0 );                                        //支持的事务操作数目
    registerTemp.WriteString('UID', '');                                                     //用户名称
    bData[0] := 0;
    registerTemp.WriteBinaryData('Exclusive', bData, 1);                                     //非独占方式
    registerTemp.WriteBinaryData('ReadOnly', bData, 1);                                      //非只读方式
    registerTemp.CloseKey;

    if not registerTemp.OpenKey('Software\ODBC\ODBC.INI\'+ODBC_DSN_NAME+'\Engines\Jet', True) then
    begin
      registerTemp.CloseKey;
      Exit;
    end;
    registerTemp.WriteString('ImplicitCommitSync', 'Yes');                      //是否立即反映数据修改
    registerTemp.WriteInteger('MaxBufferSize', 512 );                           //缓冲区大小
    registerTemp.WriteInteger('PageTimeout', 10 );                              //页超时
    registerTemp.WriteInteger('Threads', 3 );                                   //支持的线程数目
    registerTemp.WriteString('UserCommitSync', 'Yes');                          //是否立即将数据修改反映到用户
    registerTemp.CloseKey;
  finally
    registerTemp.CloseKey;
    registerTemp.Free;
  end;
end;

procedure TDM1.ReadIni;
var
  s:string;
  ConnectIni: TIniFile;
begin
  //取INI文件参数
  s := ExtractFilePath(Application.ExeName) + INIFILE;
  try
    ConnectIni := Nil;
    ConnectIni := TIniFile.Create(s);
    if FileExists(s) then
    begin
      strBackJpg := ConnectIni.ReadString('App','BackJpg','ERROR');
      strWelCome := ConnectIni.ReadString('App','WelCome','ERROR');
      if strWelCome='' then strWelCome := '欢迎使用本系统!';
    end
    else
    begin
      ConnectIni.WriteString('App','BackJpg',ExtractFilePath(Application.ExeName) + 'Jpg\main.jpg');
      ConnectIni.WriteString('App','WelCome','');
    end;
  finally
    ConnectIni.Free;
  end;
end;

procedure TDM1.DataModuleCreate(Sender: TObject);
begin
  //读入INI文件
//  ReadIni;
  strDSN := ODBC_DSN_NAME;
  strDBPATH := ExtractFilePath(Application.ExeName)+ DATABASE_NAME;
  strPWD := '05A7A8A005AAACA3D6C5CCA9A161A9A7AB';
  //自动注册数据源DSN
  AutoRegDSN;
  //初始化连接字符串
  ConnctStr := 'Provider=MSDASQL.1;'
              +'Password='
              +DePwd(strPWD,1)
              +';Persist Security Info=True;User ID=Admin;Extended Properties="DSN='
              +strDSN
              +';DBQ='
              +strDBPATH
              +';DriverId=281;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;PWD='
              +DePwd(strPWD,1)
              +';UID=admin;"';
  //打开连接
  try
    ADOConnection1.Close;
    ADOConnection1.ConnectionString := ConnctStr;
    ADOConnection1.Open;
  except
    Application.MessageBox('打开数据库出错,请重新启动!如果重新启动后仍有错误,请联系系统管理员!', '提示', MB_OK or MB_ICONERROR);
    Application.Terminate;
  end;
end;

procedure TDM1.DataModuleDestroy(Sender: TObject);
var
  i: integer;
  strDBPATH, strBAKDBPATH: string;
begin
  ADOConnection1.Close;

  if TsGoodsNameType<>nil then
  begin
    for i:=TsGoodsNameType.Count-1 downto 0 do
      TsGoodsNameType.Delete(i);
  end;

  TsGoodsNameType.Free;
  TsGoodsOwner.Free;
  
  //备份文件
  strDBPATH := ExtractFilePath(Application.ExeName)+ DATABASE_NAME;
  strBAKDBPATH := ExtractFilePath(Application.ExeName)+ BAK_DATABASE_NAME;
  CopyFile(PChar(strDBPATH), PChar(strBAKDBPATH), False);
  strBAKDBPATH := 'C:\'+ BAK_DATABASE_NAME;
  CopyFile(PChar(strDBPATH), PChar(strBAKDBPATH), False);
end;

procedure TDM1.GetGoodsNameType;
var
  i : integer;
  tmpstr1,tmpstr2,tmpstr3 : string;
  tmpstrs : TStrings;
begin
  if TsGoodsNameType<>Nil then
  begin
    for i:=TsGoodsNameType.Count-1 downto 0 do
      TsGoodsNameType.Delete(i);
    TsGoodsNameType.Free;
    TsGoodsNameType := Nil;
  end;
  TsGoodsNameType := TStringList.Create;
  try
    DM1.ADOQuery1.Close;
    DM1.ADOQuery1.SQL.Clear;
    DM1.ADOQuery1.SQL.Text := ' select * from Tab_GoodsNameType'
                             +' order by GoodsName ';
    DM1.ADOQuery1.Open;
    DM1.ADOQuery1.First;
    i := 0;
    While Not DM1.ADOQuery1.Eof do
    begin
      tmpstrs := TStringList.Create;
      tmpstr1 := DM1.ADOQuery1.FieldByName('GoodsName').AsString;
      tmpstr2 := DM1.ADOQuery1.FieldByName('GoodsType').AsString;
      tmpstr3 := DM1.ADOQuery1.FieldByName('HelpCode').AsString;
      tmpstrs.Add(tmpstr1);
      tmpstrs.Add(tmpstr2);
      tmpstrs.Add(tmpstr3);
      TsGoodsNameType.AddObject(IntToStr(i),tmpstrs);
      i := i + 1;
      DM1.ADOQuery1.Next;
    end;
  finally
    DM1.ADOQuery1.Close;
  end;
end;

procedure TDM1.GetGoodsOwner;
begin
  if TsGoodsOwner<>Nil then
  begin
    TsGoodsOwner.Free;
    TsGoodsOwner := Nil;
  end;
  TsGoodsOwner := TStringList.Create;
  try
    DM1.ADOQuery1.Close;
    DM1.ADOQuery1.SQL.Clear;
    DM1.ADOQuery1.SQL.Text := ' select * from Tab_GoodsOwner ';
    DM1.ADOQuery1.Open;
    DM1.ADOQuery1.First;
    While Not DM1.ADOQuery1.Eof do
    begin
      TsGoodsOwner.Add(DM1.ADOQuery1.FieldByName('GoodsOwner').AsString);
      DM1.ADOQuery1.Next;
    end;
  finally
    DM1.ADOQuery1.Close;
  end;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -