這聽起來很愚蠢,我可能會錯過重要的東西,但在這裏。FireDac查詢字段大小不更新sql更改
我正在將舊軟件從BDE遷移到Firedac,我注意到一些奇怪的行爲(XE6 VCL - Firedac)。
想象一下:
我們已經有一個簡單的SQL(SQL1)查詢,該查詢在設計時定義並具有檢索到的所有領域(3場 - 鱈魚,DES和IMG)。在運行時,我執行這個查詢,並檢查一個cod字段的大小,很好。然後我更改SQL(SQL2)並繼續檢查新的cod字段大小,這也適用。但是,如果我再次將SQL更改爲SQL1並檢查cod域的大小,它將假定第二個查詢字段大小的大小相同。
我已經在一個小項目中對它進行了測試,這種情況也會發生,如下所示。
(I放置2個按鈕和一個標籤查詢的大小)
procedure TForm1.SQL1Click(Sender: TObject);
begin
FDQuery1.Close;
FDQuery1.SQL.Clear;
FDQuery1.SQL.Text:='select grefcod as cod, grefdesc as des, grefimg as img from wtv';
FDQuery1.Open;
sLabelFX1.Caption:=IntToStr(FDQuery1.FindField('COD').Size);
end;
procedure TForm1.SQL2Click(Sender: TObject);
begin
FDQuery1.Close;
FDQuery1.SQL.Clear;
FDQuery1.SQL.Text:='select ATRBcod as cod, ATRBdes as des from wtv2 ';
FDQuery1.Open;
sLabelFX1.Caption:=IntToStr(FDQuery1.FindField('COD').Size);
end;
首先,我打電話SQL1Click,鱈大小爲20;
第二我打電話SQL2Click,鱈魚大小是5;
最後,我再次調用SQL1Click和cod大小是5 - >錯誤。
編輯:SQL1 cod的實際大小是20 varchar,而SQL2的實際大小是5 varchar。
它很奇怪,如果我不能更好地解釋它,很抱歉。 無論如何,如果我在設計時刪除檢索到的字段,問題就不存在了,我只需要改變字段的獲取方式,但由於這是一個巨大的軟件,我不想這麼做。
當我們完成遷移時,我們獲得了很多訪問衝突,大多數字段是持久性的,並且由於很多查詢在運行時更新/更改,我們注意到字段大小正在變爲最小大小。在小型項目中,我們手動更改並刪除了持久性字段。但是在更大的軟件中,這不是我們想要做的事情。正如我在其他答案中所說的,設置「更新持久性」選項似乎可以解決此問題。無論如何,我感謝您的意見,謝謝。 –