2016-03-11 154 views
1

我在MS Access中做了一個報告 - 我在這裏要做的事情基本上是APPEND查詢我已經創建的表 - 我選擇第一個值,更改並更新桌子。我遇到的問題是 - 該報告將被VB6應用程序使用。所以用戶根本不會看到Access。MS Access VBA問題

與我追加查詢的事情是,它需要一個USER ID運行(4位數字)。通常,當我在Access中運行報表時,我將參數傳遞給Access中的表單 - 並使用它們來運行查詢。但是,在這種情況下,我需要用戶在追加查詢時輸入一個值,另外,當在VBA中追加查詢時,它首先表示"You are about to append a query, are you sure"(或沿着這些行),那麼是否還有一種方法可以自動執行該查詢,所以當我追加它時,什麼都沒有發生?

這是我從tempTable追加並選擇日期代碼:

CurrentDb.Execute "DELETE from [tempCompanyMgmt-NOW];" 
DoCmd.OpenQuery "qryCompanyMgmt-SUE" - i made this append! 
Set rs1 = CurrentDb.OpenRecordset("Select * from [tempCompanyMgmt-NOW]", , dbOpenDynamic) 

所以只要我按OK,YES,當我得到通知追加過程中,輸入參數爲USER ID - 一切正常精細。

回答

0

看起來像你的降價一個錯字,應該二號線爲:

DoCmd.OpenQuery "qryCompanyMgmt-SUE - i made this append!" 

你需要刪除提及形式qryCompanyMgmt-SUE - i made this append!查詢中,並交換它的參數名稱。您可以使用Access接口向查詢中顯式添加參數子句,然後使用VB6中的ADO(或DAO)在打開/執行查詢之前設置參數值。

"You are about to append a query, are you sure"消息是Access功能(並且可以禁用),所以如果您希望VB6應用程序提供此類警告,那麼您需要使用MsgBox自己創建它。

+0

它不應該說「我做了這個APPEND」 – FatBoySlim7

0

一種方法是將附加查詢放入代碼中,然後填入參數。

我不知道您的具體情況,但這樣的:

If not isValidUserID(me.UserID) Then 
    msgbox "Please enter a a valid user id" 
    exit sub 
End If 



Dim strSQL As String 
strSQL = "DELETE * from [tempCompanyMgmt-NOW];" 
CurrentDb.Execute strSQL, dbFailOnError 


strSQL = "INSERT INTO tempCompanyMgmt-NOW (FieldName1, FieldName2, FieldName3) " & _ 
     "SELECT FieldName1, FieldName2, FieldName3 FROM tempCompanyMgmt WHERE UseriD=" & Me.UserID 

CurrentDb.Execute strSQL, dbFailOnError 

驗證用戶ID,你可以這樣做:

If (Len(me.UserID) = 4 And IsNumeric(me.UserID)) Then 

Public Function isValidUserID(varUserID As Variant) As Boolean 
Dim blnRet As Boolean 

If Len(varUserID) = 4 And IsNumeric(varUserID) Then 
    blnRet = True 
End If 

isValidUserID = blnRet 
End Function 
+0

這看起來像是一個等待發生的SQL注入攻擊。用用戶輸入的字符串構建SQL是一個壞主意。訪問是沙盒,但它仍然不是一個好習慣,因爲最終可能導致數據不一致。想象一下,如果strEmpName是「'或者是空或者是'*」 – ThunderFrame

+0

我編輯更準確地反映了用戶標識方案。 SQL注入攻擊沒有問題,因爲只有4位數字數據將被接受。 –

+0

我不需要驗證它。我需要引用Access中最初傳遞值的形式。我將它傳遞給frmInfo userID – FatBoySlim7

0

爲了擺脫MsgBox告訴我,我打算追加一個查詢,我在我的模塊中包含這個,然後打開我的追加查詢。 。

DoCmd.SetWarnings False 

我意識到我一旦傳遞給表單(用戶ID)的值,當我查詢將追加該值被傳遞作爲參數。所以一切都安排好了。感謝所有幫助!