升級到10.4.2遇到一個怪問題


有個OpenRecordItem方法,代碼如下:

procedure TCRecordInfo.OpenRecordItem;
var
  sqlstr: string;
begin
  sqlstr := 'Select * from cr_recorditem where FID=' + qrecord.FieldByName('FID').AsString.QuotedString;

  qRecordItem.Close;
  qRecordItem.Query.Text := sqlstr;
  qRecordItem.Open;
end;

只是打開一個數據集,要是執行這個方法,就會產生一個地址錯誤,注釋掉,則沒有。

跟蹤代碼,是因為執行TComponent._Release產生的問題,是哪一個對象呢?

function TComponent._Release: Integer;
begin
  if FVCLComObject = nil then
    Result := -1   // -1 indicates no reference counting is taking place
  else
    Result := IVCLComObject(FVCLComObject)._Release;//出錯
end;

 2021-3-10:在QDAC作者王大俠的幫助下,終於搞定這個問題,原來,我自畫的工具條造成的。就是說,按下一個控件,然后邏輯寫在了MouseUp事件中,在這個事件中,我釋放了這個對象,在接下來的代碼中,又訪問了這個對象,造成訪問地址錯誤。問題就是這個原因,接下來,大俠幫我改變原來的實現,不再刪除這個對象,如果不需要這個對象,則不顯示這個對象,將其隱藏起來,所以因為這個問題產生的各種奇怪現象都解決了!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM