Newsgroup: it.comp.appl.access
Titolo: controllo sintassi VBA

                    Scusatemi, non conosco bene VBA, sto cercando di convertire una query per
averla in un modulo. Petete controllarmi la sintassi? Ho provato ad
eseguirla con una macro (comando ESEGUICODICE) specificando il nome della
funzione.
Mi dice "impossibile trovare il nome della funzione immesso
nell'espressione", ma io il nome l'ho selezionato usando il generatore di
funzioni.
Grazie
montanaro
Option Compare Database
Function saldo_crediti_oggi()
On Error GoTo saldo_crediti_oggi_Err
    ' calcola il saldo ddei crediti per cliente all'ultimo aggiornamento delle
tabelle
    'è esclusa la xxxx
    DoCmd.RunSQL "SELECT s_anagrafe.codice, Sum(s_scadenze!impeff) AS crediti "
    DoCmd.RunSQL "FROM s_anagrafe INNER JOIN s_scadenze ON
s_anagrafe.codice=s_scadenze.codcf"
    DoCmd.RunSQL "WHERE s_scadenze.tipoacc <> '*M*'And s_scadenze!pagato = 0"
    DoCmd.RunSQL "GROUP BY s_anagrafe.codice HAVING (((s_anagrafe.codice) Like
'C*'"
    DoCmd.RunSQL "AND (s_anagrafe.codice) Not Like 'C00159' And
(s_anagrafe.codice) Not Like '*L'));"
saldo_crediti_oggi_Exit:
    Exit Function
saldo_crediti_oggi_Err:
    MsgBox Error$
    Resume saldo_crediti_oggi_Exit
End Function
          L'ultima cosa, ho messo l'istruzione: DoCmd.RunSQL ad ogni riga xkè mi dava
errore, è esatto?
grazie
montanaro con il cervello annebbiato
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 errore, è esatto?
Ma proprio no!
CurrentDb.Execute (StringaSQL)
ovvero
DoCmd.RunSQL StringaSQL
La prima non invia messaggi, la seconda sì.
Se non funziona ritrasmetti la stringa SQL col messaggio d'errore.
Ciao
Bruno 

 ha scritto nel messaggio news:82Z88Z48Z250Y1...@usenet.libero.it...

Non puoi spezzare l'istruzione SQL e darla in pasto al metodo RunSQL, la stringa deve essere intera:
Dim strSQL as string
strSQL =  "SELECT s_anagrafe.codice, Sum(s_scadenze!impeff) AS crediti " & _
"FROM s_anagrafe INNER JOIN s_scadenze ON s_anagrafe.codice=s_scadenze.codcf " & _
"WHERE s_scadenze.tipoacc <> '*M*'And s_scadenze!pagato = 0 " & _
"GROUP BY s_anagrafe.codice HAVING (((s_anagrafe.codice) Like 'C*' " & _
"AND (s_anagrafe.codice) Not Like 'C00159' And (s_anagrafe.codice) Not Like '*L'));"
DoCmd.RunSQL strSQL
Occhio che puoi scrivere una stringa di massimo 32.768 caratteri...
Ciao.
-- 
Sergio MAZZA 


          Sono tornato in ufficio adesso e vi ringrazio in ritardo, ci lavoro subito
in base ai vostri suggerimenti.
Ciao
montanaro


 [CUT]
Scusatemi se disturbo, ma proprio non va, mi dice "errore di sintassi"
probabilmente sono troppo a digiuno per cimentarmi in queste cose.
          Function saldo_crediti_oggi() (questa è evidenziata in giallo)
On Error GoTo saldo_crediti_oggi_Err
    ' calcola il saldo ddei crediti per cliente all'ultimo aggiornamento delle
tabelle
    'è esclusa la cava fusi
    DoCmd.RunSQL (saldo_crediti_oggi)
    "SELECT s_anagrafe.codice, Sum(s_scadenze.impeff) As crediti,"&_
    "FROM s_anagrafe INNER JOIN s_scadenze ON
s_anagrafe.codice=s_scadenze.codcf"&_
    "WHERE s_scadenze.tipoacc <> '*M*'And s_scadenze!pagato = 0"&_
    "GROUP BY s_anagrafe.codice HAVING (((s_anagrafe.codice) Like 'C*'"&_
    "AND (s_anagrafe.codice) Not Like 'C00159' And (s_anagrafe.codice) Not Like
