2017-03-23 52 views
0

我試圖得到一個訪問SQL查詢做這個(下半僞代碼)如何獲取表單的值到SQL查詢中?

UPDATE SignIn SET SignIn.Complete=True, CompletedBy=(Select [FirstName] & " " & [LastName] AS EmployeeName From UserList where POid = Forms!HiddenUserCheck!txtPOid), CompletedDateTime=Now() 

於是經過查詢將運行,在數據庫中的數據會看起來像

Complete EmployeeName CompletedDateTime 
True  John Smith 3/23/2017 8:34:10 AM 

的更新查詢不起作用,因爲語法並不知道如何解決它。

確切的錯誤信息是

無效備註,OLE,或超鏈接對象在子查詢 '[姓] & 「」 & [姓氏]'。

+0

這將在簽到更新所有記錄。可能不是你想要的。 – Gustav

+0

這是我想要的 –

+0

哦,我錯過了你的確切錯誤。請參閱編輯。 – Gustav

回答

0

由於雙重感嘆號,該查詢可能會引起合適的結果。取而代之的

Forms!HiddenUserCheck!txtPOid

嘗試

Forms!HiddenUserCheck.txtPOid

您也有一個額外的)在結束你的WHERE Statment

+0

我注意到並解決了它,但它抱怨[名字]&「」&[姓氏]。在子查詢[名字]&「」&[姓氏] –

0

OK,那麼你的問題可能是該子查詢可能會返回多條記錄:

UPDATE 
    SignIn 
SET 
    SignIn.Complete=True, 
    CompletedBy = 
     (Select First([FirstName] & " " & [LastName]) AS EmployeeName 
     From UserList 
     Where POid = Forms!HiddenUserCheck!txtPOid), 
    CompletedDateTime = Now() 

如果您的名稱字段是Memo/LongText字段,則可能是錯誤的來源。如果是,請嘗試:

UPDATE 
    SignIn 
SET 
    SignIn.Complete=True, 
    CompletedBy = 
     (Select First(Left([FirstName], 255) & " " & Left([LastName], 255)) AS EmployeeName 
     From UserList 
     Where POid = Forms!HiddenUserCheck!txtPOid), 
    CompletedDateTime = Now() 

編輯。

您可以嘗試使用使用DLookup子查詢:

UPDATE 
    SignIn 
SET 
    SignIn.Complete=True, 
    CompletedBy = 
     DLookup("[FirstName] & " " & [LastName]", "UserList", "POid = " & Forms!HiddenUserCheck!txtPOid & ""), 
    CompletedDateTime = Now() 
+0

中的所有字段都是短文本,是/否或日期/時間字段 在UserList中,FirstName和姓氏是「長文本」 –

+0

我用你創建的查詢,我得到一條消息,說「操作必須使用可更新的查詢」我在查詢的末尾添加了一行,用1行進行測試,添加的行是WHERE SignInID = 9231; –

+0

我明白了,然後試試DLookup,看看編輯。 – Gustav