我用delphi编写了一个webservices的程序,对外公开一个查询姓名的函数,在debug的情况都是正常的,但是把它编译成dll以后,在IIS下运行就出错,请各个大哥帮忙解决,谢谢。function Tqq.get_name(name:string):string;stdcall;
var query:Tadoquery;
begin
try
query:=nil;
query:=Tadoquery.create(nil);
query.Connection:=datamodal.ADOConnection1;
with query do
begin
close;
with sql do
begin
clear;
add('select yhxm from userinfo where name='''+name+'''');
end;
open;
end;
result:=query.fieldbyname('yhmc').AsString;
finally
query.Free;
end;
end;程序好象执行到query.Connection:=datamodal.ADOConnection1;的是就出错了 ,是不是过程中不能调用数据模块单元啊!!
var query:Tadoquery;
begin
try
query:=nil;
query:=Tadoquery.create(nil);
query.Connection:=datamodal.ADOConnection1;
with query do
begin
close;
with sql do
begin
clear;
add('select yhxm from userinfo where name='''+name+'''');
end;
open;
end;
result:=query.fieldbyname('yhmc').AsString;
finally
query.Free;
end;
end;程序好象执行到query.Connection:=datamodal.ADOConnection1;的是就出错了 ,是不是过程中不能调用数据模块单元啊!!
不是知道是不是这个问题,提示不是说创建adoquery错误,而是一个TremotetableException的一个异常错误!!请指教,谢谢,问题解决了在加分。
function Tqq.get_name(name:string):string;stdcall;
var query:Tadoquery;
var conn:Tadoconnection;
begin
try
query:=nil;
query:=Tadoquery.create(nil);
conn:=Tadoconnection.create(nil);
conn.connstring:='...';
conn.opne;
query.connection;=conn;
query.Connection:=datamodal.ADOConnection1;
with query do
begin
close;
with sql do
begin
clear;
add('select yhxm from userinfo where name='''+name+'''');
end;
open;
end;
result:=query.fieldbyname('yhmc').AsString;
finally
query.Free;
end;
end;
程序在过程中加了一个数据库连接就可以了,我想应该不是coInitliaze函数的问题!!
要在同一进程其它线程共享它,则必须marshall接口或使用全局接口表(GIT)方式,可以参考一些相关贴子。
http://expert.csdn.net/Expert/topic/2516/2516319.xml?temp=.7895319http://expert.csdn.net/Expert/topic/2627/2627962.xml?temp=.7618982
我加了那个初始化函数coInitliaze也没用啊!,还是会出错啊!一样的错!
面已经用了它,你就不用再调用它。TAdoConnection这些ADO组件都是ADO COM组件的封装,比较简单做法就是每次使用就动态
创建然后动态释放,这样做效率未必一定低的,因为创建一次连接对象并不意味处理一次数
据库连接动作。当然,共享ADO连接在有些情况在能够得到一定的效率提高。。
不要盲目去做优化。