大家帮忙看看,我这个DLL文件有什么问题,如能解决可再开贴加分library ConCheck;{ Important note about DLL memory management: ShareMem must be the
first unit in your library's USES clause AND your project's (select
Project-View Source) USES clause if your DLL exports any procedures or
functions that pass strings as parameters or function results. This
applies to all strings passed to and from your DLL--even those that
are nested in records and classes. ShareMem is the interface unit to
the BORLNDMM.DLL shared memory manager, which must be deployed along
with your DLL. To avoid using BORLNDMM.DLL, pass string information
using PChar or ShortString parameters. }uses
ShareMem,
SysUtils,
Classes,
AdoConEd,
ADODB,
DB,
Forms;var
SorTableName: String;
ChkTableName: String;
VehCor: String;
VehNo: String;
ADODataCon: TADOConnection;
ADOQTemp: TADOQuery;{$R *.res}function ConDB(DSStr: String; SorTName: String; ChkTName: String; AVehCor: String; AVehNo: String):Integer;stdcall; //函数返回0是未连上,返回1是连接上
begin
//读取数据源连接字符串
SorTableName := SorTName;
ChkTableName := ChkTName;
VehCor := AVehCor;
VehNo := AVehNo; if not Assigned(ADODataCon) then
ADODataCon := TADOConnection.Create(Application);
if not Assigned(ADOQTemp) then
ADOQTemp := TADOQuery.Create(Application); //如果已经处于连接状态,则先关闭,此种情况是用于在程序正常运行的时候,改变数据库连接
if ADODataCon.Connected then
begin
ADODataCon.Close;
ADODataCon.ConnectionString := DSStr;
end
else
ADODataCon.ConnectionString := DSStr; try
ADODataCon.Open;
except
On E:Exception do
begin
Result := 0;
end;
end;
Result := 1;
end;function FindVeh(VehColor:String; VehPlate:String):Integer;stdcall;
var
StrSql: String;
begin
try
StrSql := 'select * from '+ SorTableName+' where '+VehCor+'='+QuotedStr(VehColor)+' and '+ VehNo+'='+QuotedStr(VehPlate);
ADOQTemp.Close;
ADOQTemp.SQL.Clear;
ADOQTemp.SQL.Add(StrSql);
ADOQTemp.Prepared := True;
ADOQTemp.Open;
if ADOQTemp.RecordCount>0 then
Result :=1 //找到
else
Result := 0;//没找到
except on E:Exception do
begin
Result := 2; //异常
end;
end;end;procedure SaveData(Enrollid: Integer; VehColor: String; VehPlate: String; ChkType: String);stdcall;
var
StrSql: String;
begin
try
StrSql := 'Insert into '+ ChkTableName+' (enroll_id, ' +VehCor+','+VehNo+', inspect_id) Values('+ IntToStr(Enrollid)+', '+QuotedStr(VehColor)+', '+QuotedStr(VehPlate)+', '+QuotedStr(ChkType)+')';
ADOQTemp.Close;
ADOQTemp.SQL.Clear;
ADOQTemp.SQL.Add(StrSql);
ADOQTemp.Prepared := True;
ADOQTemp.ExecSQL;
except on E:Exception do
end;end;exports
ConDB,
SaveData,
FindVeh;beginend.
first unit in your library's USES clause AND your project's (select
Project-View Source) USES clause if your DLL exports any procedures or
functions that pass strings as parameters or function results. This
applies to all strings passed to and from your DLL--even those that
are nested in records and classes. ShareMem is the interface unit to
the BORLNDMM.DLL shared memory manager, which must be deployed along
with your DLL. To avoid using BORLNDMM.DLL, pass string information
using PChar or ShortString parameters. }uses
ShareMem,
SysUtils,
Classes,
AdoConEd,
ADODB,
DB,
Forms;var
SorTableName: String;
ChkTableName: String;
VehCor: String;
VehNo: String;
ADODataCon: TADOConnection;
ADOQTemp: TADOQuery;{$R *.res}function ConDB(DSStr: String; SorTName: String; ChkTName: String; AVehCor: String; AVehNo: String):Integer;stdcall; //函数返回0是未连上,返回1是连接上
begin
//读取数据源连接字符串
SorTableName := SorTName;
ChkTableName := ChkTName;
VehCor := AVehCor;
VehNo := AVehNo; if not Assigned(ADODataCon) then
ADODataCon := TADOConnection.Create(Application);
if not Assigned(ADOQTemp) then
ADOQTemp := TADOQuery.Create(Application); //如果已经处于连接状态,则先关闭,此种情况是用于在程序正常运行的时候,改变数据库连接
if ADODataCon.Connected then
begin
ADODataCon.Close;
ADODataCon.ConnectionString := DSStr;
end
else
ADODataCon.ConnectionString := DSStr; try
ADODataCon.Open;
except
On E:Exception do
begin
Result := 0;
end;
end;
Result := 1;
end;function FindVeh(VehColor:String; VehPlate:String):Integer;stdcall;
var
StrSql: String;
begin
try
StrSql := 'select * from '+ SorTableName+' where '+VehCor+'='+QuotedStr(VehColor)+' and '+ VehNo+'='+QuotedStr(VehPlate);
ADOQTemp.Close;
ADOQTemp.SQL.Clear;
ADOQTemp.SQL.Add(StrSql);
ADOQTemp.Prepared := True;
ADOQTemp.Open;
if ADOQTemp.RecordCount>0 then
Result :=1 //找到
else
Result := 0;//没找到
except on E:Exception do
begin
Result := 2; //异常
end;
end;end;procedure SaveData(Enrollid: Integer; VehColor: String; VehPlate: String; ChkType: String);stdcall;
var
StrSql: String;
begin
try
StrSql := 'Insert into '+ ChkTableName+' (enroll_id, ' +VehCor+','+VehNo+', inspect_id) Values('+ IntToStr(Enrollid)+', '+QuotedStr(VehColor)+', '+QuotedStr(VehPlate)+', '+QuotedStr(ChkType)+')';
ADOQTemp.Close;
ADOQTemp.SQL.Clear;
ADOQTemp.SQL.Add(StrSql);
ADOQTemp.Prepared := True;
ADOQTemp.ExecSQL;
except on E:Exception do
end;end;exports
ConDB,
SaveData,
FindVeh;beginend.
解决方案 »
- 帮我将这个转换为Delphi好吗?
- 一个简单的问题,已知文件夹路径,怎样得到文件夹名
- 莫名的程序编译问题:variant or safe array index out of bounds
- 在用OleContainer1打开excel 时,如何自动打开excel ,用要每次程序运行后,通过双击鼠标来打开excel
- 请问这是什么原因?
- 大家倒是评评理,我为什么不能把我得分给别人?
- 帮帮忙呀!!TFileStream的小问题!!!!!!!!
- 关于DBgrid问题
- 開發一個二層的C/S多用戶系統是不是一定要用到TDATABASE,OR TADOCONNECTION,現沒分,下次給,多謝
- 报表中字符串怎样换行?
- 一个函数问题,a的36.5次方怎么写
- 如何将vcl转化为com对象(不是active)
if not Assigned(ADODataCon) then
ADODataCon := TADOConnection.Create(Application);
if not Assigned(ADOQTemp) then
ADOQTemp := TADOQuery.Create(Application);这四句;1.我觉得TADOConnection.Create这个操作,不必放在这里,
比如放在初始化节,也就是用每次都判断这个条件 if not Assigned(ADODataCon) then2.dll中,就不要使用Application了,使用hinstance如ADOQTemp := TADOQuery.Create(hinstance);或者干脆使用为空
ADOQTemp := TADOQuery.Create(nil);
ADOQTemp := TADOQuery.Create();
begin
ADOQTemp := TADOQuery.Create(Application);
ADOQTemp.Connection := ADODataCon;
end;