DLL问题!倾囊相送!希望大家都来讨论,见者有分! ( 积分: 241 )

  • 主题发起人 主题发起人 hunzean
  • 开始时间 开始时间
H

hunzean

Unregistered / Unconfirmed
GUEST, unregistred user!
先说问题:
我有一个数据库,存放了很多的设备的基础信息(包括厂商、型号等)和相关其他信息。别人需要查设备的信息。为了不让别人访问我的数据库,想做一个COM或者DLL。目前我想做个DLL,在DLL第一次调用时,把数据库里的信息读到内存,用数组存着。以后每次调用时,均使用这个数组。
目前,有几个疑问:
1。DLL中怎么读取数据库里信息,用ADO还是其他?若有个小例子则更好。
2。怎么控制只读一次数据库?是不是第一次进来读完数据库时,将一个全局变量置为True,第二次进来的时候判断这个变量。这样可以吗?DLL中是否有这样功能的全局变量?
3。由于DLL中有一定的运算。我会在运算过程中设置一些变量和数组,用于存放中间运算数据。当一个引用中的运算没有完成时,第二个引用也开始运算。是不是和第一次的应用有冲突,怎么避免?听说用Session,怎么用?希望各位给我个例子。
我的邮箱Alichuang@cn.nwcyberbase.com
 
先说问题:
我有一个数据库,存放了很多的设备的基础信息(包括厂商、型号等)和相关其他信息。别人需要查设备的信息。为了不让别人访问我的数据库,想做一个COM或者DLL。目前我想做个DLL,在DLL第一次调用时,把数据库里的信息读到内存,用数组存着。以后每次调用时,均使用这个数组。
目前,有几个疑问:
1。DLL中怎么读取数据库里信息,用ADO还是其他?若有个小例子则更好。
2。怎么控制只读一次数据库?是不是第一次进来读完数据库时,将一个全局变量置为True,第二次进来的时候判断这个变量。这样可以吗?DLL中是否有这样功能的全局变量?
3。由于DLL中有一定的运算。我会在运算过程中设置一些变量和数组,用于存放中间运算数据。当一个引用中的运算没有完成时,第二个引用也开始运算。是不是和第一次的应用有冲突,怎么避免?听说用Session,怎么用?希望各位给我个例子。
我的邮箱Alichuang@cn.nwcyberbase.com
 
你的意思是只有DLL能打开数据库,其他程序都不能打开;
这样做:
DLL中用全局变量(动态数组)保存;
初始化(如果有FORM也可在FORMSHOW中)是就读数据,放入全局变量;
读成功返回TRUE没读成功报错(或有个标记);
这些数据只要DLL还在调用,就一直有;直到FREELIBRARY;

但数据库不能太大,否则数据要传给应用程序就麻烦了(地址映射);
问题3较麻烦,尽量不要同时操作;或者加个全局变量表示当前状态:在读,在写。。。
等标记改正后再操作;

*********************
这样编程有意义吗?什么类型的数据库别人打不开?
如果是大型数据库,用DLL不合适,自找麻烦。
小型数据库编程人员总有办法打开;
 
To jlyin:
可否给我一个demo? 包括问题1和问题2。我的邮箱:Alichuang@cn.nwcyberbase.com
 
>>为了不让别人访问我的数据库
>>在DLL第一次调用

这样的话与程序控制加密数据库不是更方便操作??

如果把数据库加密可,就可以放心别人不会用其他的编辑器打开了!
 
请根据我的问题回答,因为老板要我这样做!
 
问题3不是说明了吗?
比如全局变量:
State1:Byte;//0:空闲;1:在读(F1调用中);2:在写(F2调用中);
然后在函数中F1第一行:
begin
if State1>0 then begin Result:=false;exit;end;
State1:=1

try
...
result:=true;
finally
State1:=0;
end;
end

F2类似;

至于DLL,我用的都不与数据库连接
 
>>1。DLL中怎么读取数据库里信息,用ADO还是其他?若有个小例子则更好。
使用delphi的ADO相对会容易一些,网上也有例子,很容易,如果找不到可以联系我
>>2。怎么控制只读一次数据库?是不是第一次进来读完数据库时,将一个全局变量置为True,第二次进来的时候判断这个变量。这样可以吗?DLL中是否有这样功能的全局变量?
尽量不要这么作,如果数据库有更新,你将无法更新你的数据,最好是每次需要数据的时候,查询数据库,ADO好像有一个bug如果同时使用两个连接的时候,如果一个连接更新了,另一个连接,不会马上反应出来,有一个延时,是不是对你有影响
>>3。由于DLL中有一定的运算。我会在运算过程中设置一些变量和数组,用于存放中间运算数据。当一个引用中的运算没有完成时,第二个引用也开始运算。是不是和第一次的应用有冲突,怎么避免?听说用Session,怎么用?希望各位给我个例子。
如果你使用了全局的或共享的数组和变量,就需要数据同步可以使用线程锁或互斥体等同步机制
Lock := TCriticalSection.Create;
Lock.Enter;
//向全局的或共享的数组和变量写数据
MyWriteData();
Lock.Leave;
 
我在网上找了半天,没有发现这样的例子。请给我一个可以运行的,谢谢。
Alichuang@cn.nwcyberbase.com
 
Dll中的数据库用什么都可以的,如果不想让别人访问,那就用一个全局变量
 
后退
顶部