2016-09-14 25 views
2

我需要一些幫助解決正在進行的問題。 我需要在訪問中更新數據庫,並且使用Long和Integers正常工作。在訪問中使用VBA插入單/雙類型到數據庫

看看這段代碼。

sql = "UPDATE DBNAME SET Long_Field = " & Long_Variable & " WHERE ID = " & id 
DoCmd.SetWarnings (False) 
DoCmd.RunSQL sql 

此代碼運行完美,它需要一個很長的變量並將其放入設置爲Long的正確字段中。

但是,如果我想填充單/雙場(IVE嘗試都)

sql = "UPDATE DBNAME SET Double_Field = " & double_Variable & " WHERE ID= " & id 
DoCmd.SetWarnings (False) 
DoCmd.RunSQL sql 

我不斷收到運行時錯誤3144:語法錯誤在更新語句。 我可以從字面上切換出字段名稱和變量名稱,代碼完美無瑕地運行,但只要我嘗試發送一個double值(例如(5,8))到表中設置爲雙倍,它給了我這個錯誤。

有人嗎?

+0

當你說一個_double_值你說的是兩個值如(5-8)或逗號小數點分隔符? –

+0

逗號是小數點 – Arne

+1

啊,好吧....只是檢查明顯。 :) –

回答

3

我假設你想要一個點作爲你的字符串中的小數點分隔符。

使用系統區域設置中的分隔符完成從double到字符串的轉換,因此在您的情況下使用逗號。

這意味着

double_variable = 5.8 
sql = "... " & double_variable & " ..." 

將在SQL變量產生... 5,8 ...。 解決最簡單的方法是使用

"..." & Replace(CStr(double_variable), ",", ".") & "..." 

這將替換所有,.。我將CStr放在那裏,以確保它首先轉換爲字符串。如果系統區域設置發生變化,它也將工作,因爲如果沒有,,則不會發生任何事情。唯一的警告是,如果由於某種原因轉換插入1000s分隔符將失敗,但這隻會在其他情況下相關,因爲我不認爲CStr將永遠這樣做。

+0

即使我定義一個名爲double_variable As Double的變量,將其設置爲double_variable = 5.8,然後發送它,它仍然會引發錯誤。如果我然而將其設置爲double_variable = 5,它工作正常。 – Arne

+0

您需要完整的表達式(替換, - >。)@Arne – Andre

+0

@Arne你試過我的建議嗎?我加了一點解釋。 – arcadeprecinct

2

目前的答案不是最簡單的,也不是最簡單的。

通用的方法是使用海峽,因爲它總是返回一個點作爲小數點分隔符:

sql = "UPDATE DBNAME SET Double_Field = " & Str(double_Variable) & " WHERE ID = " & id & "" 
+0

哇。我完全不知道這一點。謝謝! – Andre