ms-access
  • access-vba
  • 2016-01-22 67 views 0 likes 
    0

    我傳遞Openargs並嘗試將其用作表單的recordource過濾器。這可以在其他形式下使用相同的設置正常工作。不過出於某種原因,這不適用於這一項。訪問表單的記錄源

    Private Sub Form_Load() 
    Dim sSQL As String 
    
        sSQL = "SELECT * " & _ 
         "FROM tblUserList " & _ 
         "WHERE NTID='" & OpenArgs & "';" 
        RecordSource = sSQL 
    
        If IsNull(Manager) Then 
        MsgBox "Returned 0 records", vbCritical, "Problem" 
        Exit Sub 
        End If 
    End Sub 
    

    如果我通過代碼時,Openargs在正確傳遞... SQL字符串正確地創建,我可以運行從查詢生成字符串,我得到一個返回的記錄......作爲我會期待的。

    但是,當表單加載時,它返回0條記錄,顯然這是一個問題......我放入IF來捕捉它,然後它碰到我的代碼的其餘部分。

    +0

    RecordSource = SQL。那樣工作?我一直認爲你必須指定Me.RecordSource。嘗試指定Me.RecordSource。另外,您不需要VBA字符串中的分號。 –

    +0

    你不需要'我'。它只是使智能感知更簡單。雖然;不需要......它在查詢生成器中有效或無效地工作。我無法弄清楚這有什麼問題。 – Rdster

    +0

    我能想到的其他事情是OpenArgs與前導/尾隨空格(Trim()會解決這個問題),或NTID是一個整數(在這種情況下,刪除圍繞OpenArgs的單引號)。除此之外,它看起來是對的。 –

    回答

    0

    我無法弄清楚上面的表格究竟有什麼問題......一切都應該有效。如前所述,在數據庫的其他區域使用完全相同的設置。

    最終我創建了一個全新的表單,並開始使用上面的代碼來過濾表單的記錄集,它工作得很好。我從頭開始完全重建了這個表單,它的工作方式和預期的一樣。

    我最好的猜測就是發生了什麼事情,以某種方式訪問​​損壞了形式的不可見部分?

    當處理Access和隨機,時髦的問題......重新開始。

    +0

    爲什麼不使用openform的「where」子句?這樣你就不需要任何SQL等等。然後,你可以在表單公開事件(不加載)中檢查recrods是否存在.RecordSetClone = 0並顯示一條消息,然後設置cancel = true(表單將因此不加載)。 –

    相關問題