Condividi tramite

Verificare la presenza di un dato in una Tabella Access.

Anonimo
2015-11-06T08:00:10+00:00

Buongiorno a tutti, ho creato il codice sottoriportato per la ricerca di un dato in una tabella.

Tutto funziona bene se il dato da ricercare lo inserisco manualmente nella casella di testo ( cosi com'è registrato nella tabella di riferimento.

 Penso che il problema sia dovuto al fatto che ( tramite il codice postato giorni fa da Sandro Peruz) il dato che io ricerco sia inserito con apici sia all'inizio che alla fine del dato come da esempio:'****@libero.it'.**

Il codice come dicevo sopra funziona se inserisco in tabella manualmente ******@libero.it senz apici.

Come risovere questo problema ?

Ciao Nicola.

Private Sub Comando135_Click()

Dim x As String

Dim a As String

If Me.txtMatricola.Value & "" = "" Then

MsgBox "Nessuna Matricola è stata inserita nella casella di Ricerca!", vbInformation, "REPORT E_MAIL"

Exit Sub

End If

If Not IsNull(Me.txtMatricola) Then

x = Mid(Me.txtMatricola, 1, 6)

If Not IsNull(Me.txtMatricola) Then

a = Right(Me.txtMatricola, 1)

Me.txtMatricola = a & x

End If

End If

If IsNull(DLookup("[TO]", "TblMails", "[TO] = '" & Me.txtMatricola & "@libero.it" & "'")) Then

    MsgBox "Per il militare ricercato non ci sono E-mail inviate!", vbInformation

    Me.txtMatricola = vbNullString

    Exit Sub

    Else

    If MsgBox("Per il Ripendente Ricercato risultano E-mails inviate" & Chr(13) _

    & "Vuoi Stampare i dati del Militare Selezionato" _

    & Chr(13) & "oppure" & Chr(13) & "Eseguire la Query?" _

    & Chr(13) & Chr(13) & "Si: per la Stampa del documento." _

    & Chr(13) & Chr(13) & "No: per la Query", vbDefaultButton2 + vbYesNoCancel) = vbNo Then

    DoCmd.OpenQuery "QueryEmails"

    Me.txtMatricola = vbNullString

    DoEvents

    End If

End If

End Sub

Microsoft 365 e Office | Accesso | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2015-11-15T08:08:48+00:00

ciao Nicola,

Per lunedì ti pubblico una demo solo conil problema segnalato, lo devo epurare di tanti dati, moduli e oggetti. 

lascia stare non serve, tieni presente quanto suggerito per la prossima volta.

guarda l'immagine :

vedi il punto marrone a sinistra del codice? quello è un punto di interruzione posizionato in corrispondenza della riga famigerata che dovrebbe creare problemi.

Le due istruzioni successive servono per fare scrivere valori, variabili oggetto, metodi e chi più ne ha più ne metta, nella finestra immediata del VBE, (Visual Basic Editor) in modo da capire cosa fa il codice.

Ora..per inserire il punto di interruzione (o breakpoint), sposta il mouse appena a sinistra del codice, esattamente sulla riga verticale grigia e clicca con il testo sinistro, non appena lo fai vedi quel puntino marrore apparire.

Lanciando la routine il codice si ferma esattamente su quella istruzione, la riga diventa gialla, e se premi F8 puoi seguire l'esecuzione delle istruzioni che seguono passo passo.

nel tuo caso specifico vedrai i vari destinatari delle emails con e senza apici.

Se la finestra immediata non è aperta nel VBE digiti ctrl+G oppure dal VBE selezioni il menu visualizza e poi finestra immediata.

Posizionando punti di interruzione e facendo scrivere nella finestra immediata quello che il codice esegue puoi debuggare le tue routine e vedere cosa non va.

Quando il codice è ok, le istruzioni con debug.print  puoi commentarle posizionando davanti ad esse un apice. così:

' Debug.Print Ol_Items.To

diventeranno di colore verde e non considerate nell'esecuzione della routine stessa.

Prova a mettere in pratica quanto consigliato e vedi cosa viene scritto nella finestra immediata.

Facci sapere :-)

Buona domenica.

Ciao, Sandro

La risposta è stata utile?

0 commenti Nessun commento

