MS Access允許使用數字類型的GUID(在德語中稱爲「Replikations-ID」,所以我猜英文中應該是'複製ID'),它在數據庫中存儲爲16字節的二進制字段。如何設置一個GUID作爲來自Delphi的ADO查詢參數?
我發現如何訪問這些字段德爾福TADOQuery/TADOTable使用
(TheQuery.FieldByName('SomeGuidField') as TGUIDField).AsGuid;
用,但現在我想執行一個SQL查詢是這樣的:
SELECT * FROM SomeTable WHERE SomeGuidField=:AGuid
我試着設置一個TADOQuery.SQL屬性轉換爲上述語句,但發現無法真正設置AGuid
參數,以便可以打開查詢。無論我試過導致(ADO/COM)錯誤
沒有爲一個或多個必需參數
例如給定值:
TheQuery.ParamByName('AGuid').Value := QuotedString(GuidToStr(AGuid));
TheQuery.Open; // <<== crashes here
這不工作,要麼:
TheQuery.ParamByName('AGuid').Value := GuidToStr(AGuid);
TheQuery.Open; // <<== crashes here
我一起來看看如何TGuidField(...).AsGuid
作品和發現它首先將GUID轉換爲字符串,然後將字符串轉換爲變體(反之亦然)。
它工作正常,如果我總是生成的SQL語句是這樣的:
SELECT * FROM SomeTable WHERE SomeGuidField='<a guid goes here>'
由於我通過在程序TADOQuery對象周圍,我想只改變AGuid
- 參數來保持大多數方法與實際的SQL語句無關。
是否有任何其他方式來設置一個GUID參數比總是改變完整的SQL語句?
(它必須是一個GUID,因爲我需要一個全局唯一標識符與作爲MS SQL或MS訪問基於其他數據庫同步。)
編輯 vradmilovic是正確的,這個工程:
TheQuery.ParamByName('AGuid').Value := GuidToStr(AGuid);
TheQuery.Open;
我不明白爲什麼它第一次嘗試不起作用。
等待,關閉太過本地化?我將不得不強烈反對。我應該重新提出這個問題,並重新公開投票。 – 2016-11-22 02:26:46