Open AaG7xNnrgbzeyqc5woPS opened 2 years ago
Application.Initialize;
Application.Title := '潜龙贸易助手';
if LoginUser.login then
begin
Application.CreateForm(TForm_Test, Form_Test);
end;
Application.Run;
function TUser.Login: boolean
function TUser.Login: boolean;
begin
result := false;
//----建立dm_main数据窗口
//----建立数据库联结 (包括BDE,和ADO)
if not ConnectDB then exit;
// === 具体使用时,要打开这一部分,由用户输入用户名及口令! if myLogin(Funame,FUID) then begin dmmain.ForDebugUser(Funame,FUID); //用于处理调试时,修改实际用户,如超级用户 FBenQiyeName := getobjectmc('select max(qymc) from adm.qyxxb where qylx = 0 and sfxs = ''T'''); Fbqybh := getobjectbh('select max(qybh) from adm.qyxxb where qylx = 0 and sfxs = ''T''');
RightCheck.Init('ydh_local', FUID, FUName);
FxmRight := GetUser_xmRight;
dmmain.InitAfterLogin('ydh_local', Fxmright.def_xmmc, Fuid, FUName);
if assigned(application.MainForm) then
begin
application.ShowMainForm := true;
application.MainForm.Visible := true;
end;
result := true;
end
end
4. function ConnectDB: boolean;
function ConnectDB: boolean; begin result := false; if not assigned(dmMain) then dmMain := TdmMain.Create(nil);
dmMain.ADOConnection1.Connected := true; result := dmMain.ADOConnection1.Connected;
//连接成功后立即升级数据库 updateDB._UpdateDB; updateDB_202208.update_db_202208; // 增加 三个表,图纸表,图纸类型表,产品图纸对应表,以及一些约束关系
end;
## 2. 阅读上面的程序总结下:
1. 主程序最先调用:LoginUser.login
2. TUser.Login 最先调用 ConnectDB
3. dmMain 最先创建 dmMain,然后 启动 ADOConnection1 链接,最后升级数据库。
4. :heart: 所以主要查看 ConnectDB 函数
procedure Add_Default_gw_1(isShowmessage: boolean = false); //增加缺省岗位方案一。
var s: string;
i : integer;
begin
s := 'select * from adm.gwb';
if not isEmpty(s) then
begin
if isShowmessage then
raise Exception.Create('岗位表不空,不能添加缺省岗位。确定要添加缺省岗位,请先清除已有的岗位!')
end
else
for i := low(gw1) to high(gw1) do
begin
s := ' insert into adm.gwb (gwbh,gwmc) values ('
+ inttostr(i) + ','
+ quotedstr(gw1[i]) + ')';
execsql(s);
end;
end;
1.:100: 数据库链接问题的测试方法:使用 “Microsoft SQL 企业管理器”将无关数据库“脱机”处理,使用注册表编辑器,切换 数据库链接到新的数据库,启动程序,程序应该能正常链接数据库,登录,程序内的数据确保是新数据库种取出来的。如果有链接错误,立即能发现!
function ConnectDB: boolean;
begin
result := false;
if not assigned(dmMain) then
dmMain := TdmMain.Create(nil);
dmMain.ADOConnection1.Connected := true;
result := dmMain.ADOConnection1.Connected;
//连接成功后立即升级数据库
updateDB._UpdateDB;
updateDB_202208.update_db_202208; // 增加 三个表,图纸表,图纸类型表,产品图纸对应表,以及一些约束关系
end;
查看 dmMain 数据模块,可以发现跟链接数据库相关的,最关键就是 控件 ADOConnection1: Tydh_ADO_BDE_Connect
Tydh_ADO_BDE_Connect = class(Tydh_ado_Connect)
Tydh_ado_Connect = class(TADOConnection)
TydhRegister = class(TComponent)
处理windows注册表,在注册表中保存配置程序的配置信息,包括,软件的注册信息,数据库链接信息。
//-----------------------------------------------------------
// 功能描述:
// 1、进行注册表的读写,对数据库登录口令部分进行加密、解密处理;
// 2、序列号计算、校验;
// 3、序列号的破解;
// 4、决定了全部的注册项的名称;
// 5、决定了注册项的位置。
// 6、生成随机口令,对口令进行备份和恢复。
// 7. 随机口令,本意用于定期更改用户密码,使用强密码,只有软件知道密码是什么,
// 并且保存在注册表中,增加安全性。--此功能太复杂,暂时不需要。
//
// 引用的单元
// THRegister :注册表的读写
// TEncrypt :加密解密算法
//
//-----------------------------------------------------------
## 3. TInitDatabase = class(TExecSqlBatch)
在完全空白的 MS SQL SEVER 服务器上建立 用户和数据库
(* -------------------------------------------- 功能: 在完全空白的 MS SQL SEVER 服务器上建立 用户和数据库
引用控件 TExecSqlBatch TydhRegister
*)
## 4. TydhConfigConnect = class(TComponent)
**功能:**
- 1, 在网络上查找sql server 2000 数据库服务器,并注册在注册表中!
- 2,:heart: 建立ODBC_DSN interface ,并将ODBC_DSN名("ydh_qygl_Don't_delete_me")注册在注册表中!
- 3, :100: 测试ODBC_DSN自动建立功能:删除 "ydh_qygl_Don't_delete_me" ODBC 配置,再启动程序 y_qygl_crm.exe, 可以发现 配置项又出现了!
**引用:**
- TydhRegister
- TODBC_Add_DSN
- TListSQLServers
## 5. ODBC_Add_DSN
功能: 本控件TODBC_Add_DSN,根据指定参数建立ODBC数据源 引用: odbc_API ---这是一个 odbc dll库的封装
delphi 7 中的 package ,dll的调试方法:
Local tab
Use this page to run and debug projects.
Host application
Enter the path to an executable file. (Click Browse to bring up a file-selection dialog.)
If the current project is a DLL (Windows) or a shared object (Linux), use this edit box to specify a host application that calls it.
You can also enter the name of any executable that you want to run in the debugger. Then press Load to load the executable. The executable will be paused at its entry point. If there is no debug information at the entry point, the CPU window will be opened. Select Run|Run (F9) to run the executable.
If you want to run the project that you have open, there is no need to enter anything in the Host Application edit box.
ADOConnection1: Tydh_ADO_BDE_Connect; Tydh_ADO_BDE_Connec 控件重新调试 Tydh_ado_Connect 控件重新调试 当然是从基础控件一个一个调试。最后调试 Tydh_ADO_BDE_Connect
这个函数关键,如果处理的不对,会提示内部错误,猜到这个函数是关键后,一步一步跟踪可以解决问题。
procedure Tydh_ado_Connect.SetConnected(Value: Boolean);
begin
if Value then //当前要打开连接,这之前需要做
begin
if ConfigConnect then //配置连接成功?
begin
SetConnectParam; //设置ADO连接参数
ActiveOtherConnect(Value); //激活BDE连接
end;
end
else
begin
//关闭连接需要做......
ActiveOtherConnect(Value); //先关闭BDE连接
end;
inherited; //再调用 祖先类的方法,关闭或者打开ADO的连接
end;
〇、问题描述:
一、问题分析解决过程 一
总结: