Newsgroup: it.comp.appl.access
Titolo: query in visual basic

Ho copiato l'origine sql di una query, ma nel tentativo di inserirla nel 
codice legato all'apertura della maschera mi da errori...rimane tutto 
rosso... qualcuno sa aiutarmi a formattarla? soprattutto se il codice va a 
capo cosa devo inserire?
.Source = "SELECT PhoneBookTab.PersId, PhoneBookTab.LastName, 
PhoneBookTab.FirstName, PhoneBookTab.Email, PhoneBookTab.Email1, 
PhoneBookTab.Company, PhoneBookTab.Address, PhoneBookTab.PostalCode, 
PhoneBookTab.City, PhoneBookTab.Country, PhoneBookTab.Telephone, 
PhoneBookTab.Cellular, PhoneBookTab.Webpage, PhoneBookTab.Photopath, 
PhoneBookTab.Info, PhoneBookTab.Categoria, PhoneBookTab.Sottocategoria, 
PhoneBookTab.Sottocategoria1, PhoneBookTab.CategoriaFinale, 
[Forms]![Pannello comandi]![Sottocategorie1] AS Espr1, [Forms]![Pannello 
comandi]![sottocategorie] AS Espr2"
FROM PhoneBookTab WHERE (((PhoneBookTab.Sottocategoria)=[Forms]![Pannello 
comandi]![sottocategorie]) AND 
((PhoneBookTab.Sottocategoria1)=[Forms]![Pannello 
comandi]![Sottocategorie1])) OR 
(((PhoneBookTab.Sottocategoria)=[Forms]![Pannello comandi]![sottocategorie]) 
AND (([Forms]![Pannello comandi]![Sottocategorie1]) Is Null)) OR 
(((PhoneBookTab.Sottocategoria1)=[Forms]![Pannello 
comandi]![Sottocategorie1]) AND (([Forms]![Pannello 
comandi]![sottocategorie]) Is Null)) OR ((([Forms]![Pannello 
comandi]![Sottocategorie1]) Is Null) AND (([Forms]![Pannello 
comandi]![sottocategorie]) Is Null));"
         .Open
grazie a  tutti 

Ora, dopo qualche sistematina mi da come errore variabile non definita. Il 
codice è
Private Sub OpenRs(Optional WhereString As String = vbNullString)
   On Error GoTo errHandler
   Call ClearCtl
   With rs
         ' Se il RS era già aperto lo chiudo per riaprirlo
         ' con i nuovi parametri passati
         If .state = adStateOpen Then .Close
         .ActiveConnection = conString
         .CursorLocation = adUseClient
         .CursorType = adOpenKeyset
         .LockType = adLockOptimistic
         .Source = "SELECT PhoneBook.PersId, PhoneBook.LastName, 
PhoneBook.FirstName, PhoneBook.Email, PhoneBook.Email1, PhoneBook.Company, 
PhoneBook.Address, PhoneBook.PostalCode, PhoneBook.City, PhoneBook.Country, 
PhoneBook.Telephone, PhoneBook.Cellular, PhoneBook.Webpage, 
PhoneBook.Photopath, PhoneBook.Info, PhoneBook.Categoria, 
PhoneBook.Sottocategoria, PhoneBook.Sottocategoria1, 
PhoneBook.CategoriaFinale, [Forms]![Pannello comandi]![Sottocategorie1] AS 
Espr1, [Forms]![Pannello comandi]![sottocategorie] AS Espr2 FROM PhoneBook" 
& _
WHERE(((PhoneBook.Sottocategoria) = [Forms]![Pannello 
comandi]![sottocategorie]) And ((PhoneBook.Sottocategoria1) = 
[Forms]![Pannello comandi]![Sottocategorie1])) Or 
(((PhoneBook.Sottocategoria) = [Forms]![Pannello comandi]![sottocategorie]) 
And (([Forms]![Pannello comandi]![Sottocategorie1]) Is Null)) Or 
(((PhoneBook.Sottocategoria1) = [Forms]![Pannello 
comandi]![Sottocategorie1]) And (([Forms]![Pannello 
comandi]![sottocategorie]) Is Null)) Or ((([Forms]![Pannello 
comandi]![Sottocategorie1]) Is Null) And (([Forms]![Pannello 
comandi]![sottocategorie]) Is Null))
         .Open
   End With
   ' Riempio la ListBox di ricerca rapida con la Lista dei Nominativi
   Call listPers
   ' Ripristino il puntatore al 1° record in quanto la Routine precedente
   ' lo ha ciclato lasciandolo in EOF
   rs.MoveFirst
   ' Popolo i controlli nella Form con i dari del 1° Record
   Call showCurrentRec
   Exit Sub
