有個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事件中,在這個事件中,我釋放了這個對象,在接下來的代碼中,又訪問了這個對象,造成訪問地址錯誤。問題就是這個原因,接下來,大俠幫我改變原來的實現,不再刪除這個對象,如果不需要這個對象,則不顯示這個對象,將其隱藏起來,所以因為這個問題產生的各種奇怪現象都解決了!