我准备做一个dll供别人调用,因为他的程序不能访问Sql Server
但需要用到Sql的数据。
我做了一个测试程序dll,用了一个数据模块如下
library Project1;uses
SysUtils,
Classes,
Data in 'Data.pas' {DataJcsb: TDataModule};{$R *.res}
procedure xxx;StdCall;
begin
DataJcsb.ADOTable1.Open;
DataJcsb.ADOTable2.Open;
DataJcsb.ADOTable2.Append;
DataJcsb.ADOTable2['ckbh']:=DataJcsb.ADOTable1['ckbh'];
DataJcsb.ADOTable2['ck']:=DataJcsb.ADOTable1['ck'];
DataJcsb.ADOTable2.Post;
end;
exports
xxx;
end.
数据模块代码如下:
unit Data;interfaceuses
SysUtils, Windows, Messages, Classes, Graphics, Controls, Forms,
Dialogs, DBTables, DB, ADODB;type
TDataJcsb = class(TDataModule)
AdoConJcsb: TADOConnection;
ADOTable1: TADOTable;
ADOTable1ckbh: TStringField;
ADOTable1ck: TStringField;
ADOTable1bz: TStringField;
ADOConnection1: TADOConnection;
ADOTable2: TADOTable;
ADOTable2ckbh: TWideStringField;
ADOTable2ck: TWideStringField;
ADOTable2bz: TWideStringField;
;
private
{ Private declarations }
public
{ Public declarations }
end;var
DataJcsb: TDataJcsb;implementation{$R *.DFM}end.调用程序代码:
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementationuses Data;
procedure xxx; StdCall;external 'Project1.dll' name'xxx';
{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
begin
xxx;
end;end.但系统调用dll失败,请问这是为什么?
(我做的简单函数调用倒是没问题)
是不是dll不能进行数据库操作?谢谢
但需要用到Sql的数据。
我做了一个测试程序dll,用了一个数据模块如下
library Project1;uses
SysUtils,
Classes,
Data in 'Data.pas' {DataJcsb: TDataModule};{$R *.res}
procedure xxx;StdCall;
begin
DataJcsb.ADOTable1.Open;
DataJcsb.ADOTable2.Open;
DataJcsb.ADOTable2.Append;
DataJcsb.ADOTable2['ckbh']:=DataJcsb.ADOTable1['ckbh'];
DataJcsb.ADOTable2['ck']:=DataJcsb.ADOTable1['ck'];
DataJcsb.ADOTable2.Post;
end;
exports
xxx;
end.
数据模块代码如下:
unit Data;interfaceuses
SysUtils, Windows, Messages, Classes, Graphics, Controls, Forms,
Dialogs, DBTables, DB, ADODB;type
TDataJcsb = class(TDataModule)
AdoConJcsb: TADOConnection;
ADOTable1: TADOTable;
ADOTable1ckbh: TStringField;
ADOTable1ck: TStringField;
ADOTable1bz: TStringField;
ADOConnection1: TADOConnection;
ADOTable2: TADOTable;
ADOTable2ckbh: TWideStringField;
ADOTable2ck: TWideStringField;
ADOTable2bz: TWideStringField;
;
private
{ Private declarations }
public
{ Public declarations }
end;var
DataJcsb: TDataJcsb;implementation{$R *.DFM}end.调用程序代码:
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementationuses Data;
procedure xxx; StdCall;external 'Project1.dll' name'xxx';
{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
begin
xxx;
end;end.但系统调用dll失败,请问这是为什么?
(我做的简单函数调用倒是没问题)
是不是dll不能进行数据库操作?谢谢
解决方案 »
- 一句话 C译delphi
- D6導入C#webservice接口方法怎么是PROCEDURE
- 怎么样对access数据库修改指定项的字段值,急!!!
- 请教:StringGrid如何绘制焦点。
- 关于触发器和存储过程,急!
- Rave与项目文件一起编译?
- 如何控制FASTREPORT的打印次数
- ★★★关于随机数:求randomize random的用法及注意事项及原理及其它的随机方法?我给分。谢谢
- 关于canvas
- 网速的快慢问题
- 求delphi7.0的crack文件:[email protected] 急!
- 某个字段是货币型字段,在对应该字段的那例(在DBGridEh1中)怎么显示成金额类型,象速达一样?
我觉得你的问题在于:DataJcsb 这个数据模块你应该动态去创建,试试如何?
用TTDataJcsb.Create
acess violstion at address 00228B4B in module 'project1.dll'.Read of address 00000300