dll程序:
library DBOperation; { 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
SysUtils,
Classes,
ActiveX,
u_DBOperation in 'u_DBOperation.pas'; {$R *.res} exports
DBOper name 'DBOper',
GetConnection name 'GetConnection',
GetValueByFieldName name 'GetValueByFieldName';
begin end. unit u_DBOperation; interface uses
Windows, Messages, SysUtils, Variants, Classes,DB, ADODB,IniFiles,Dialogs, ActiveX;
//function GetConnection(var v_ADOConnection:TADOConnection) :boolean; {=============================
创建人:LFL
创建日期:2008-1-1
功能:记录数据库操作的记录
入口参数:Operator:有关信息; Event:所在过程、函数或事件的名称;
SucceedFlag:操作是否成功。
==============================}
procedure DBErrorLog(Operator, Event:String; SucceedFlag:Boolean); {=============================
***注:这里没有释放v_qryOpen的变量.*** 创建人:LFL
创建日期:2008-1-1
功能:根据SQL语句得到数据集TADOQuery
入口参数:i_sSQL:SQL语句; i_AdoConneton:要连接的AdoConneton ;
v_qryOpen:该数据集的地址。
返回参数:假如操作成功,返回True,否则返回False;
==============================}
function DBOper(i_sSQL: string; i_AdoConnetion: TADOConnection;
var v_qryOpen: TADOQuery): Boolean; {=============================
创建人:LFL
创建日期:2008-1-2
功能:根据SQL语句得到数据集TADOQuery
入口参数:i_sSQL:SQL语句; i_AdoConneton:要连接的AdoConneton ;
i_sFieldName:要获得值的字段。
返回参数:i_sFieldName字段的值;
==============================}
function GetValueByFieldName(i_sSQL: string; i_AdoConnetion: TADOConnection;
i_sFieldName: string): string;
const
SYS_CONFIG_FILE = 'sysConfig.ini';
EVENT_LOG = 'DBErrorLog.txt'; implementation function GetValueByFieldName(i_sSQL: string; i_AdoConnetion: TADOConnection;
i_sFieldName: string): string;
{=============================
创建人:LFL
创建日期:2008-1-2
功能:根据SQL语句得到数据集TADOQuery
入口参数:i_sSQL:SQL语句; i_AdoConneton:要连接的AdoConneton ;
i_sFieldName:要获得值的字段。
返回参数:i_sFieldName字段的值;
==============================}
var
v_qryGetValue: TADOQuery;
begin
DBOper(i_sSQL, i_AdoConnetion, v_qryGetValue); //得到指定的字段的值
Result := v_qryGetValue.FieldByName(i_sFieldName).AsString; if v_qryGetValue <> nil then
begin
v_qryGetValue.Free;
v_qryGetValue := nil;
end; end; function DBOper(i_sSQL: string; i_AdoConnetion: TADOConnection;
var v_qryOpen: TADOQuery): Boolean;
{=============================
创建人:LFL
创建日期:2008-1-1
功能:根据SQL语句得到数据集TADOQuery
入口参数:i_sSQL:SQL语句; i_AdoConneton:要连接的AdoConneton ;
v_qryOpen:该数据集的地址。
返回参数:假如操作成功,返回True,否则返回False; ***注:这里没有释放v_qryOpen的变量.***
==============================}
begin
CoInitialize(nil);
if not Assigned(v_qryOpen) then
begin
v_qryOpen := TADOQuery.Create(nil);
v_qryOpen.Connection := i_AdoConnetion;
end; try
with v_qryOpen do
begin
close;
SQL.Text := i_sSQL;
Open;
end;
Result := True;
except
DBErrorLog(i_sSQL, 'DBOper', False);
Result := False;
end; CoUninitialize;
end;
调用该dll的程序
procedure TForm1.btn1Click(Sender: TObject);
var
v_qry: TADOQuery;
begin
v_qry := TADOQuery.Create(nil);
DBOper('select * from tbl_customer', con1, v_qry);
btn1.Caption := v_qry.Fields[0].AsString; exit; end;
unit UntDBOperationDll; interface
uses DB, ADODB;
{=============================
***注:这里没有释放v_qryOpen的变量.*** 创建人:LFL
创建日期:2008-1-1
功能:根据SQL语句得到数据集TADOQuery
入口参数:i_sSQL:SQL语句; i_AdoConneton:要连接的AdoConneton ;
v_qryOpen:该数据集的地址。
返回参数:假如操作成功,返回True,否则返回False;
==============================}
function DBOper(i_sSQL: string; i_AdoConneton: TADOConnection;
var v_qryOpen: TADOQuery): Boolean; stdcall; function GetConnection(var v_ADOConnection:TADOConnection) :Boolean; stdcall; {=============================
创建人:LFL
创建日期:2008-1-2
功能:根据SQL语句得到数据集TADOQuery
入口参数:i_sSQL:SQL语句; i_AdoConneton:要连接的AdoConneton ;
i_sFieldName:要获得值的字段。
返回参数:i_sFieldName字段的值;
==============================}
function GetValueByFieldName(i_sSQL: string; i_AdoConnetion: TADOConnection;
i_sFieldName: string): string; stdcall;
const
DBDLLName = 'DBOperation.dll'; implementation function DBOper(i_sSQL: string; i_AdoConneton: TADOConnection;
var v_qryOpen: TADOQuery): Boolean; stdcall;
external DBDLLName name 'DBOper'; function GetConnection(var v_ADOConnection:TADOConnection) :Boolean; stdcall;
external DBDLLName name 'GetConnection'; function GetValueByFieldName(i_sSQL: string; i_AdoConnetion: TADOConnection;
i_sFieldName: string): string; stdcall;
external DBDLLName name 'GetValueByFieldName';
end.
问题:access violation at address 00559c23 in module 'DBOperation.DLL' read of address 01000000
library DBOperation; { 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
SysUtils,
Classes,
ActiveX,
u_DBOperation in 'u_DBOperation.pas'; {$R *.res} exports
DBOper name 'DBOper',
GetConnection name 'GetConnection',
GetValueByFieldName name 'GetValueByFieldName';
begin end. unit u_DBOperation; interface uses
Windows, Messages, SysUtils, Variants, Classes,DB, ADODB,IniFiles,Dialogs, ActiveX;
//function GetConnection(var v_ADOConnection:TADOConnection) :boolean; {=============================
创建人:LFL
创建日期:2008-1-1
功能:记录数据库操作的记录
入口参数:Operator:有关信息; Event:所在过程、函数或事件的名称;
SucceedFlag:操作是否成功。
==============================}
procedure DBErrorLog(Operator, Event:String; SucceedFlag:Boolean); {=============================
***注:这里没有释放v_qryOpen的变量.*** 创建人:LFL
创建日期:2008-1-1
功能:根据SQL语句得到数据集TADOQuery
入口参数:i_sSQL:SQL语句; i_AdoConneton:要连接的AdoConneton ;
v_qryOpen:该数据集的地址。
返回参数:假如操作成功,返回True,否则返回False;
==============================}
function DBOper(i_sSQL: string; i_AdoConnetion: TADOConnection;
var v_qryOpen: TADOQuery): Boolean; {=============================
创建人:LFL
创建日期:2008-1-2
功能:根据SQL语句得到数据集TADOQuery
入口参数:i_sSQL:SQL语句; i_AdoConneton:要连接的AdoConneton ;
i_sFieldName:要获得值的字段。
返回参数:i_sFieldName字段的值;
==============================}
function GetValueByFieldName(i_sSQL: string; i_AdoConnetion: TADOConnection;
i_sFieldName: string): string;
const
SYS_CONFIG_FILE = 'sysConfig.ini';
EVENT_LOG = 'DBErrorLog.txt'; implementation function GetValueByFieldName(i_sSQL: string; i_AdoConnetion: TADOConnection;
i_sFieldName: string): string;
{=============================
创建人:LFL
创建日期:2008-1-2
功能:根据SQL语句得到数据集TADOQuery
入口参数:i_sSQL:SQL语句; i_AdoConneton:要连接的AdoConneton ;
i_sFieldName:要获得值的字段。
返回参数:i_sFieldName字段的值;
==============================}
var
v_qryGetValue: TADOQuery;
begin
DBOper(i_sSQL, i_AdoConnetion, v_qryGetValue); //得到指定的字段的值
Result := v_qryGetValue.FieldByName(i_sFieldName).AsString; if v_qryGetValue <> nil then
begin
v_qryGetValue.Free;
v_qryGetValue := nil;
end; end; function DBOper(i_sSQL: string; i_AdoConnetion: TADOConnection;
var v_qryOpen: TADOQuery): Boolean;
{=============================
创建人:LFL
创建日期:2008-1-1
功能:根据SQL语句得到数据集TADOQuery
入口参数:i_sSQL:SQL语句; i_AdoConneton:要连接的AdoConneton ;
v_qryOpen:该数据集的地址。
返回参数:假如操作成功,返回True,否则返回False; ***注:这里没有释放v_qryOpen的变量.***
==============================}
begin
CoInitialize(nil);
if not Assigned(v_qryOpen) then
begin
v_qryOpen := TADOQuery.Create(nil);
v_qryOpen.Connection := i_AdoConnetion;
end; try
with v_qryOpen do
begin
close;
SQL.Text := i_sSQL;
Open;
end;
Result := True;
except
DBErrorLog(i_sSQL, 'DBOper', False);
Result := False;
end; CoUninitialize;
end;
调用该dll的程序
procedure TForm1.btn1Click(Sender: TObject);
var
v_qry: TADOQuery;
begin
v_qry := TADOQuery.Create(nil);
DBOper('select * from tbl_customer', con1, v_qry);
btn1.Caption := v_qry.Fields[0].AsString; exit; end;
unit UntDBOperationDll; interface
uses DB, ADODB;
{=============================
***注:这里没有释放v_qryOpen的变量.*** 创建人:LFL
创建日期:2008-1-1
功能:根据SQL语句得到数据集TADOQuery
入口参数:i_sSQL:SQL语句; i_AdoConneton:要连接的AdoConneton ;
v_qryOpen:该数据集的地址。
返回参数:假如操作成功,返回True,否则返回False;
==============================}
function DBOper(i_sSQL: string; i_AdoConneton: TADOConnection;
var v_qryOpen: TADOQuery): Boolean; stdcall; function GetConnection(var v_ADOConnection:TADOConnection) :Boolean; stdcall; {=============================
创建人:LFL
创建日期:2008-1-2
功能:根据SQL语句得到数据集TADOQuery
入口参数:i_sSQL:SQL语句; i_AdoConneton:要连接的AdoConneton ;
i_sFieldName:要获得值的字段。
返回参数:i_sFieldName字段的值;
==============================}
function GetValueByFieldName(i_sSQL: string; i_AdoConnetion: TADOConnection;
i_sFieldName: string): string; stdcall;
const
DBDLLName = 'DBOperation.dll'; implementation function DBOper(i_sSQL: string; i_AdoConneton: TADOConnection;
var v_qryOpen: TADOQuery): Boolean; stdcall;
external DBDLLName name 'DBOper'; function GetConnection(var v_ADOConnection:TADOConnection) :Boolean; stdcall;
external DBDLLName name 'GetConnection'; function GetValueByFieldName(i_sSQL: string; i_AdoConnetion: TADOConnection;
i_sFieldName: string): string; stdcall;
external DBDLLName name 'GetValueByFieldName';
end.
问题:access violation at address 00559c23 in module 'DBOperation.DLL' read of address 01000000
解决方案 »
- 关于delphi开发的webservice调用问题
- delhpi 界面问题。
- 哪位有数据导出到excel例子,贴出来看看!!
- adoconnection连接超时,commandout/connectiontimeout均=1200秒,执行大存储过程,1分钟就报超时!
- 我的书终于写完了~~公开一些东东~哈~~
- 如何调用word
- 问一个巨简单的问题和一个巨难的问题1.IP 地址如何增加减2.NetMessageBufferSend如何使用?
- 如何修改dbgrid中输入的错误数据
- 关于重装系统后Delphi6中报表的一个问题
- 如何编写适应不同分辩率屏幕的窗口程序
- 帮我解读一下这小段程序
- 如何 写代码 获取 IE 临时目录 ?
2)不能用String做Dll的接口,而必须用PChar