13 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2015-11-09T14:59:49+00:00

    Ciao Sandro ho notato una cosa strana, ho incollato in Excel l'indirizzo e.mail inserito in tabella e con le funzioni Annulla.Spazi e Lunghezza  ottengo una lunghezza della stringa superiore a quella reale (anche conteggiando gli apici iniziale e finale) come ad esempio questo: '******@XXX.IT' mi restituisce 21 caratteri quando in realtà sono 16 compresi gli apici.

    N.B.  ho sostituito le cifre  e le X al posto dei valori veri inseriti in tabella.

    Ciao Nicola.

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2015-11-09T14:42:39+00:00

    Ciao Sandro è da stamattina che provo alcune modifiche es ( con Trim, Mid ecc ma non va).

    Ti allego il tuo codice postato tempo fa al fine di poter capire come mai inserisce nella tabella gli indirizzi e.mail con gli apici (inziale e finale).

    Non vorrei che modificando qualcosa nel codice il problema si risolve.

    Sandro,mi spieghi per favore se è normale che si inseriscono gli apici ecc.

    Public Sub ImportMails()

      On Error Resume Next

      Dim strAttachment As String

      Dim strSql As String

      Dim rsMail As DAO.RecordSet

      Dim tdf As DAO.TableDef

      Dim Ol_App As New Outlook.Application

      Dim Ol_MAPI As Outlook.NameSpace

      Dim Ol_Folder As Outlook.MAPIFolder

      Dim Ol_Items As Outlook.MailItem

      Dim Ol_Attach As Outlook.Attachment

     Set tdf = CurrentDb.TableDefs("TblMails")

     If tdf Is Nothing Then

     strSql = "CREATE TABLE TblMails (" & _

      "CreationTime DATE," & _

      "LastModificationTime DATE," & _

      "SenderName CHAR(50)," & _

      "SenderAddress CHAR(50)," & _

      "SentOn DATE," & _

      "Sent YESNO," & _

      "TO CHAR(255)," & _

      "CC CHAR(255)," & _

      "BCC CHAR(255)," & _

      "UnRead YESNO," & _

      "ReceivedByName CHAR(50)," & _

      "ReceivedOnBehalfOfName CHAR(100)," & _

      "ReceivedTime DATE," & _

      "ConversationTopic CHAR(255)," & _

      "Subject CHAR(255)," & _

      "Categories CHAR(50)," & _

      "HTMLBody MEMO," & _

      "Size Long," & _

      "Attachments CHAR(255));"

      CurrentDb.Execute strSql

    End If

      Set rsMail = CurrentDb.OpenRecordset("TblMails")

      Set Ol_MAPI = Ol_App.GetNamespace("MAPI")

      Set Ol_Folder = Ol_MAPI.PickFolder

     For Each Ol_Items In Ol_Folder.Items

     For Each Ol_Attach In Ol_Items.Attachments

     strAttachment = strAttachment & Ol_Attach.DisplayName & vbCrLf

    Next Ol_Attach

    With rsMail

     .AddNew

      .Fields("BCC") = Ol_Items.BCC

      .Fields("Categories") = Ol_Items.Categories

      .Fields("CC") = Ol_Items.CC

      .Fields("ConversationTopic") = Ol_Items.ConversationTopic

      .Fields("CreationTime") = Ol_Items.CreationTime

      .Fields("HTMLBody") = Ol_Items.HTMLBody

      .Fields("LastModificationTime") = Ol_Items.LastModificationTime

      .Fields("ReceivedByName") = Ol_Items.ReceivedByName

      .Fields("ReceivedOnBehalfOfName") = Ol_Items.ReceivedOnBehalfOfName

      .Fields("ReceivedTime") = Ol_Items.ReceivedTime

      .Fields("SenderName") = Ol_Items.SenderName

      .Fields("Sent") = Ol_Items.Sent

      .Fields("SentOn") = Ol_Items.SentOn

      .Fields("SenderAddress") = Ol_Items.Reply.Recipients.Item(1).Address

      .Fields("Size") = Ol_Items.Size

      .Fields("Subject") = Ol_Items.Subject

      .Fields("TO") = Ol_Items.TO

      .Fields("UnRead") = Ol_Items.UnRead

      .Fields("Attachments") = strAttachment

      .Update

    End With

    strAttachment = ""

    Next Ol_Items

     rsMail.Close

      MsgBox "I dati sono stati importati"

      Set rsMail = Nothing

      Set tdf = Nothing

      Set Ol_Attach = Nothing

      Set Ol_Items = Nothing

      Set Ol_Folder = Nothing

      Set Ol_MAPI = Nothing

      Set Ol_App = Nothing

     End Sub

    Ciao Nicola.

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2015-11-09T07:59:38+00:00

    Ciao Sandro buongiorno, scusa per il ritardo nel risponderti, il fine settimana svolgo lavoro notturno e non ho il pc a portata di mano. Ho provato il tuo ultimo suggerimento ma non mi dice di aver trovato il valore ricercato.

    Ti allego l'immagine di come vengono slavate le e.mail nella tabella (creata con un tuo precedente codice).

    '******@libero.it'

    Il problema è che se inserisco manualmente un indirizzo e.mail nella casella di testo senza apici e la ricerco nella tabella inserendolo manualmente e senza apici il codice sopra me lo trova e funziona perfettamente.

    Invece se inserisco lo stesso indirizzo e-mail nella casella di testo ed effettuo la ricerca non me lo trova ( penso che il problema sia dovuto agli apici.

    Ciao Nicola.

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2015-11-06T20:28:24+00:00

    ciao Nicola,

    la rimozione per motivi di apici spero non sia fuorviante.... per me ovviamente.

    se il problema è legato alla presenza degli apici nella stringa, prova a raddoppiarli con :

    If IsNull(DLookup("[TO]", "TblMails", "[TO] = '" & replace(Me.txtMatricola,"'","''") & "@libero.it" & "'"))

    Facci sapere.

    Ciao, Sandro

    La risposta è stata utile?

    0 commenti Nessun commento