'*L'));"
saldo_crediti_oggi_Exit:
    Exit Function
saldo_crediti_oggi_Err:
    MsgBox Error$
    Resume saldo_crediti_oggi_Exit
End Function
L'istruzione Select è tutta in rosso, significa che l'errore è ripetuto?
Vado a guardare i post degli altri, magari ci ricavo qualcosa e capirò di +
nella sistassi.


 probabilmente sono troppo a digiuno per cimentarmi in queste cose.
Scusa ma quella query come l'hai costruita?
Non hai usato la griglia QBE?
Bruno 

 ha
scritto:

   Usando la visualizzazione struttura (quella dei pivellini come me).


 ha scritto nel messaggio news:82Z88Z48Z250Y1...@usenet.libero.it...

Ma che significa questa riga? DoCmd.RunSQL (saldo_crediti_oggi)
Poi ogni termine stringa deve contenere uno spazio:
... As crediti, " & _
...scadenze.codcf " & _
...scadenze!pagato = 0 " & _
... Like 'C*' " & _
Insomma devi rispettare la sintassi...
Ciao.
-- 
Sergio MAZZA 

 montanaro
Maneggio Access da quando è nato (1992), ho fatto query
a chilometri, non ho mai usato altro che la griglia QBE.
Ivi costruita la query regolarmente funzionante, sono necessari
pochi semplici accorgimentio per riportarne la stringa SQL
in formato corretto sul VBE.
Segui tale procedura poi eventualmente riporta qui la stringa
della query funzionante sulla griglia QBE.
Ciao
Bruno 

 ha

          Questa è la query funzionante:
SELECT s_anagrafe.codice, Sum(IIf(s_scadenze!pagato=0,s_scadenze!impeff,0))
AS crediti
FROM s_anagrafe INNER JOIN s_scadenze ON s_anagrafe.codice =
s_scadenze.codcf
WHERE (((s_scadenze.tipoacc) Not Like "*M*"))
GROUP BY s_anagrafe.codice
HAVING (((s_anagrafe.codice) Like "C*" And (s_anagrafe.codice) Not Like
"C00870" And (s_anagrafe.codice) Not Like "*L"));
Convertirla in VBA non riesco proprio. Mi spiace perchè se si capisce la
corretta sintassi, si puo eliminare qualche query di troppo nel mio DB fatta
una, le altre non dovrebbero essere tanto differenti.
Grazie


 una, le altre non dovrebbero essere tanto differenti.
Altre regole fondamentali:
- non porre mai nella griglia QBE cose come "weredfgx";
  sostituisci " con ' :    'weredfgx'.
  In QBE non cambia niente, in VBE sě.
- le funzioni non "funzionano" se chiuse fra ""
Mi sono riportato in VBE la tua stringa SQL e l'ho cosě
frazionata su piů righe.  Lo ritengo comodo, ma non č necessario.
Vi ho apportato le modifiche che vedi ma non l'ho
provata perché non mi andava di costruire tabelle e campi. Provala tu.
Se non funziona ancora puoi mandarmi il file con le tabelle.
SQL = "SELECT s_anagrafe.codice, " & Sum(IIf(s_scadenze!pagato = 0, 
s_scadenze!impeff, 0)) & " "
SQL = SQL & "AS crediti FROM s_anagrafe INNER JOIN s_scadenze ON 
s_anagrafe.codice = s_scadenze.codcf "
SQL = SQL & "WHERE (((s_scadenze.tipoacc) Not Like '*m*')) "
SQL = SQL & "GROUP BY s_anagrafe.codice "
SQL = SQL & "HAVING (((s_anagrafe.codice) Like 'C*' And (s_anagrafe.codice) 
"
SQL = SQL & "Not Like 'C00870' And (s_anagrafe.codice) Not Like '*L'));"
Ciao
Bruno 

 Altre regole fondamentali:
[...]
Outlook ci ha messo del suo per scardinarla un po' di più.
Fa' attenzione che alla fine di ogni riga c'è  < spazio + " >;
alla fine dell'ultima solo < " >.
Bruno