e diventa gialla la stringa WHERE(((PhoneBook.Sottocategoria)... aiutatemi 
vi prego... 

Laura ha scritto:


  comandi]![sottocategorie] AS Espr2" & _
" FROM PhoneBook" & _
" WHERE(((PhoneBook.Sottocategoria) = [Forms]![Pannello 
comandi]![sottocategorie]) And ((PhoneBook.Sottocategoria1) =
  [Forms]![Pannello comandi]![Sottocategorie1])) Or
  (((PhoneBook.Sottocategoria) = [Forms]![Pannello
  comandi]![sottocategorie]) And (([Forms]![Pannello
  comandi]![Sottocategorie1]) Is Null)) Or 
(((PhoneBook.Sottocategoria1)=    [Forms]![Pannello 
comandi]![Sottocategorie1]) And (([Forms]![Pannello
  comandi]![sottocategorie]) Is Null)) Or ((([Forms]![Pannello
  comandi]![Sottocategorie1]) Is Null) And (([Forms]![Pannello
  comandi]![sottocategorie]) Is Null))"
-----------------------------
Vincenzo Turturro
Certificato Eucip Core Level
ITA 0000-002299 del 14/05/2007
---------------------------------------------
il sito comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------
risorse Access:
http://www.accessgroup.it
---------------------------------------------
Il sito comune di it.comp.as400
http://www.faq400.com
---------------------------------------------

 ha scritto nel messaggio 
news:48c6e49f$0$18938$5fc...@news.tiscali.it...

Ho inserito il codice, ma l'errore ora è cambiato: nessun valore specificato 
per alcuni parametri necessari... posto l'intero codice...
Option Compare Database
Option Explicit
Private bolSearch       As Boolean
Private rs              As ADODB.Recordset
Private Sub boxAddress_AfterUpdate()
   Me.TabAddress.Pages(Me.boxAddress.Value).SetFocus
End Sub
Private Sub boxTab_AfterUpdate()
   Me!TabOpzioni.Pages(Me.boxTab.Value).SetFocus
End Sub
Private Sub Form_Load()
   DoCmd.ShowToolbar "web", acToolbarNo
   DataAddress = ""
   ' Riempie la ListBox con l'Elenco delle Rubriche(se esistono)
   ' e, nel caso seleziona la 1°(Index=0) come Default
   Call FillAddress
   If Me.lstDataAddress.ListCount = 0 Then
      ' Se non esistono Rubriche la creo
      Call NuovaRubrica
   Else
      ' Altrimenti punto alla prima come Rubrica di Default
      DataAddress = Me.lstDataAddress
      ' Si connette alla Rubrica selezionata
      Call OpenDb(DataAddress)
      DoEvents
   End If
   Me.cmdClose.SetFocus
End Sub
' Nel caso l'utente inserisca valori <NON in Elenco> nelle Combo(s)
Private Sub Form_Error(DataErr As Integer, Response As Integer)
  If DataErr = 2237 Then
        Response = acDataErrContinue
        Screen.ActiveControl.Undo
  Else
        Response = acDataErrDisplay
  End If
End Sub
Private Sub Form_Close()
   If rs Is Nothing Then Exit Sub
   If rs.state = adStateOpen Then rs.Close:  Set rs = Nothing
End Sub
Private Sub cmdClose_Click()
   DoCmd.Close acForm, Me.Name
End Sub
Private Sub FillAddress()
   On Error Resume Next
   Dim fso           As Object
   Dim start         As String
   Dim strDataAdd    As String
   Dim blFindData    As Boolean
   Dim fil
   strDataAdd = ParseFileName(DataAddress)
   Set fso = CreateObject("Scripting.FileSystemObject")
   Me.lstDataAddress.RowSource = vbNullString
   For Each fil In fso.GetFolder(CurrentProject.Path & "\" & BookFolder1 & 
"\").Files
      If strDataAdd = fil.Name Then blFindData = True
      If mID(fil.Name, InStr(fil.Name, ".") + 1, Len(fil.Name)) = "mdb" Then
         Me.lstDataAddress.AddItem fil.Path & ";" & mID(fil.Name, 1, 
InStr(fil.Name, ".") - 1)
      End If
      DoEvents
   Next
   If blFindData Then
      Me.lstDataAddress = DataAddress
   Else
      Me.lstDataAddress = Me.lstDataAddress.ItemData(0)
   End If
End Sub
Private Sub cmdNewAddress_Click()
   If Me.cmdNewAddress.Caption = "Nuovo" Then
      Call EseguiFunc(1)
      Me.cmdNewAddress.Caption = "Salva"
   Else
      Call EseguiFunc(3)
      Me.cmdNewAddress.Caption = "Nuovo"
   End If
End Sub
Private Function EseguiFunc(idx As Integer)
   Dim fld        As ADODB.Field
   Dim bookMark   As Variant
   Select Case idx
'--------------------------------------------------------------------------------------
         Case 0                                          'MODIFICA RECORD
               If Me.LastName = "" Then
                  MsgBox "you must enter a value in Lastname !"
                  Me.LastName.SetFocus
               ElseIf Me.FirstName = "" Then
                  MsgBox "you must enter a value in Firstname !"
                  Me.FirstName.SetFocus
               Else
                  bookMark = rs.bookMark 'Set bookMark to the current record
                  For Each fld In rs.Fields
                        'DEVE saltare la Primary KEY in quanto Counter
                        If fld.Name <> "PersId" Then
                              If Me.Controls(fld.Name) = "" Then 'Dont store 
an empty string
                                    fld = Null
                              Else
                                    fld.Value = Trim(Me.Controls(fld.Name))
                              End If
                        End If
                  Next
                  rs.Update
                  Call listPers
                  rs.bookMark = bookMark
                  Call showCurrentRec
               End If
'--------------------------------------------------------------------------------------
         Case 1                                          'ADDNEW(predispone 
i contr. TextBox)
               Me.cmdReset.Enabled = True
               Me.cmdUpdate.Enabled = False
               Me.cmdDelete.Enabled = False
               For Each fld In rs.Fields
                   Me.Controls(fld.Name) = ""
               Next
'--------------------------------------------------------------------------------------
         Case 2                                          'DELETE(Elimina il 
Record Corrente)
               If MsgBox("Vuoi eliminare il contatto " & vbCrLf & _
                     rs.Fields(1) & " " & rs.Fields(2) & " ?", vbQuestion + 
vbOKCancel) = vbOK Then
                     rs.Delete
                     rs.Requery 'refresh the recordset
                     If rs.RecordCount = 0 Then 'If it was the only record
                           For Each fld In rs.Fields
                               Me.Controls(fld.Name) = ""
                           Next
                           Me.lstSelpers.RowSource = vbNullString
                           'NoPostInDb 'Routine for making a new record in 
an empty database
                     Else
                           Call listPers
                           Call showCurrentRec
                     End If
                     Me.cmdNewAddress.SetFocus
                     Me.cmdReset.Enabled = False
                     Me.cmdUpdate.Enabled = Not (rs.EOF And rs.BOF)
                     Me.cmdDelete.Enabled = Not (rs.EOF And rs.BOF)
               End If
'--------------------------------------------------------------------------------------
         Case 3                                          'ADDNEW Salva il 
Nuovo Record
               If Me.LastName = "" Then
                  MsgBox "Devi inserire il Cognome !"
                  Me.Email.SetFocus
                  Exit Function
               ElseIf Me.FirstName = "" Then
                  MsgBox "Devi inserire il Nome !"
                  Me.FirstName.SetFocus
               End If
                  rs.AddNew
                  For Each fld In rs.Fields
                        'DEVE saltare la Primary KEY in quanto Counter
                        If fld.Name <> "PersId" Then
                           If Me.Controls(fld.Name) = "" Then 'Dont store an 
empty string
                                 fld = Null
                           Else
                                 fld = Trim(Me.Controls(fld.Name))
                           End If
                        End If
                  Next
                  rs.Update
                  rs.Requery 'Refresh the recordset
                  Call listPers
                  Call showCurrentRec
                  Me.cmdReset.Enabled = False
                  Me.cmdUpdate.Enabled = Not (rs.EOF And rs.BOF)
                  Me.cmdDelete.Enabled = Not (rs.EOF And rs.BOF)
'--------------------------------------------------------------------------------------
         Case 4 'Get Records back after search
               txtSearch = ""
               bolSearch = False
               Me.optSearch = Null
               OpenRs
               Me.cmdLast.SetFocus
               Me.cmdUpdate.Enabled = Not (rs.EOF And rs.BOF)
               Me.cmdDelete.Enabled = Not (rs.EOF And rs.BOF)
               Me.cmdReset.Enabled = False
               Me.cmdNewAddress.Caption = "Nuovo"
   End Select
   Set fld = Nothing
End Function
Private Sub cmdPhotopath_Click()
   Dim ComDialog           As cmDlg
   Set ComDialog = New cmDlg
   With ComDialog
      .DialogTitle = "SELEZIONA IMMAGINE..."
      .InitDir = CurrentProject.Path
      .ShowOpen
      Me.Photopath = Nz(.FileName, vbNullString)
   End With
   Set ComDialog = Nothing
   Me.imgPhoto.Picture = Me.Photopath
End Sub
Private Sub cmdSearch_MouseUp(Button As Integer, Shift As Integer, X As 
Single, Y As Single)
   If Button <> 1 Or X > Me.cmdSearch.Width Or Y > Me.cmdSearch.Height Then 
Exit Sub
   Dim WhereString         As String
   Dim WhereField          As String
   WhereString = vbNullString
   If Not IsNothing(Me.txtSearch) Then
         If IsNothing(Me!optSearch) Then Me!optSearch = 1
         bolSearch = True
         Select Case Me.optSearch
            Case 1
               WhereField = "LastName"
            Case 2
               WhereField = "FirstName"
            Case 3
               WhereField = "Company"
            Case 4
               WhereField = "Adress"
            Case 5
               WhereField = "Telephone"
            Case 6
               WhereField = "Cellular"
            Case 7
               WhereField = "City"
            Case 8
               WhereField = "Country"
            Case 9
               WhereField = "Email"
            Case 10
               WhereField = "Email1"
            Case 11
               WhereField = "Categoria"
            Case 12
               WhereField = "Sottocategoria"
            Case 13
               WhereField = "Sottocategoria1"
            Case 14
               WhereField = "CategoriaFinale"
         End Select
         If Me.ckParziale = False Then
            WhereString = " WHERE " & WhereField & " Like '" & Me!txtSearch 
& "'"
         Else
            WhereString = " WHERE " & WhereField & " Like '" & Me!txtSearch 
& "%'"
         End If
   End If
   Me.cmdReset.Enabled = True
   Call OpenRs(WhereString)
   bolSearch = False
   Me.optSearch = Null
End Sub
Private Sub OpenDb(AdressRegisterPath As String)
   On Error GoTo Err_open
   ' Aggiorna la Stringa di Connessione con il percorso della RUBRICA 
impostata
   conString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & 
AdressRegisterPath & _
               ";Persist Security Info=False"
   Set rs = New ADODB.Recordset
   ' Apro il Recordset sulla tabella [PhoneBook] della Rubrica selezionata
   Call OpenRs
   Me!lblRubricaSelezionata.Caption = Me.lstDataAddress.Column(1)
   Exit Sub
Err_open:
    MsgBox "OpenDb: " & AdressRegisterPath & vbCrLf & Err.Description & " (" 
& Err.Number & ")"
End Sub
Private Sub OpenRs(Optional WhereString As String = vbNullString)
   On Error GoTo errHandler
   Call ClearCtl
   With rs
         ' Se il RS era già aperto lo chiudo per riaprirlo
         ' con i nuovi parametri passati
         If .state = adStateOpen Then .Close
         .ActiveConnection = conString
         .CursorLocation = adUseClient
         .CursorType = adOpenKeyset
         .LockType = adLockOptimistic
         .Source = "SELECT PhoneBook.PersId, 
PhoneBook.LastName,PhoneBook.FirstName, PhoneBook.Email, 
PhoneBook.Email1,PhoneBook.Company, PhoneBook.Address, 
PhoneBook.PostalCode,PhoneBook.City, PhoneBook.Country, 
PhoneBook.Telephone,PhoneBook.Cellular, PhoneBook.Webpage, 
PhoneBook.Photopath,PhoneBook.Info, PhoneBook.Categoria, 
PhoneBook.Sottocategoria,PhoneBook.Sottocategoria1, 
PhoneBook.CategoriaFinale, [Forms]![Pannello comandi]![Sottocategorie1] AS 
Espr1, [Forms]![Pannello comandi]![sottocategorie] AS Espr2" & _
" FROM PhoneBook" & _
" WHERE(((PhoneBook.Sottocategoria) = [Forms]![Pannello 
comandi]![sottocategorie]) And ((PhoneBook.Sottocategoria1) 
=[Forms]![Pannello comandi]![Sottocategorie1])) 
Or(((PhoneBook.Sottocategoria) = [Forms]![Pannello 
comandi]![sottocategorie]) And (([Forms]![Pannello 
comandi]![Sottocategorie1]) Is Null)) Or(((PhoneBook.Sottocategoria1)= 
[Forms]![Pannello comandi]![Sottocategorie1]) And (([Forms]![Pannello 
comandi]![sottocategorie]) Is Null)) Or ((([Forms]![Pannello 
comandi]![Sottocategorie1]) Is Null) And (([Forms]![Pannello 
comandi]![sottocategorie]) Is Null))"
.Open
   End With
   ' Riempio la ListBox di ricerca rapida con la Lista dei Nominativi
   Call listPers
   ' Ripristino il puntatore al 1° record in quanto la Routine precedente
   ' lo ha ciclato lasciandolo in EOF
   rs.MoveFirst
   ' Popolo i controlli nella Form con i dari del 1° Record
   Call showCurrentRec
   Exit Sub
errHandler:
      If Err.Number = 3021 Then
            ' Questo errore viene generato in 2 casi:
            ' 1- La Rubrica è Vuota
            ' 2- In caso di Ricerca non è stata trovata nessuna 
