線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1169
推到 Plurk!
推到 Facebook!

on new record error

答題得分者是:Justmade
QOO10
初階會員


發表:59
回覆:89
積分:29
註冊:2002-12-25

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-03-29 15:13:55 IP:61.229.xxx.xxx 未訂閱
請教各位:            下列兩段程式中為何第二段程式再第二次執行出現  'Access violation at address 0055f478 in...' 但是加了  dmSLS_DeliverOrder 就 ok !! 單此欄位本來在 dmSLS_DeliverOrder 內ㄚ怪怪,且 第一次 run 沒問題??謝謝!!    ps.第二此執行使指,在 mainfrom 第二次 create           procedure TdmSLS_DeliverOrder.dtDellistNewRecord(DataSet: TDataSet); begin   inherited;    dataset.fieldbyname'DEL_SER').value:=dmSLS_DeliverOrder.dtDeliverDEL_NO.value; end;    procedure TdmSLS_DeliverOrder.dtDellistNewRecord(DataSet: TDataSet); begin   inherited;   dataset.fieldbyname('DEL_SER').value:=dtDeliverDEL_NO.value; end;
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-03-29 15:31:53 IP:218.16.xxx.xxx 未訂閱
出現 Access violation , 絕大部份的原因是你呼叫沒建立或已釋放的一個物件。 雖然我不知道為甚麼會第二次 create mainform,但我相信你是在 MainForm 裡 create TdmSLS_DeliverOrder 的,而你兩次 create mainform, 就 create 了 兩個 TdmSLS_DeliverOrder 的 instance 了。 你的兩個例子顯示,在你第二次執行時,由第二個 mainform create 及使用的 TdmSLS_DeliverOrder instance 裡 dtDeliverDEL_NO 未被建立起來。 那為何加上 dmSLS_DeliverOrder 就可以呢? 因為 由第一個 MainForm 建立的TdmSLS_DeliverOrder instance (dmSLS_DeliverOrder) 還存在, 你加上了 dmSLS_DeliverOrder 就即是到第一個 Mainform 建立的 dm 去拿 dtDeliverDEL_NO.value 這個資料而用在 第二個 mainform 建立的 dm 裡。 這些主要是按你寫上有限的資料作估計,要更多的資料才可能更精確的分析。
QOO10
初階會員


