Ricerca e Concatenamento di stringhe

di il
9 risposte

Ricerca e Concatenamento di stringhe

E' mia intenzione inviare una mail circolare ai tanti componenti del mio database ma la limitazione dei 255 caratteri nel corpo della mail mi ha fatto rinunciare.
Ho pensato quindi di svolgere questa operazione in modalità semi automatica.:
Ho pensato di utilizzare una query per estrarre tutti i record che mi interessano e, in VBA comporre una stringa lunghissima di indirizzi e-mail (separati da ";") derivanti dal concatenamento dei campi "mail" della query.
Il codice scritto purtroppo, lavora bene solo sulla tabella di origine dati, ma non funziona sulla query.
Il codice di impostazione che uso è il seguente:
Dim DBCorrente As DAO.Database
Dim rsAde As DAO.Recordset
Dim ind_mail As String
Set DBCorrente = CurrentDB
Set rsAde = DBCorrente.OpenRecordset ("Q_ST_Ade", dbOpenDynaset)
....
---
Una volta ottenuto lo stringone degli indirizzi lo salverei da qualche parte per darlo in pasto ad Outlook.
Il debugger mi dice: errore di run-time 3061. Parametri insufficienti; Previsto 5.
Di certo c'è un errore concettuale: come si può correggere
Si può avere un aiuto? Grazie.

9 Risposte

  • Re: Ricerca e Concatenamento di stringhe

    Per ottenere lo STRINGONE... devi ciclare il Recordset e concatenare i dati del singolo campo... e tu non mostri il codice... quindi non si capisce chi fa cosa...
  • Re: Ricerca e Concatenamento di stringhe

    In verità avevo omesso volutamente il codice mancante in quanto esso funzionava, ma solo su tabelle e non su query immaginando per questo che il problema fosse nelle prime righe e cioè sull'apertura del file. Questa è la routine completa.

    Private Sub Comando34_Click()
    Dim DBCorrente As DAO.Database
    Dim rsAde As DAO.Recordset
    Dim ind_mail As String

    Set DBCorrente = CurrentDb 'Apertura DB
    Set rsAde = DBCorrente.OpenRecordset("Q_ST_Ade", dbOpenDynaset)

    Do Until rsAde.EOF 'Lettura dei dati
    If (Len(rsAde.Fields("contatto"))) > 12 Then 'potrebbe esserci anche un nr. telefonico
    ind_mail = ind_mail & rsAde.Fields("contatto") & "; "
    End If
    rsAde.MoveNext 'vai al record successivo
    Loop
    MsgBox ind_mail 'Visualizza lo stringone (per copiarlo manualmente)
    rsAde.Close
    DBCorrente.Close 'Chiusura DB
    End ' Do

    End Sub

    Antonio
  • Re: Ricerca e Concatenamento di stringhe

    Ciao.
    IMHO:
    come ottieni il campo "contatto" nella query, un cosa del genere : nome & " " & cognome ?
    mi vien da pensare che il problema sia li...
    inoltre nel contatto hai pure il numero di telefono? non ti sembra strano?
    per come hai scritto il codice viene inserito il ; alla fine della stringa, o fai un replace o contateni la formazione della stringa (meglio la seconda delle due).

    ciao.
  • Re: Ricerca e Concatenamento di stringhe

    No Goku, la query è già una estrazione da più tabelle.
    Nel campo contatti mi finiscono tutti i contatti dei soci; non ho problemi.
    Il problema è nell'errore che mi da in apertura della query.
    Il fatto che alla fine dello stringone c'è un ";" in più, non ha importanza per me, tanto ce lo toglierò a mano.
    Il codice di concatenamento mi gira bene e mi soddisfa se gli dò in pasto una tabella. Il problema è nei parametri di apertura secondo me.
    Quei parametri non si configurano per una query ma per una tabella, ma io non so come si interroga una query.
    Antonio
  • Re: Ricerca e Concatenamento di stringhe

    ....mmmm....hai provato a impostare un bel punto di interruzione nel codice magari nella riga dove imposti la concatenazione per capire dove sta il problema, se su un record in particolare oppure come dici proprio in fase di apertura della query, analizzando magari il contenuto del recordset e della stringa...?
    oppure visto che sulla tabella di origine funziona, impostare il recordset prima sulla tabella di origine e verificare il comportamento e poi sulla query.
    debuggare un po' intendo...

    in alternativa ti direi di pubblicare da qualche parte il db ovviamente cancellando i dati sensibili per simulare l'errore, così lo proviamo pure noi...onestamente non mi viene in mente altro...
    ciao.
  • Re: Ricerca e Concatenamento di stringhe

    Ho fatto altre prove e mi correggo parzialmente:
    Il comando di assegnazione del recordset è corretto. Esso è valido sia per una tabella che per una query.
    Ho accumulato nello stringone dati di campi sia per tabelle che per query indifferentemente, ma non per la query che mi interessa. Non so perché.
    Per quella query mi dice:
    Errore di run-time '3061'
    Parametri insufficienti. Previsto 5.

    Su un'altra query presa a caso mi dice Previsto 4.

    Non so più cosa farci. Tra l'altro non ho cognizione di come si faccia a pubblicare il DB: puoi spiegarmelo?
    ciao
  • Re: Ricerca e Concatenamento di stringhe

    Io uso skydrive per pubblicare files. devi crearti un account, ci sono anche altri sistemi...
    prima di pubblicare....non è che nella tua query hai inserito qualche rifermento nei criteri che per qualche ragione nel ciclare il recordset non si trovano? mi sembra l'unica spiegazione.

    hai provato ad inserire un bel punto di interruzione e seguire passo-passo il codice analizzando la variabili come suggerito? dovresti capire facilmente il bug.

    facci sapere!
    ciao.
  • Re: Ricerca e Concatenamento di stringhe

    Scusami per la mia prolungata assenza, ma sono stato fuori.
    Il problema purtroppo persiste.
    L'intoppo è ancor prima di entrare nel loop. E' all'apertura del file che mi dà errore là dove scrivo (Set rsAde...... ).
    E da solo non potrò fare altro che arrendermi. Peccato, sembrava facile, ma dovrò cambiare percorso, non credi? Dimmi tu.
    Ciao
  • Re: Ricerca e Concatenamento di stringhe

    Ciao.
    puoi allegare il DB con dati NON SENSIBLI all'interno del forum?
    o se vuoi me lo mandi in privato, sempre senza dati sensibili.
    Poi però pubblichiamo la soluzione del problema.

    un saluto.
Devi accedere o registrarti per scrivere nel forum
9 risposte