corrispondenza
            If bolSearch = False Then
               ' Rubrica Vuota
               Me.lblRecCount.Caption = "N° Utenti = 0"
               Me.cmdClose.SetFocus
               Me.cmdUpdate.Enabled = False
               Me.cmdDelete.Enabled = False
               'MsgBox "Il Database " & UCase(Me.lstDataAddress.Column(1)) & 
" è vuoto..!", vbExclamation, "AVVISO"
            Else
               ' Nessun Record soddifaceva la ricerca
               MsgBox "Non è stato trovato nessun dato corrispondente..!", 
vbInformation, "AVVISO"
               txtSearch = ""
               bolSearch = False
               Me.ckParziale = False
               Me.optSearch = Null
               Me.cmdLast.SetFocus
               Me.cmdUpdate.Enabled = True
               Me.cmdDelete.Enabled = True
               Me.cmdNewAddress.Caption = "Nuovo"
               Me.cmdReset.Enabled = False
               OpenRs
            End If
      ElseIf Err.Number = -
2147467259
 Then 'if the database is missing
            MsgBox "Errore di Localizzazione DATABASE Indirizzi..!", 
vbCritical, "AVVISO"
      ElseIf Err.Number <> 0 Then 'in any other error tell what have happen
            MsgBox Err.Number & " " & Err.Description
      End If
End Sub
Private Sub listPers()
   ' Svuoto la List per evitare di duplicare gli Items
   Me.lstSelpers.RowSource = vbNullString
   If Not (rs.EOF And rs.BOF) Then
      ' Ciclo il Recordset per popolare la list con :
      ' [PersId]      Nascosto
      ' [Cognome+Nome]
      With rs
         .MoveFirst
         Do Until .EOF
            lstSelpers.AddItem .Fields(0) & ";" & .Fields(1) & Space(2) & 
.Fields(2)
            .MoveNext
         Loop
         rs.MoveLast
      End With
   End If
   'Me.lstSelpers.Selected(Me.lstSelpers.ListCount) = True
   Me.lblRecCount.Caption = "N° Utenti = " & Me.lstSelpers.ListCount
End Sub
Private Sub lstDataAddress_AfterUpdate()
   ' Cambio la selezione della Rubrica
   DataAddress = Me.lstDataAddress
   ' Resetto i controlli
   Call ClearCtl
   DoEvents
   ' Riapro la nuova connessione alla nuova Rubrica
   Call OpenDb(DataAddress)
End Sub
Private Sub lstSelpers_AfterUpdate()
    ' Trova il record corrispondente al controllo
    rs.Find "[PersId] = " & str(Nz(Me!lstSelpers, 0)), 0, adSearchForward, 1
    If Not rs.EOF Then Call showCurrentRec
End Sub
Private Function MoveMeTo(index As Integer)
   On Error GoTo Error
   ' Gestine dei Pulsanti di spostamento e di aggiornamento della
   ' visualizzazione
   Select Case index
      Case 0 'move to the first record
         rs.MoveFirst
      Case 1 'move to next record
         rs.MoveNext
      Case 2 'move to previous record
         rs.MovePrevious
      Case 3 'move to the last record
         rs.MoveLast
   End Select
   If rs.BOF Then rs.MoveFirst 'if it is the beginning of the file move to 
the first record
   If rs.EOF Then rs.MoveLast 'if it is the end of the file move to the last 
record
   Call showCurrentRec
   Me.cmdUpdate.Enabled = True
   Me.cmdDelete.Enabled = True
   Me.cmdNewAddress.Caption = "Nuovo"
   Me.cmdReset.Enabled = False
   Me.lstSelpers.Selected(rs.AbsolutePosition - 1) = True
Error:
End Function
Private Sub showCurrentRec()
   Dim fld              As ADODB.Field
   ' Ciclo l'intera Collection Field per popolare
   ' i Controlli che hanno lo stesso nome dei Campi
   ' Questa procedura semplifica la gestione e rende
   ' più flessibile il codice in caso di aggiunte
   For Each fld In rs.Fields
      Me.Controls(fld.Name).Value = fld.Value
   Next
   Me.imgPhoto.Picture = vbNullString
   Me.imgMail.HyperlinkAddress = vbNullString
   Me.imgMail1.HyperlinkAddress = vbNullString
   Me.imgWeb.HyperlinkAddress = vbNullString
   If Not IsNothing(Me.Photopath) Then
      If fIsFileDIR(Me.Photopath) Then
         Me.imgPhoto.Picture = Me.Photopath
      End If
   End If
   If Len(Me.Email) > 0 Then
      Me.imgMail.HyperlinkAddress = "Mailto:" & Me.Email & 
"?Subject=Contatto"
   End If
   If Len(Me.Email1) > 0 Then
      Me.imgMail1.HyperlinkAddress = "Mailto:" & Me.Email1 & 
