求标准DLL封装ADO访问SQLSERVER的方法!网上找到的没有验证

library   tmpdll; 

{   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 
    ADODB; 
    Windows; 
var 
    ADOQuery:   TADOQuery; 
    ADOQueryConStr,   ADOQuerySQLStr:   String; 
{$R   *.res} 
procedure   FreeProc;   stdcall; 
begin 
    if   ADOQuery   <>   nil   then 
    begin 
        ADOQuery.Free; 
        ADOQuery   :=   Nil; 
    end; 
end; 

procedure   MyDLLHandler(Reason:   Integer); 
begin     
    case   Reason   of 
        DLL_PROCESS_ATTACH: 
                                              begin 
                                                  ADOQuery   :=   TADOQuery.Create(nil); 
                                              end; 
        DLL_PROCESS_DETACH:; 
        DLL_THREAD_ATTACH:; 
        DLL_THREAD_DETACH:; 
    end; 
end; 

//赋连接字符串 
procedure   SetADOQueryConStr(vADOQueryConStr:   String);   stdcall; 
begin 
    ADOQueryConStr   :=   vADOQueryConStr; 
end; 

//赋SQL命令 
procedure   SetADOQuerySQLStr(vADOQuerySQLStr:   String);   stdcall
begin 
    ADOQuerySQLStr   :=   vADOQuerySQLStr; 
end; 

//执行 
function   ADOQueryExecSQL:   boolean;   stdcall; 
begin 
    ADOQuery.ConnectionString   :=   ADOQueryConStr; 
    ADOQuery.Close; 
    ADOQuery.SQL.Clear; 
    ADOQuery.SQL.Add(ADOQuerySQLStr); 
    try 
        ADOQuery.ExecSQL; 
    except 
        Result   :=   False; 
        exit; 
    end; 
    Result   :=   True; 
end; 

exports 
    FreeProc, 
    SetADOQueryConStr, 
    SetADOQuerySQLStr, 
    ADOQueryExecSQL; 
begin 
    DLLProc   :=   @MyDLLHandler; 
    MyDLLHandler(DLL_PROCESS_ATTACH); 

end.




// 以下是我自己验证的结果

library   tmpdll;


{   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 
    ADODB,    Windows,Dialogs,SysUtils;


const  
      ConnStr='Provider=SQLOLEDB.1;Password=123456;Persist Security Info=True;User ID=sa;Initial Catalog=test;Data Source=SZLT088\EASYBOOT';
      InsertBaseInfo =' Exec DT_InsertBaseInfo ';
      InsertTestResult =' Exec DT_InsertTestResult ';
      UpdateQualified =' Exec DT_UpdateQualified ';
      
type
  RecProductBaseInformation=record
  LotNo,Batch,MaxTimes,Date,MachineNo,Shift,Operator:string
  end;
  PRecProductBaseInformation=^RecProductBaseInformation;


  RecTestResultInfo=record
  Peak,Crest,CR,Route:string
  end;
  PRecTestResultInfo=^RecTestResultInfo;


  RecProductQualified=record
  LotNo,Batch,MaxTimes,Qualified,Unqualified:string
  end;
  PRecProductQualified=^RecProductQualified;


var
    ADOQuery:   TADOQuery;

//{$R   *.res}


procedure   CreateADO();
begin
    //CoInitialize(nil);
    ADOQuery   :=   TADOQuery.Create(nil);
end; 
 
function   ADOQueryExecSQL(TR:PRecTestResultInfo):   boolean;   stdcall;
var SqlStr:string;
begin


    SqlStr:= InsertTestResult + QuotedStr(TR^.Peak)+','+QuotedStr(TR^.Crest)+','+QuotedStr(TR^.CR)+','+  QuotedStr(TR^.Route) ;
    ShowMessage(SqlStr);
    ADOQuery.ConnectionString   :=   ConnStr;
    ADOQuery.Close;
    ADOQuery.SQL.Clear; 
    ADOQuery.SQL.Add(SqlStr);


    try
        ADOQuery.ExecSQL; 
    except 
        Result   :=   False;
        exit; 
    end; 
    Result   :=   True; 
end;
 
exports
 
   CreateADO,
   ADOQueryExecSQL;
 
begin
   // DLLProc   :=   @MyDLLHandler;
   // MyDLLHandler(DLL_PROCESS_ATTACH);
end.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值