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

DLL連資料庫有出現異常訊息"Invalid pointer operation"

答題得分者是:shunchia63
jackiemi2_seed
中階會員


發表:37
回覆:97
積分:76
註冊:2006-09-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-06-17 11:25:46 IP:210.64.xxx.xxx 訂閱
如附檔,
按ms sql按鈕,在出現訊息ok後,會出現"Invalid pointer operation"
按access按鈕在dll_test.dll未加adoqry.free,adocon.free時
大約要連按5次才會出現"Invalid pointer operation"
加上後就不會出現,
但連按10次後,程式會自動關閉
滿怪的...

不知道是什麼地方沒寫好,
請前輩們幫忙看一下程式
感恩!

------
OS : Win 7 pro
Program : Delphi 7
DataBase : Ms Sql 2008
編輯記錄
jackiemi2_seed 重新編輯於 2007-06-20 22:53:12, 註解 無‧
jackiemi2_seed 重新編輯於 2007-06-22 22:43:35, 註解 無‧
jackiemi2_seed 重新編輯於 2007-07-26 21:38:14, 註解 無‧
shunchia63
高階會員


發表:26
回覆:141
積分:198
註冊:2007-05-22

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-06-20 12:16:53 IP:61.62.xxx.xxx 訂閱
jackiemi2_seed
中階會員


發表:37
回覆:97
積分:76
註冊:2006-09-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-06-20 22:53:29 IP:211.74.xxx.xxx 訂閱
shunchia63兄您好:
感謝您提供的網頁,
已照網頁內容,
在dll的頭尾加上"CoInitialize(nil);"與"CoUninitialize;"
並加上"adoqry.Active:=true;"及"adoqry.Active:=false;"
但還是有問題說...

放的位置錯誤嗎??還是??
------
OS : Win 7 pro
Program : Delphi 7
DataBase : Ms Sql 2008
shunchia63
高階會員


發表:26
回覆:141
積分:198
註冊:2007-05-22

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-06-20 23:18:43 IP:61.64.xxx.xxx 訂閱
Post  Code .

你的Code 我測過不會有問題
我用IDE 是 delphi 6 Ent Update Pack 2

也許是 IDE bug??需要Update Pack 我也不知

可能需要去問一下原廠

jackiemi2_seed
中階會員


發表:37
回覆:97
積分:76
註冊:2006-09-11

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-06-22 22:41:36 IP:211.74.xxx.xxx 訂閱
公司測試電腦是delphi 7 win 2000 pro ms sql 2000的client,
連接的資料庫電腦是win 2000 server ms sql 2000

在家測試電腦是delphi 7 win 2000 server ms sql 2005
所連的資料庫電腦是同一台電腦用VMware安裝的win 2000 server ms sql 2000

在公司測了一下,不會出現"Invalid pointer operation",
但連按大約8次後,執行檔會自動關閉,
感覺好像是家裡的電腦怪怪的..

shunchia63兄:
您的程式在連按8次後是否會出現執行檔會自動關閉的狀況???
如果程式不會自動關閉,是否可以把附檔程式捉下來compile,
然後把程式寄給小弟測試一下,
附檔程式已把連線字串由寫死的改成捉form的edit,
這樣在家和公司都可以測試
thanks

------
OS : Win 7 pro
Program : Delphi 7
DataBase : Ms Sql 2008
shunchia63
高階會員


發表:26
回覆:141
積分:198
註冊:2007-05-22

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-06-22 23:38:44 IP:61.64.xxx.xxx 訂閱
<textarea class="delphi" rows="10" cols="60" name="code"> function item_name(sql_string,item_no:string):string;stdcall; var adocon:tadoconnection; adoqry:tadoquery; begin try CoInitialize(nil); adocon:=tadoconnection.Create(nil); adocon.ConnectionString:=sql_string; adoqry:=tadoquery.Create(nil); adoqry.Connection:=adocon; adoqry.Close; adoqry.SQL.Clear; adoqry.SQL.Add('select id,name from vendor where id=:id'); adoqry.Parameters.ParamValues['id']:=item_no; adoqry.Open; adoqry.Active:=true; if adoqry.RecordCount=1 then begin Result :=adoqry.FieldValues['name']; end else begin Result :='無此編號'; end; finally adoqry.Active:=false; adoqry.Free; CoUninitialize; end; end; </textarea> adocon.Free; 沒寫
shunchia63
高階會員