"?Subject=Contatto"
   End If
   If Len(Me.Webpage) > 0 Then
      Me.imgWeb.HyperlinkAddress = Me.Webpage
   End If
End Sub
Private Sub cmdRestoreBackUp_MouseUp(Button As Integer, Shift As Integer, X 
As Single, Y As Single)
   If Button <> 1 Or X > Me.cmdRestoreBackUp.Width Or Y > 
Me.cmdRestoreBackUp.Height Then Exit Sub
   ' Apre la Form di gestione dei BackUp in modalità Dialogo
   ' passando come ARGS la stringa "Restore" che predisporrà
   ' la maschera in modalità di Ripristino dei BackUp
   ' alla chiusura rigenera la lista delle Rubriche
   DoCmd.OpenForm "BackUpData", , , , , acDialog, "Restore"
   If CurrentProject.AllForms("BackUpData").IsLoaded Then
         DoCmd.Close acForm, "BackUpData"
         Call FillAddress
   End If
End Sub
Private Sub cmdBackup_MouseUp(Button As Integer, Shift As Integer, X As 
Single, Y As Single)
   If Button <> 1 Or X > Me.cmdBackUp.Width Or Y > Me.cmdBackUp.Height Then 
Exit Sub
   ' Prima di tutto chiudo la connessione in quanto se fosse
   ' aperta non potrei fare il BackUp della Rubrica attuale
   If Not rs Is Nothing Then
      If rs.state = adStateOpen Then rs.Close: Set rs = Nothing
      DoEvents
   End If
   ' Apre la Form di gestione dei BackUp in modalità Dialogo
   ' passando come ARGS la stringa "Backup" che predisporrà
   ' la maschera in modalità di BackUp
   ' alla chiusura rigenera la lista delle Rubriche e riesegue
   ' la connessione alla Rubrica.
   DoCmd.OpenForm "BackUpData", , , , , acDialog, "Backup"
   If CurrentProject.AllForms("BackUpData").IsLoaded Then
         DoCmd.Close acForm, "BackUpData"
         Call FillAddress
         ' Ora devo ripristinare la connessione terminata in precedenza
         Call OpenDb(DataAddress)
   End If
End Sub
Private Sub cmdCreateAdressRegister_MouseUp(Button As Integer, Shift As 
Integer, X As Single, Y As Single)
   If Button <> 1 Or X > Me.cmdCreateAdressRegister.Width Or Y > 
Me.cmdCreateAdressRegister.Height Then Exit Sub
   Call NuovaRubrica
End Sub
Private Sub cmdElimina_MouseUp(Button As Integer, Shift As Integer, X As 
Single, Y As Single)
   If Button <> 1 Or X > Me.cmdElimina.Width Or Y > Me.cmdElimina.Height 
Then Exit Sub
   Dim strMsg  As String
   strMsg = MsgBox("Vuoi eliminare la rubrica :" & vbCrLf & vbCrLf & 
UCase(Me.lstDataAddress.Column(1)), vbQuestion + vbYesNo)
   If strMsg = vbNo Then Exit Sub
   If Not rs Is Nothing Then
      If rs.state = adStateOpen Then rs.Close: Set rs = Nothing
      DoEvents
   End If
   Kill Me.lstDataAddress
   Call FillAddress
   Me.lstDataAddress = Me.lstDataAddress.ItemData(0)
   DataAddress = Me.lstDataAddress
   Call OpenDb(DataAddress)
