2013-12-21 48 views
2

我有一個生產數據庫,它使用SQL Server後端,並將錶鏈接到Access前端。出於性能方面的原因,我試圖將我的大部分報表查詢編寫爲SQL視圖,並簡單地從Access中傳遞參數。從SQL Server查詢中訪問Access中的數字格式問題

我遇到的問題是,我似乎沒有被允許格式在SQL視圖中計算的字段。

例如,我有一個表:

CaseLot Drums GrossWeight %H2O 
    01  10  10,301  5.21 

鼓,毛重,並且鼓都是十進制數據類型,但每個具有不同的規模。

在我看來,我包括從上表中以下計算字段的值,但也:

[GrossWeight] - 19.6*[Drums] AS NetWeight 
([GrossWeight] -19.6*[Drums])*(100-[%H2O])/100 AS DryWeight 

當我通過對訪問扯這些計算領域,我沒有問題,格式化淨重領域,但它不會讓我進入DryWeight領域。這真是令人沮喪,因爲我想將DryWeight字段顯示爲只有兩位小數,並且它不會這樣做。

我也嘗試過在Access中應用Round()函數,但是當我包含一個縮放比例時,它似乎給了我一個「循環引用」錯誤。 Round(DryWeight)將其舍入到小數點後0位,但Round(DryWeight,2)給了我一個錯誤。

這裏發生了什麼?

+0

什麼是對乾重的代碼,你表現出的農產品,當你運行它?另外,你可以選擇%H2O嗎?也許問題是列名以特殊字符開頭。 –

+0

它給出的例子給出9578.5295。我想顯示的是9,578.53。選擇%H2O時我沒有任何困難。我有更復雜的總結查詢內置,也工作得很好,除了這種隨機格式問題。 – bmansk8s

+0

您是否嘗試過這裏提到的格式化功能? http://www.techonthenet.com/access/functions/string/format.php –

回答

3

它幾乎就好像Access將這些計算出的數字識別爲字符串。

它是。我使用SQL Server 2005和Access 2010中我有一個名爲[CaseLotView] SQL Server中的視圖...

CREATE VIEW [dbo].[CaseLotView] 
AS 
SELECT 
    CaseLot, 
    Drums, 
    GrossWeight, 
    [%H2O], 
    GrossWeight - 19.6 * Drums AS NetWeight, 
    (GrossWeight - 19.6 * Drums) * (100 - [%H2O])/100 AS DryWeight 
FROM 
    dbo.CaseLotData 

重建的問題......當我在Access中創建鏈接表,並打開它,我見以下內容:

AccessView.png

注意,[淨重]值右對齊的(解釋爲數字),而[DryWeight]值是左對齊(解釋爲字符串)。

一個解決辦法是創建基於轉換[DryWeight]使用CDbl()功能爲數字鏈接表的Access查詢:基於該查詢

SELECT 
    dbo_CaseLotView.CaseLot, 
    dbo_CaseLotView.NetWeight, 
    CDbl([DryWeight]) AS dblDryWeight 
FROM dbo_CaseLotView; 

報告將承認[dblDryWeight]爲數字型,提供預期的格式選項。

(請注意,雖然有一個CDec()功能VBA它不能在Access查詢工作 - 裁判:here

+0

感謝您的解決方法!這有什麼原因嗎?爲什麼Access將它解釋爲一個字符串? – bmansk8s

+0

@ bmansk8s我無法提供具體原因,但有時Access會將數字結果視爲字符串,如果**(1)**生成的數據類型是Access不直接支持的數據類型,或**(2)* *如果涉及某種類型的雜耍(因爲在這種情況下,看起來SQL Server視圖實際上是基於顯示的小數位數返回Float而不是Decimal)。 –

+0

好極了。謝謝你的幫助。 – bmansk8s