全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2207
推到 Plurk!
推到 Facebook!

請問有關動態建立ADOQuery的方法

尚未結案
DoubleFish2004
一般會員


發表:6
回覆:12
積分:3
註冊:2004-05-25

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-05-28 17:19:43 IP:140.115.xxx.xxx 未訂閱
各位大大好: 小弟現正要寫一個沒有Form的DLL檔 其中的有一連串的PROCEDURE負責存取資料庫的資料 因此想用在PROCEDURE裡動態建立ADOQuery的方式來存取 然後在PROCEDURE結束前Free掉該ADOQuery 請問該注意哪些地方呢? 小弟之前寫了一個測試的PROCEDURE 結果都會在設定ADOQuery的ConnectionString的地方出現錯誤 小弟用的是Access本地資料庫(普通用FORM建立ADO存取正常) 並使用Jet OLEDB 4.0存取 感謝各位大大幫忙>
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-05-28 23:58:49 IP:218.32.xxx.xxx 未訂閱
DoubleFish2004 你好: 沒有Form的DLL, 那你的 ADOQuery.Create(nil) => Owner 是 nil 嗎 ? 我不確定是否能解決你的問題, 一般我會先 Create 一個 DataModule, 然後將 DataSet 等相關元件 Create 在該 DataModule 上, Destroy 時, 直接 DataModule.Free, 由 DataModule 去幫忙 Free 那些元件.
DoubleFish2004
一般會員


發表:6
回覆:12
積分:3
註冊:2004-05-25

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-05-30 17:30:54 IP:140.115.xxx.xxx 未訂閱
感謝Micky大大的回答~><雖然我有點看不懂~ 我再去多研究研究~
DoubleFish2004
一般會員


發表:6
回覆:12
積分:3
註冊:2004-05-25

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-05-30 18:59:37 IP:140.115.xxx.xxx 未訂閱
剛剛研究了一下DataModule後 照著版主大大Micky的方法在DLL檔中加入一個DataModule 然後把ADOQuery加入其中並設定好ConnectionString和SQL 然後寫入下列的外部呼叫FUNCTION 可是一直都無法正確呼叫><會出現Access Violation問題 麻煩大大們幫我看一下我哪裡觀念錯誤了~謝謝~ FUNCTION DB_QUERY( TABLE : STRING ; KEY : STRING ; VALUE : STRING ; DATA : STRING ) : INTEGER ; STDCALL; begin result := 0; TRY DMODULE.DoCreate; WITH DMODULE.ADOQuery DO begin SQL.Clear; SQL.Add( 'SELECT * FROM ' TABLE ); SQL.Add( 'WHERE ' KEY ' = ' VALUE ); Close; Open; result := FieldByName( DATA ).AsInteger; end; FINALLY DMODULE.Free; end; end;
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-05-31 21:57:57 IP:218.32.xxx.xxx 未訂閱
試了一下, 好像沒有問題, Code 如下, 參考看看:
library TestDll;    uses
  Forms,
  SysUtils,
  Classes,
  ADODB;    FUNCTION DB_QUERY( TABLE : STRING ; KEY : STRING ; VALUE : STRING ; DATA : STRING ): INTEGER ; STDCALL;
var DMODULE:TDATAMODULE;
    ADOQ: TADOQuery;
begin
  DMODULE := TDATAMODULE.Create(Application);
  ADOQ := TADOQuery.Create(DMODULE);
  ADOQ.ConnectionString := '...'; // 請自行更改 Connect String
  TRY
    WITH ADOQ DO
    begin
      SQL.Clear;
      SQL.Add( 'SELECT ' DATA ' FROM '   TABLE );
      SQL.Add( 'WHERE '   KEY   ' = '   VALUE );
      Close;
      Open;
      result := FieldByName( DATA ).AsInteger;
    end;
  FINALLY
    DMODULE.Free;
  end;
end;    exports
  DB_QUERY;
end.
DoubleFish2004
一般會員


發表:6
回覆:12
積分:3
註冊:2004-05-25

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-06-01 13:01:51 IP:163.28.xxx.xxx 未訂閱
感謝MICKEY大大^^ 已經都OK了^^
系統時間:2024-04-24 16:44:39
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!