End Sub
Private Sub NuovaRubrica()
   Dim strFileName   As String
   If Not fIsFileDIR(CurrentProject.Path & "\" & BookFolder1, vbDirectory) 
Then
      MkDir CurrentProject.Path & "\" & BookFolder1
   End If
   strFileName = CreateNewDB1()
   If strFileName <> "" Then
      DataAddress = strFileName
      If Not rs Is Nothing Then
         If rs.state = adStateOpen Then rs.Close: Set rs = Nothing
      End If
      Call ClearCtl
      Call FillAddress
      Call OpenDb(DataAddress)
   End If
ExitHere:
    Exit Sub
HandleErrors:
    MsgBox "NuovaRubrica: " & Err.Description & " (" & Err.Number & ")"
    Resume ExitHere
End Sub
Private Sub ClearCtl()
   On Error Resume Next
   Dim ctl As Access.Control
   For Each ctl In Me.Controls
      If ctl.ControlType = acTextBox Then ctl = vbNullString
   Next
   Me.imgPhoto.Picture = vbNullString
   Me.lstSelpers.RowSource = vbNullString
   Me.optSearch = Null
End Sub
Function FiltraIniziale()
   On Error GoTo Error_FiltraIniziale
   Dim WhereString   As String
   Select Case 
Screen.ActiveControl.Name
      Case "All"
         WhereString = ""
      Case Else
         WhereString = " WHERE [LastName] Like '" & 
Screen.ActiveControl.Caption & "%'"
   End Select
   Me.cmdReset.Enabled = True
   Call OpenRs(WhereString)
   bolSearch = False
   Me.optSearch = Null
Exit_FiltraIniziale:
    Exit Function
Error_FiltraIniziale:
End Function
Private Function Focus()
   On Error Resume Next
   Screen.ActiveControl.BorderColor = vbRed
End Function
Private Function RemoveFocus()
   On Error Resume Next
   Screen.PreviousControl.BorderColor = 15116136
End Function

Errore in proposizione from di :
.Source = "SELECT * FROM PhoneBook " & _
WhereString & _
" AND (((PhoneBook.Sottocategoria)=[Forms]![Pannello 
comandi]![sottocategorie]) AND 
((PhoneBook.Sottocategoria1)=[Forms]![Pannello comandi]![Sottocategorie1])) 
OR (((PhoneBook.Sottocategoria)=[Forms]![Pannello comandi]![sottocategorie]) 
AND (([Forms]![Pannello comandi]![Sottocategorie1]) Is Null)) OR 
(((PhoneBook.Sottocategoria1)=[Forms]![Pannello comandi]![Sottocategorie1]) 
AND (([Forms]![Pannello comandi]![sottocategorie]) Is Null)) OR 
((([Forms]![Pannello comandi]![Sottocategorie1]) Is Null) AND 
(([Forms]![Pannello comandi]![sottocategorie]) Is Null ))"
.Open
variabile WhereString:
            WhereString = " WHERE " & WhereField & " Like '" & Me!txtSearch 
& "%'"
dove sbaglio?


Un consiglio:
metti la stringa sql dentro una variabile
strSql = "select * from ... ecc"
poi metti un'interruzione su
.source = strSql
ed esplora il contenuto della stringa strSql nella finestra immediata
per capire cosa c'è che non va (sarà pulita da tutte le & di
concatenazione, la sintassi dei valori che prelevi dalle forms ecc.)
AleC

 ha scritto nel messaggio 
news:f14aa5c3-53dd-48e4...@m45g2000hsb.googlegroups.com...





AleC
Ho inserito l'interruzione alla fine di questo codice... e la variabile come
mi hai detto (ma non so se l'ho fatto nel giusto modo) continua a dirmi
errrore nell'istruzione from , ma non visualizza nulla nella finestra
immediata...
Private Sub OpenRs(Optional WhereString As String = vbNullString)
   Dim strSql         As String
strSql = "SELECT * FROM PhoneBook " & _
WhereString & _
" AND (((PhoneBook.Sottocategoria)=[Forms]![Pannello
comandi]![sottocategorie]) AND
((PhoneBook.Sottocategoria1)=[Forms]![Pannello comandi]![Sottocategorie1]))
OR (((PhoneBook.Sottocategoria)=[Forms]![Pannello comandi]![sottocategorie])
AND (([Forms]![Pannello comandi]![Sottocategorie1]) Is Null)) OR
(((PhoneBook.Sottocategoria1)=[Forms]![Pannello comandi]![Sottocategorie1])
AND (([Forms]![Pannello comandi]![sottocategorie]) Is Null)) OR
((([Forms]![Pannello comandi]![Sottocategorie1]) Is Null) AND
(([Forms]![Pannello comandi]![sottocategorie]) Is Null ))"
   On Error GoTo errHandler
   Call ClearCtl
   With rs
         ' Se il RS era già aperto lo chiudo per riaprirlo
         ' con i nuovi parametri passati
         If .state = adStateOpen Then .Close
         .ActiveConnection = conString
         .CursorLocation = adUseClient
         .CursorType = adOpenKeyset
         .LockType = adLockOptimistic
         .Source = strSql


 - Mostra testo citato -
Nella finestra immediata devi esplorare tu la momento che il codice è
interrotto (o per un punto di interruzione imposto da te o per un
errore dopo che hai premuto debug)
scrivi nella finestra immediata
? strSql
ti verrà visualizzata la stringa...
studia lì dove si produce l'errore
AleC

 ha scritto nel messaggio 
news:49325c12-6aaa-43e7...@79g2000hsk.googlegroups.com...



AleC
all'interrogazione mi viene risposto:
SELECT * FROM PhoneBook  AND (((PhoneBook.Sottocategoria)=[Forms]![Pannello 
comandi]![sottocategorie]) AND 
((PhoneBook.Sottocategoria1)=[Forms]![Pannello comandi]![Sottocategorie1])) 
OR (((PhoneBook.Sottocategoria)=[Forms]![Pannello comandi]![sottocategorie]) 
AND (([Forms]![Pannello comandi]![Sottocategorie1]) Is Null)) OR 
(((PhoneBook.Sottocategoria1)=[Forms]![Pannello comandi]![Sottocategorie1]) 
AND (([Forms]![Pannello comandi]![sottocategorie]) Is Null)) OR 
((([Forms]![Pannello comandi]![Sottocategorie1]) Is Null) AND 
(([Forms]![Pannello comandi]![sottocategorie]) Is Null ))
manca tutta la parte delle condizioni passate con la variabile 
WhereString...


 - Mostra testo citato -