發表:26
回覆:141
積分:198
註冊:2007-05-22

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-06-22 23:46:31 IP:61.64.xxx.xxx 訂閱
不知如何加檔

Sorry!!
編輯記錄
shunchia63 重新編輯於 2007-06-22 23:47:17, 註解 無‧
jackiemi2_seed
中階會員


發表:37
回覆:97
積分:76
註冊:2006-09-11

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-06-25 23:01:53 IP:59.104.xxx.xxx 訂閱
shunchia63兄您好:
請收簡訊,小弟有發簡訊給您,
您可以把檔案寄給小弟

------
OS : Win 7 pro
Program : Delphi 7
DataBase : Ms Sql 2008
HireMan
一般會員


發表:0
回覆:12
積分:2
註冊:2004-12-02

發送簡訊給我
#9 引用回覆 回覆 發表時間:2007-07-25 00:27:27 IP:125.77.xxx.xxx 訂閱
最好这样写.
begin
adocon := nil;
adoqry :=nil;
try
adocon := TAdoConnection.Create(nil);
adoqty := TAdoquery.Create(nil);


finally
adoqry.close;
adoqty.free;
adocon.free;
end;
====
分享快乐:www.delphichm.com

編輯記錄
HireMan 重新編輯於 2007-07-25 00:28:05, 註解 無‧
jackiemi2_seed
中階會員


發表:37
回覆:97
積分:76
註冊:2006-09-11

發送簡訊給我
#10 引用回覆 回覆 發表時間:2007-07-25 22:38:33 IP:210.64.xxx.xxx 訂閱
感謝HireMan兄的回復
試了之後還是有一樣的問題,怪怪的...

最近買了一本書,裡面有寫到自己作元件
打算自己作function來reuse,
希望可以成功

===================引 用 HireMan 文 章===================
最好这样写.
begin
???? adocon := nil;
???? adoqry :=nil;
???? try
??????? adocon := TAdoConnection.Create(nil);
??????? adoqty?:= TAdoquery.Create(nil);
?

??? finally
?????? adoqry.close;
?????? adoqty.free;
?????? adocon.free;
??? end;
====
分享快乐:www.delphichm.com

------
OS : Win 7 pro
Program : Delphi 7
DataBase : Ms Sql 2008
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#11 引用回覆 回覆 發表時間:2007-07-25 23:23:44 IP:61.31.xxx.xxx 訂閱
可能不是ADO問題。

標準的指針誤用。用DLL傳遞String是危險的。
改用PChar 按照標準申請內存或用SetString。
jackiemi2_seed
中階會員


發表:37
回覆:97
積分:76
註冊:2006-09-11

發送簡訊給我
#12 引用回覆 回覆 發表時間:2007-07-26 21:40:13 IP:203.70.xxx.xxx 訂閱
感謝wameng版主,改用PChar就不會出現問題了...
p.s.最上面的附加檔案也已更新的喔
===================引 用 wameng 文 章===================
可能不是ADO問題。

標準的指針誤用。用DLL傳遞String是危險的。
改用PChar 按照標準申請內存或用SetString。
------
OS : Win 7 pro
Program : Delphi 7
DataBase : Ms Sql 2008
chih_kuan
中階會員


發表:38
回覆:82
積分:54
註冊:2003-02-20

發送簡訊給我
#13 引用回覆 回覆 發表時間:2007-07-27 14:30:34 IP:220.228.xxx.xxx 訂閱
Please  

Uses ShareMem,.......;

In Interface...
------
叔叔有練過,初學者不要學。
系統時間:2024-05-17 9:49:49
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!