摘要: Crystal報表使用SQL查詢連接到Access數據庫(其中包括)。其中一列包含在使用Jet4 DAO驅動程序連接到Access數據庫時在Crystal中作爲「TEXT [255]」字段公開的表達式,但在使用Microsoft Office 12.0 Access數據庫引擎OLE連接時作爲「備忘錄」 DB提供者。這會導致下游問題。MS Office 12.0 Access數據庫引擎與Jet 4驅動程序相比,OLE DB提供程序驅動程序向文本列分配不同的數據類型
詳細信息: 我有一個Crystal報表,它使用兩個不同的MS Access數據庫中的數據,使用報表中定義的單獨的SQL查詢。然後使用錶鏈接合並結果(錶鏈接類似於表連接,但是跨不同數據庫的表操作,並且由Crystal本身處理,而不是運行服務器端)。
錶鏈路基於(在一側)上在SQL查詢中計算列(「ColumnToLinkOn」),這看起來像這樣(匿名):
SELECT
Column1 AS Heading1,
Column2 as Heading2,
Left(Column2,6) AS ColumnToLinkOn -- Table link based on this column
FROM NameOfTable
在列2的數據類型訪問是Short Text
(正如Access 2013所稱的 - 以前這被稱爲Text
)。
現在有趣的一點:當從Crystal到Access數據庫的連接類型是Jet4(DAO)時,那麼ColumnToLinkOn的數據類型是String [255]
。但是,如果連接更改爲使用Microsoft Office 12.0 Access數據庫引擎OLE DB提供程序,則Crystal會將其選爲Memo
(我們更改連接類型是因爲我們需要它在32位和64位模式下工作,但沒有64位Jet4驅動程序)。與此問題是錶鏈接不能基於備註字段,以便呈現鏈接無效。
我的問題: 如何更改SQL查詢以將數據類型轉換爲普通文本字段,以便可以在錶鏈接中使用它?根據Access文檔,LEFT function返回Variant (String)
,我懷疑這會導致問題。源列不是類型的備忘錄,所以它顯然是介紹該問題的左函數。
我試過包裝CStr
的結果,像這樣:CStr(Left(Column2,6)) AS ColumnToLinkOn
,但這沒有什麼區別。我還發現一個暗示,說這樣做Replace(Left(Column2,6), "", "") AS ColumnToLinkOn
會有所幫助,但事實並非如此。不幸的是,Access也不支持CAST(column AS type)
語法。
我使用Access 2013和Crystal Reports 2013.
任何幫助將不勝感激!
我沒有CR的經驗。但是如果使用'Nz'或'Left $'會發生什麼?或者與字符串連接:'「」&Left(Column2,6)AS ColumnToLinkOn'? – Gustav
感謝您的問題,古斯塔夫。嘗試'Nz(Left(Column2,6))AS ColumnToLinkOn'或'Left(Nz(Column2),6)AS ColumnToLinkOn'失敗,並且表達式中的'Undefined function'NZ'。接下來會嘗試你的其他建議。 –
不幸的是,'Left $(Column2,6)AS ColumnToLinkOn'沒有什麼區別。 ''「&Left(Column2,6)AS ColumnToLinkOn'也不會作爲備忘錄出現。 –