hai provato ad esplorare la variabile ?
? wherestring
se fosse vuota non verrebbe inserita nella variabile stringa strSql
inoltre mi pare che nella creazione della stringa sql i valori
contenuti nei controlli delle form debbano essere concatenate come
valori e non come riferimenti:
esempio:
"select * from PhoneBook " & wherestring & " AND NomeCampo1 = '" &
Forms!NomeForm!NomeControllo1 & "' AND NomeCampo2 = '" & Forms!
NomeForm!NomeControllo2 & "';"
in sostanza la stringa sql deve uscire così:
"select * from tabella where Campo1 like 'roba%' and campo2 =
'qualcosa' and campo3 = 'qualcosaltro';"
AleC

 ha scritto nel messaggio 
news:19d38d9d-7cb0-477e...@m44g2000hsc.googlegroups.com...




AleC
oK, SCUSA, ho modificato la query come mi hai detto, un'ultima cosa: Is Null 
mi da come errore prevista espressione... come devo inserirlo?
.....AND '" & Forms![Pannello comandi]!sottocategorie = Is Null & "' OR.....
ti ringrazio veramente di cuore. 

 - Mostra testo citato -
Senza "="
Forms![Pannello comandi]!sottocategorie Is Null
nel caso di not null
Forms![Pannello comandi]!sottocategorie Is Not Null
e devi togliere la virgoletta singola prima e dopo perché è un valore
logico e non stringa..
dice "prevista espressione" perché dopo un = occorre una espressione
che può essere una variabile, un calcolo, una concatenazione di
variabili, una funzione, o una combinazione di questi elementi
Ciao
AleC

 ha scritto nel messaggio 
news:152034d5-1f0f-4242...@25g2000hsx.googlegroups.com...





Ciao
AleC
alla fine ho tirato fuori questo codice MA NON FUNZIONA....!!!!
Dim lory22   As String
If Forms![Pannello comandi]!sottocategorie = True And Forms![Pannello 
comandi]!Sottocategorie1 = True And Forms![Pannello comandi]!CategorieFinali 
= False Then
   lory22 = "SELECT * FROM Phonebook WHERE Categoria = " & Forms![Pannello 
comandi]!Categoria & " AND Sottocategoria = " & Forms![Pannello 
comandi]!sottocategorie & " AND Sottocategoria1 = " & Forms![Pannello 
comandi]!Sottocategorie1 & " " & _
WhereString & _
   " ORDER BY lastname"
ElseIf Forms![Pannello comandi]!sottocategorie = True And Forms![Pannello 
comandi]!Sottocategorie1 = True And Forms![Pannello comandi]!CategorieFinali 
= True Then
   lory22 = "SELECT * FROM Phonebook WHERE Categoria = " & Forms![Pannello 
comandi]!Categoria & " AND Sottocategoria = " & Forms![Pannello 
comandi]!sottocategorie & " AND Sottocategoria1 = " & Forms![Pannello 
comandi]!Sottocategorie1 & " AND CategoriaFinale = " & Forms![Pannello 
comandi]!CategorieFinali & " " & _
WhereString & _
   " ORDER BY lastname"
ElseIf (Forms![Pannello comandi]!sottocategorie = True) And (Forms![Pannello 
comandi]!Sottocategorie1 = False) Then
   lory22 = "SELECT * FROM Phonebook WHERE Categoria = " & Forms![Pannello 
comandi]!Categoria & " AND Sottocategoria = " & Forms![Pannello 
comandi]!sottocategorie & " " & _
WhereString & _
   " ORDER BY lastname"
Else
   lory22 = "SELECT * FROM Phonebook WHERE 1 = 1 " & _
                   WhereString & _
                   " ORDER BY lastname"
      nella form Pannello comandi i campi sottocategorie etc sono tutti 
caselle combinate...
AIUTO!!! funziona soltanto se sono tutti selezionati altrimenti va 
direttamente a far vedere tutti i record... 

 - Mostra testo citato -
Forse è perché se non  c'è nessuna riga selezionata nella casella
combinata il suo valore è Null quindi non si verifica nessuna delle
condizioni IF e il flusso del programma va su ELSE dove la clausola è
1 = 1 quindi vera per tutti i record (da vedere cosa contiene la var
wherestring).
Ma non eri Laura prima ?
AleC