📄 unitdm.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 + -