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

請教密碼輸入後出現Access Violation 無法呼叫主程式

答題得分者是:P.D.
K1086
初階會員


發表:63
回覆:148
積分:42
註冊:2007-04-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2011-02-17 15:28:01 IP:114.41.xxx.xxx 訂閱

[code delphi]
procedure THnk_PassKey_Fm1.SpeedButton1Click(Sender: TObject);
var work_send:string;
work_exec:pchar;
SQL:string;
begin
SQL:='SELECT * FROM PASSWD WHERE ';
SQL:=SQL ' PGNAME=''BEHI'' AND ';
SQL:=SQL ' PGPASS=''' EDIT1.TEXT ''' ';
QUERY1.Close;
QUERY1.SQL.CLEAR;
QUERY1.SQL.ADD(SQL);
QUERY1.Open;
IF QUERY1.RecordCount =0 THEN
RxGIF_2.Visible := true
ELSE
BEGIN
SpeedButton1.Visible := true;
RxGIF_2.Visible := false;
work_send:='';
work_send:=('Hnk_Man_Dp_01.exe');
work_exec:=pchar(work_send);
winexec(work_exec,SW_SHOWNORMAL);
Hnk_PassKey_Fm1.Hide;
Hnk_PassKey_Fm1.Show;
Hnk_PassKey_Fm1.Close;
end;
end;
procedure THnk_PassKey_Fm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var work_send:string;
work_exec:pchar;
begin
if key = #13 then
begin
SpeedButton1.OnClick(Sender);
end;
end;
procedure THnk_PassKey_Fm1.FormActivate(Sender: TObject);
begin
RxGIF_2.Visible := false;
SpeedButton1.Visible := false;
end;

end.
[/code]
====>>問題是當輸入正確密碼之後 出現下列錯誤訊息
請問個位大大 是小弟的密碼資料有問題還是程式錯誤? 謝謝!
Project Hnk_PassKey_Dp.exe raised exception class EAccessViolation with Message
'Access Violation at address 00000000. Read of address 00000000'.
mephise
高階會員


發表:4
回覆:149
積分:205
註冊:2004-02-09

發送簡訊給我
#2 引用回覆 回覆 發表時間:2011-02-17 17:10:05 IP:60.250.xxx.xxx 訂閱
小弟資質愚魯, 怎麼查也查不出來 Delphi 有 forbidden 這個 method, 莫不成是自訂的嗎?
如果是的話, 問題一定出在這行 SpeedButton1.forbidden(Sender);


------
Mephise Chen
前興德工程師
ac910127
一般會員


發表:7
回覆:27
積分:11
註冊:2009-11-06

發送簡訊給我
#3 引用回覆 回覆 發表時間:2011-02-17 17:44:04 IP:59.126.xxx.xxx 訂閱
您好
請問你確定錯誤發生在這部分程式嘛 ??
小弟愚昧,看了一下並且模擬了一下您的
程式碼,並不會發生錯誤。
是否自行再逐步DEBUG看看錯誤發生點 !!

另外小弟用的是Delphi2010,winexec是第一個
參數是用"PAnsiChar" !!
不知大大的版本為何 ??


PS: TO: Mephise 大大
"forbidden" 一詞應該是網頁造成的,
有前輩教導可利用"引述回覆" 即可看到原始內文。

編輯記錄
ac910127 重新編輯於 2011-02-17 02:46:29, 註解 無‧
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#4 引用回覆 回覆 發表時間:2011-02-17 17:50:35 IP:118.160.xxx.xxx 未訂閱
SpeedButton1.forbidden(Sender)
有可能是Ktop系統把 onclick給轉換了, 這是常有的事
我的做法, 我會把
SpeedButton1Click下的事件程式寫成一支function 或 procedure, 再來call它
如下
private
procedure myspeedBtnclick;
.....

implementation

procedure THnk_PassKey_Fm1.myspeedBtnclick;
var work_send:string;
work_exec:pchar;
SQL:string;
begin
SQL:='SELECT * FROM PASSWD WHERE ';
SQL:=SQL ' PGNAME=''BEHI'' AND ';
SQL:=SQL ' PGPASS=''' EDIT1.TEXT ''' ';
QUERY1.Close;
QUERY1.SQL.CLEAR;
QUERY1.SQL.ADD(SQL);
QUERY1.Open;
IF QUERY1.RecordCount =0 THEN
RxGIF_2.Visible := true
ELSE
BEGIN
SpeedButton1.Visible := true;
RxGIF_2.Visible := false;
work_send:='';
work_send:=('Hnk_Man_Dp_01.exe');
work_exec:=pchar(work_send);
winexec(work_exec,SW_SHOWNORMAL);
Hnk_PassKey_Fm1.Hide;
Hnk_PassKey_Fm1.Show;
Hnk_PassKey_Fm1.Close;
end;
end;

procedure THnk_PassKey_Fm1.SpeedButton1Click(Sender: TObject);
begin
Hnk_PassKey_Fm1.myspeedBtnclick;
end;

procedure THnk_PassKey_Fm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if Key=#13 then Hnk_PassKey_Fm1.myspeedBtnclick
end;

或許是你的SpeedButton有問題, 或者是其內引用的變數有未被宣告, 以上的寫法不代表原來你的寫法是錯的,
只是比較具有結構化, 因為有時候你直接去呼叫另一組Delphi創建物件的事件時, 會有先後順序的問題, 如果順序不對,
很可能就會造成後呼叫者先run, 而前者卻未被創建出來的問題, 你引發的問題, 正是呼叫的事件引用到不存在變數或被釋放的物件所導致的
另外, 建議你先檢查SpeedButton中所有的自定變數宣告是否存在

===================引 用 mephise 文 章===================
小弟資質愚魯, 怎麼查也查不出來 Delphi 有 forbidden 這個 method, 莫不成是自訂的嗎?
如果是的話, 問題一定出在這行 SpeedButton1.forbidden(Sender);



var work_send:string;
編輯記錄
P.D. 重新編輯於 2011-02-17 02:53:28, 註解 無‧
P.D. 重新編輯於 2011-02-17 02:54:31, 註解 無‧
P.D. 重新編輯於 2011-02-17 03:00:00, 註解 無‧
mephise
高階會員


發表:4
回覆:149
積分:205
註冊:2004-02-09

發送簡訊給我
#5 引用回覆 回覆 發表時間:2011-02-18 08:27:52 IP:60.250.xxx.xxx 訂閱
糗大了,原來是網頁造成了forbidden這個詞
但是答案還是不變, 問題就是出在speedbutton這行,
因為錯誤是在按下 Enter 的時候發出的, 所以問題一定在這

從以前到現在, 只要我遇到 Access Violation at address 00000000 的錯誤
千篇一律都是物件沒有實體, 但是卻引用了所造成的

比如說, SpeedButton1.OnClick 會呼叫出一個Form, 但是那個Form卻不是 AutoCreate, 而且此時並沒有被建立
這在 Compile時期不會有問題, 但是執行時期就會出現 Access Violation at address 00000000

我建議在 SpeedButton1 的 OnClick 中每一行都設立 BreakPoint 然後一行一行執行
這樣就會比較容易抓出問題了
------
Mephise Chen
前興德工程師
K1086
初階會員


發表:63
回覆:148
積分:42
註冊:2007-04-09

發送簡訊給我
#6 引用回覆 回覆 發表時間:2011-02-22 15:13:52 IP:114.38.xxx.xxx 訂閱

===================引 用 P.D. 文 章===================
SpeedButton1.forbidden(Sender)
有可能是Ktop系統把 onclick給轉換了, 這是常有的事
我的做法, 我會把
SpeedButton1Click下的事件程式寫成一支function 或 procedure, 再來call它
如下
private?
??? procedure myspeedBtnclick;
.....

implementation

procedure THnk_PassKey_Fm1.myspeedBtnclick;
var?? work_send:string;??
??? work_exec:pchar;??
??? SQL:string;??
begin?
? SQL:='SELECT * FROM PASSWD WHERE ';??
? SQL:=SQL ' PGNAME=''BEHI'' AND ';??
? SQL:=SQL ' PGPASS=''' EDIT1.TEXT ''' ';??
? QUERY1.Close;??
? QUERY1.SQL.CLEAR;??
? QUERY1.SQL.ADD(SQL);??
? QUERY1.Open;??
? IF QUERY1.RecordCount =0 THEN??
? RxGIF_2.Visible := true?
? ELSE??
??? BEGIN??
? SpeedButton1.Visible := true;??
? RxGIF_2.Visible := false;??
? work_send:='';??
? work_send:=('Hnk_Man_Dp_01.exe');??
? work_exec:=pchar(work_send);??
? winexec(work_exec,SW_SHOWNORMAL);??
? Hnk_PassKey_Fm1.Hide;??
? Hnk_PassKey_Fm1.Show;??
? Hnk_PassKey_Fm1.Close;??
??? end;??
end;??

procedure THnk_PassKey_Fm1.SpeedButton1Click(Sender: TObject);??
begin
??? Hnk_PassKey_Fm1.myspeedBtnclick;
end;

procedure?THnk_PassKey_Fm1.Edit1KeyPress(Sender:?TObject;?var?Key:?Char);?
begin
?? if Key=#13 then Hnk_PassKey_Fm1.myspeedBtnclick
end;

或許是你的SpeedButton有問題, 或者是其內引用的變數有未被宣告, 以上的寫法不代表原來你的寫法是錯的,
只是比較具有結構化, 因為有時候你直接去呼叫另一組Delphi創建物件的事件時, 會有先後順序的問題, 如果順序不對,
很可能就會造成後呼叫者先run, 而前者卻未被創建出來的問題, 你引發的問題, 正是呼叫的事件引用到不存在變數或被釋放的物件所導致的
另外, 建議你先檢查SpeedButton中所有的自定變數宣告是否存在

===================引 用 mephise 文 章===================
小弟資質愚魯, 怎麼查也查不出來 Delphi 有 forbidden 這個 method, 莫不成是自訂的嗎?
如果是的話, 問題一定出在這行 SpeedButton1.forbidden(Sender);



var???work_send:string;???


===>>感謝 Mephise 及 ac910127 二位前輩熱誠分析指導, 問題好像如 PD 版主說的 [呼叫者先run, 而前者卻未被創建出來的問題]
小弟把SpeedButton 刪掉 重新加入 然後再測試,居然就不再出現錯誤,請問這是物件問題嗎?

P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#7 引用回覆 回覆 發表時間:2011-02-22 15:16:47 IP:118.169.xxx.xxx 未訂閱
或許是DFM出問題, 產生SPEEDBUTTON 被建立的順序不對吧! WHO KNOWS?
===================引 用 K1086 文 章===================
===>>感謝 Mephise 及 ac910127 二位前輩熱誠分析指導, 問題好像如 PD 版主說的 [呼叫者先run, 而前者卻未被創建出來的問題]
小弟把SpeedButton 刪掉 重新加入 然後再測試,居然就不再出現錯誤,請問這是物件問題嗎?

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