發表:59
回覆:89
積分:29
註冊:2002-12-25

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-03-30 00:53:33 IP:61.229.xxx.xxx 未訂閱
引言: 出現 Access violation , 絕大部份的原因是你呼叫沒建立或已釋放的一個物件。 雖然我不知道為甚麼會第二次 create mainform,但我相信你是在 MainForm 裡 create TdmSLS_DeliverOrder 的,而你兩次 create mainform, 就 create 了 兩個 TdmSLS_DeliverOrder 的 instance 了。 你的兩個例子顯示,在你第二次執行時,由第二個 mainform create 及使用的 TdmSLS_DeliverOrder instance 裡 dtDeliverDEL_NO 未被建立起來。 那為何加上 dmSLS_DeliverOrder 就可以呢? 因為 由第一個 MainForm 建立的TdmSLS_DeliverOrder instance (dmSLS_DeliverOrder) 還存在, 你加上了 dmSLS_DeliverOrder 就即是到第一個 Mainform 建立的 dm 去拿 dtDeliverDEL_NO.value 這個資料而用在 第二個 mainform 建立的 dm 裡。 這些主要是按你寫上有限的資料作估計,要更多的資料才可能更精確的分析。
謝謝您的回答,可能是我描述不清楚所以您可能誤會了我再詳細描述一下: 我有一個 mainform 與 DeliverOrderform 及 dmSLS_DeliverOrder (DataModule) MainFrom 利用如下程式 call DeliverOrderFrom try DeliverOrderform := TDeliverOrderform.create(nil); DeliverOrderform.showmodal; finally freeandnil(DeliverOrderForm); end; . . 然在 DeliverOrderForm OnCreate Events create DataModule dmSLS_DeliverOrder:=tdmSLS_DeliverOrder.create(self) 使用 self 所以理當 DeliverOrderForm 在 MainForm Freeandnil( deliverOrderForm) 也 free dmSls_DeliverOrder 了但我的 mainform 第二次呼叫 deliverOrderForm 出現錯誤?? 我使用了教簡易的程式如上方式!!測都 ok 但為獨在專案內不行,應 專案是公司的我不能整個 post 上來請前輩幫我想想方式來 debug!! 感績不盡!!
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-03-30 12:57:58 IP:218.16.xxx.xxx 未訂閱
引言: 使用 self 所以理當 DeliverOrderForm 在 MainForm Freeandnil( deliverOrderForm) 也 free dmSls_DeliverOrder 了
你最好再看看 FreeAndNil 的 Help。我從沒使用這功能但我看 help 後不認為他會自動為你 Free dmSls_DeliverOrder。
引言: 我使用了教簡易的程式如上方式!!測都 ok 但為獨在專案內不行,應 專案是公司的我不能整個 post 上來請前輩幫我想想方式來 debug!! 感績不盡!!
使用較簡易的程式如上方式沒問題,但在那專案不行,即是問題不是完全出現在這部份。既然我們沒能看到問題在那裡,也很難直接準確地指出問題所在及解決方法。 重申一下你提的資料出現了甚麼可調查的方向。 procedure TdmSLS_DeliverOrder.dtDellistNewRecord(DataSet: TDataSet); begin inherited; dataset.fieldbyname'DEL_SER').value:=dmSLS_DeliverOrder.dtDeliverDEL_NO.value; end; procedure TdmSLS_DeliverOrder.dtDellistNewRecord(DataSet: TDataSet); begin inherited; dataset.fieldbyname('DEL_SER').value:=dtDeliverDEL_NO.value; end; 第二次執行時第一版本可行但第二個不行,很明顯地顯示那個時侯有兩個 TdmSLS_DeliverOrder 的 instance 存在,而執行中的那個絕不是叫做 dmSLS_DeliverOrder ,因為若執行中的 instance 叫做 dmSLS_DeliverOrder 的話,這兩個版本便完全相同了。而第一個版本沒問題亦證明了當時確實有一個名字叫 dmSLS_DeliverOrder 的 instance 存在,只是不是正在執行的那個 instance 罷了。 建議你在 DeliverOrderForm onClose 時手動 free 了 dmSLS_DeliverOrder試試看。
QOO10
初階會員


發表:59
回覆:89
積分:29
註冊:2002-12-25

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-03-30 23:13:20 IP:61.229.xxx.xxx 未訂閱
引言:
引言: 使用 self 所以理當 DeliverOrderForm 在 MainForm Freeandnil( deliverOrderForm) 也 free dmSls_DeliverOrder 了
你最好再看看 FreeAndNil 的 Help。我從沒使用這功能但我看 help 後不認為他會自動為你 Free dmSls_DeliverOrder。
引言: 我使用了教簡易的程式如上方式!!測都 ok 但為獨在專案內不行,應 專案是公司的我不能整個 post 上來請前輩幫我想想方式來 debug!! 感績不盡!!
使用較簡易的程式如上方式沒問題,但在那專案不行,即是問題不是完全出現在這部份。既然我們沒能看到問題在那裡,也很難直接準確地指出問題所在及解決方法。 重申一下你提的資料出現了甚麼可調查的方向。 procedure TdmSLS_DeliverOrder.dtDellistNewRecord(DataSet: TDataSet); begin inherited; dataset.fieldbyname'DEL_SER').value:=dmSLS_DeliverOrder.dtDeliverDEL_NO.value; end; procedure TdmSLS_DeliverOrder.dtDellistNewRecord(DataSet: TDataSet); begin inherited; dataset.fieldbyname('DEL_SER').value:=dtDeliverDEL_NO.value; end; 第二次執行時第一版本可行但第二個不行,很明顯地顯示那個時侯有兩個 TdmSLS_DeliverOrder 的 instance 存在,而執行中的那個絕不是叫做 dmSLS_DeliverOrder ,因為若執行中的 instance 叫做 dmSLS_DeliverOrder 的話,這兩個版本便完全相同了。而第一個版本沒問題亦證明了當時確實有一個名字叫 dmSLS_DeliverOrder 的 instance 存在,只是不是正在執行的那個 instance 罷了。 建議你在 DeliverOrderForm onClose 時手動 free 了 dmSLS_DeliverOrder試試看。
謝謝您我試試 用手動 free !!
系統時間:2024-05-04 5:45:04
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!