Newsgroup: it.comp.appl.access
Titolo: Query di comando su tabella ODBC - leggere l'errore

In Access2003 ho una tabella collegata su MySQL via ODBC.
Come faccio ad eseguire una query di comando, costruita al volo, da VBA?
Io ho provato con
StrSQL = "INSERT INTO detraz .... etc"
DoCmd.RunSQL (strap)
Ma l'utente si vede richiesta la conferma dell'inserimento del TOT 
numero di righe. Allora ho messo
DoCmd.SetWarnings False
DoCmd.RunSQL (strap)
DoCmd.SetWarnings True
e la richiesta non compare piu' ma purtroppo scompare anche ogni traccia 
di errori nell'inserimento.
Come devo fare?
Ciao & Grazie
Marco

"Ux" <Non.Te....@Senno.Mi.Spammi> ha scritto nel messaggio
news:U3rqd.420140$35.18...@news4.tin.it...

LA query la devi eseguire su MySQL non in locale pertanto hai 2 possibilitŕ:
1)Colleghi via ODBC le Tabelle di MySQL ed esegui la Query ACTION il Locale.
    Questa non č una gran soluzione nel caso di UPDATE, in generale perde
    molto tempo rispetto alla soluzione (2)
2)Creati una QUERY PASS_THROUGH temporanea(o definitiva vedi tu)
Devi passare la Stringa di Connessione al Database MySQL completa
di Password ecc....., quella che usi per il RELINK delle Tabelle.
Dim mydb As DAO.Database, myq As DAO.QueryDef
Set mydb = DBEngine.Workspaces(0).Databases(0)
Set myq = mydb.CreateQueryDef("")
myq.returnsrecords = False
myq.connect = connectstring
myq.sql = "INSERT INTO....."
myq.Execute
myq.Close
Ciao
-- 
@Alex (Alessandro Baraldi)
---------------------------------------------------------------------------
http://www.sitocomune.com/
http://www.mantuanet.it/alessandro.baraldi/
---------------------------------------------------------------------------

 Marco
Vai sul mio sito sotto, nella sezione TABLES trovi quello che
cerchi.


 Ciao
Grazie per la risposta precisa e completa.


>>    Questa non č una gran soluzione nel caso di UPDATE, in generale

Le ho provate tutte le connection string di MySQL ODBC 3.51 ma quando 
arriva alla:
myq.SQL = "INSERT INTO .."
mi da' sempre:
"Stringa di connessione non valida in query di tipo pass-through"
Ecco un esempio di conn. string che ho usato:
connectstring = "DRIVER={MySQL ODBC 3.51 Driver};" & _
                  "Server=alpsrv;" & _
                  "Port=3306;" & _
                  "Option=16384;" & _
                  "Stmt=;" & _
                  "Database=lp2004;" & _
                  "Uid=Ux;" & _
                  "Pwd=Ux"
HELPPPPPPPP
Ciao
Marco

Devi postare tutto il Codice compresa la stringa INSERT completa.
Ovviamente non la PWD...;-)
Non uso più MySQL da qualche anno ma non dovrebbe essere cambiato molto...!


 Ciao
La stringa SQL e' questa:
----------------------
INSERT INTO detraz
   (Uniq, MeseRif, Matr, TpMatr, Valore,
    TpValore,  Oneri, TipoPag, Catego, EE )
SELECT Uniq, '0411', Matr, TpMatr, Valore,
        TpValore,Oneri, TipoPag, Catego, EE
FROM detraz
WHERE MeseRif='0410'
----------------------
Il codice e' il tuo + le 3 connectstring che ho provato:
Set mydb = DBEngine.Workspaces(0).Databases(0)
connectstring = "DRIVER={MySQL ODBC 3.51 Driver};" & _
                  "Server=alpsrv;" & _
                  "Port=3306;" & _
                  "Option=16384;" & _
                  "Stmt=;" & _
                  "Database=Stat;" & _
                  "Uid=Ux;" & _
                  "Pwd=xxx"
connectstring = "Driver={mySQL};" & _
            "Server=alpsrv;" & _
            "Port=3306;" & _
            "Option=131072;" & _
            "Stmt=;" & _
            "Database=Stat;" & _
            "Uid=Ux;" & _
            "Pwd=xxx"
connectstring = "DRIVER={MySQL ODBC 3.51 Driver};" & _
                  "SERVER=alpsrv;" & _
                  "DATABASE=Stat;" & _
                  "USER=Ux;" & _
                  "PASSWORD=xxx;"
Set myq = mydb.CreateQueryDef("")
myq.ReturnsRecords = False
myq.Connect = connectstring
myq.SQL = strap
myq.Execute
myq.Close
GRAZIE
Marco

 WHERE MeseRif='0410'
Nella SELECT cosa sarebbe il 2° campo inserito...??
'0411' per capirci....??
Nella Select metti l'Elenco dei Campi in formato NomeCampo,
perchè li hai quel riferimento...?
Poi il Campo [MeseRif] che tipo di Campo è Numerico o Stringa..??
Da come hai formattato sembrerebbe stringa...!


 Ciao
MeseRif e' un campo stringa in cui vado a inserire la costante '0410'.
Ma la mia perplessita' e' che la query funziona con DoCmd.RunSQL(...) 
quindi forse va bene. Sembra che il problema sia nella stringa di 
connessione stando al messaggio di errore:
"Stringa di connessione non valida in query di tipo pass-through"
Non e' che sbaglio qualche parametro?
Grazie ancora
Marco

 Marco
INSERT INTO detraz
   (Uniq, MeseRif, Matr, TpMatr, Valore,
    TpValore,  Oneri, TipoPag, Catego, EE )
'/////    INTENDEVO QUESTO PARAMETRO '0411' COS'E'...??????
SELECT Uniq, '0411', Matr, TpMatr, Valore,
        TpValore,Oneri, TipoPag, Catego, EE
FROM detraz
WHERE MeseRif='0410'
Ho razzolato nell'HD ma non trovo più nulla di MySQL, pertanto non
posso nemmeno fare un test.
Secondo me la Query SQL potrebbe non può funzionare, ma data la mia
esperienza in SQL
è meglio che non mi esponga troppo...!!!
Così come è scritta, a parte quell'incomprensione che accennavo la Sintassi
WHERE
si riferisce alla SELECT, mente tu se non sbaglio devi riferirla a
INSERT....!
Prova ad usare una query del genere:
INSERT INTO Impiegati (Nome,Cognome, Posizione) VALUES ('Harry',
'Washington', 'In addestramento');
Vedi se cambia qualche cosa, non risolve il problema, ma vedi se è come
penso io un
problema di SINTASSI.


 'Washington', 'In addestramento');
Mi hai dato l'idea. Ho provato con una insert semplicissima e mi da' 
ugualmente l'errore.
"Stringa di connessione non valida in query di tipo pass-through"
Il problema e' la mia connectionstring
connectstring = "DRIVER={MySQL ODBC 3.51 Driver};" & _
                  "SERVER=srvalp;" & _
                  "DATABASE=Stat;" & _
                  "USER=Ux;" & _
                  "PASSWORD=xxx;"
a me' sembra che vada tutto bene
Ciao
Marco