SQL查询VBA访问问题

时间:2014-05-31 22:00:14

标签: ms-access

当我尝试执行此代码时出现错误,我认为我在sql查询中遇到问题,行"Service = Dlookup ..."可以帮助您!非常感谢你

    Private Sub btnConnexion_Click()

    Dim Categ As Integer
    Dim Service As String
    Dim IdProf As Integer

    Dim db As DAO.Database
    Dim qdf As DAO.QueryDef
    Dim strSQL As String
    Set db = CurrentDb


    'vérification que l'utilisater a bien entrer e login et le mot de passe
    Me.txtlogin.SetFocus
    If IsNull(Me.txtlogin) Then
    MsgBox "svp entrer votre login ", vbInformation, "login required "
    Me.txtlogin.SetFocus
    ElseIf IsNull(Me.txtmdp) Then
    MsgBox "svp entrer votre mots de passe ", vbInformation, "mdp required "
    Me.txtmdp.SetFocus
    Else
    'vérification que le login et le mdp sont corrects
    If (IsNull(DLookup("login", "dbo_Authentification", "login='" & Me.txtlogin.Value &       "'"))) Or _
        (IsNull(DLookup("mdp", "dbo_Authentification", "mdp='" & Me.txtmdp.Value & "'")))    Then
        MsgBox "login ou mdp incorrect"
    Else
    'récupération de l'IdCatégorie dans Categ, pour préciser les sessions des acteurs selon   leurs catégories professionneles
        Categ = DLookup("IdCategorie", "dbo_Professionnel", "IdProfessionnel = " &   DLookup("IdCompte", "dbo_Authentification", "login='" & Me.txtlogin.Value & "'"))
        'DoCmd.Close
        If Categ = 3 Then
            DoCmd.OpenForm "role"
            Else
            DoCmd.OpenForm "ListingPatients"

            'Service récupère le service du professionnel authentifié pour l'afficher à   l'entete du formulaire "ListingPatients"
            Service = DLookup("IntituleServ", "dbo_Service", "IdService = " &   DLookup("IdProfessionnel", "dbo_Professionnel", "IdProfessionnel = " & DLookup("IdCompte",   "dbo_Authentification", "login='" & Me.txtlogin.Value & "'")))
            Forms![ListingPatients]![txtIntituleServ] = Service



            strSQL = "SELECT dbo_Patient.*, dbo_Service.IntituleServ, dbo_HospitalisatAcuelle.lit, dbo_Professionnel.IdProfessionnel, dbo_HospitalisatAcuelle.DateEntree, dbo_HospitalisatAcuelle.DateSortie FROM dbo_Service INNER JOIN ((dbo_Professionnel INNER JOIN dbo_Authentification ON dbo_Professionnel.IdProfessionnel = dbo_Authentification.IdCompte) INNER JOIN (dbo_Patient INNER JOIN (dbo_HospitalisatAcuelle INNER JOIN dbo_DonneePatientActuelles ON dbo_HospitalisatAcuelle.IdHosp = dbo_DonneePatientActuelles.IdHosp) ON dbo_Patient.IdPatient = dbo_DonneePatientActuelles.IdPatient) ON dbo_Professionnel.IdProfessionnel = dbo_HospitalisatAcuelle.IdProfessionnel) ON dbo_Service.IdService = dbo_Professionnel.Idservice WHERE (((dbo_HospitalisatAcuelle.DateEntree)<=Now()) AND ((dbo_HospitalisatAcuelle.DateSortie)>Now())) OR (((dbo_HospitalisatAcuelle.DateSortie) Is Null) AND dbo_Service.IntituleServ = '" & Service & "') ;"

       End If
    End If
   End If


   End Sub

因此,当我执行此代码时,我收到错误&#34;无效使用null&#34;在线&#34;服务= ...&#34;并且sql查询在!时返回条件!非常感谢你


所以,在添加Nz之后,我认为Null的问题已经解决了

           Service = Nz(DLookup("IntituleServ", "dbo_Service", "IdService = " & DLookup("IdService", "dbo_Professionnel", "IdProfessionnel = " & DLookup("IdCompte", "dbo_Authentification", "login='" & Me.txtlogin.Value & "'"))), "inconnu")
        Forms![ListingPatients]![txtIntituleServ] = Service

但我仍然遇到SQL查询的问题,我认为我没有在VBA代码中集成正确的SQL查询语法,你能看看这一行:

        strSQL = "SELECT dbo_Patient.*, dbo_Service.IntituleServ, dbo_HospitalisatAcuelle.lit, dbo_Professionnel.IdProfessionnel, dbo_HospitalisatAcuelle.DateEntree, dbo_HospitalisatAcuelle.DateSortie FROM dbo_Service INNER JOIN ((dbo_Professionnel INNER JOIN dbo_Authentification ON dbo_Professionnel.IdProfessionnel = dbo_Authentification.IdCompte) INNER JOIN (dbo_Patient INNER JOIN (dbo_HospitalisatAcuelle INNER JOIN dbo_DonneePatientActuelles ON dbo_HospitalisatAcuelle.IdHosp = dbo_DonneePatientActuelles.IdHosp) ON dbo_Patient.IdPatient = dbo_DonneePatientActuelles.IdPatient) ON dbo_Professionnel.IdProfessionnel = dbo_HospitalisatAcuelle.IdProfessionnel) ON dbo_Service.IdService = dbo_Professionnel.Idservice WHERE (((dbo_HospitalisatAcuelle.DateEntree)<=Now()) AND ((dbo_HospitalisatAcuelle.DateSortie)>Now())) OR (((dbo_HospitalisatAcuelle.DateSortie) Is Null)) ;"
        strSQL = strSQL & "WHERE [dbo_Service]![IntituleServ] = ' " & Service & " ' "
DoCmd.OpenQuery(strSQL) 

谢谢,

1 个答案:

答案 0 :(得分:2)

您已将Service声明为字符串变量。 如果未找到匹配的记录,则DLookup返回Null。 Null不能存储在String中,但可以存储在Variant中。

因此,请使用Dim Service As Variant并使用IsNull()

进行测试

或使用Service = Nz(DLookup(...), "Inconnu")返回&#34; Inconnu&#34;如果Dlookup()失败。