|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Aug 2008
Messaggi: 56
|
[VBA] Aiuto per esecuzione query
Ho un progetto adp su access 2003, che si collega as un database su SQL server 2005 e volevo fare una piccola prova con una query INSERT su una tabella di prova.
Ho creato un piccolo form, che consta di un solo bottone, al quale è associata la seguente sub per l'evento click: Codice:
Private Sub Comando0_Click()
Dim db As DAO.Database
Dim sql As String
Set db = CurrentDb
sql = "INSERT INTO prova_insert (date,id) VALUES ('19/05/2009',2)"
db.Execute sql
Set db = Nothing
End Sub
"Errore di run-time '91': Variabile oggetto o variabile del blocco With non impostata" Ora... guardando un pò in giro per il/i forums ho capito che ciò succede quando si cerca di assegnare un valore o utilizzare una variabile che non ha una buona referenza... in particolare a me l'errore me lo da all' istruzione "execute": però io ho dichiarato db e ho anche settato db = CurrentDb... quindi perchè mi viene mostrato sto picchio di errore??? Grazie in anticipo per chiunque voglia aiutarmi... Piero Ultima modifica di tomino87 : 19-05-2009 alle 18:58. |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
Nel tuo caso specifico non so perchè dia errore, ma puoi risolvere drasticamente con : 1. Se vuoi concatenare : Codice:
DoCmd.RunSql "INSERT INTO prova_insert ( date, id ) VALUES ( #19/05/2009#, 2 )" 2. Se, meglio ancora, vuoi usare i parametri, vedi mio esempio qui : http://www.hwupgrade.it/forum/showthread.php?t=1977950 |
|
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Aug 2008
Messaggi: 56
|
Innanzitutto grazie per la risposta
Riguardo agli sharp # per i valori.... non vanno bene per SQL Server... Access nelle query accetta i valori delimitati da #, ma SQL Server non li accetta... e l'unico modo per inserire/far confronti/lavorare con le date nelle query in SQL Server è con gli apici singoli.... Riguardo al codice che mi hai scritto, funziona Solo una curiosità: siccome non sono esperto di vba.... perchè quella che mi hai detto sarebbe una soluzione "drastica"? |
|
|
|
|
|
#4 | ||
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
Ma quel "CurrentDb" funziona con Sql Server, poi ? Cioè, non mi era chiaro se quel codice VBA esegue una Insert in Access o in Sql Server... o in tutti e due... Quote:
Quindi DoCmd è una delle funzioni VBA di base, non necessita riferimenti ad ADODB, DAO o altre librerie, e perciò virtualmente immune agli errori 91. |
||
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Aug 2008
Messaggi: 56
|
Ahh ora è tutto chiaro... cmq l'insert era su sql server: in realtà tutte le operazioni vengono fatte su sql server... questa era semplicemente una prova per trovare del codice che funzionasse per eseguire query di comando sul database su sql server che sarà collegato al mio progetto adp.
Il progetto è un progetto mooolto serio... per questo forse la strada del DoCmd non è molto appropriata (in quanto mi hai detto che può riservare sorprese...) Ho fatto per conto mio un paio di "prove"... e pensavo di utilizzare codice di questo tipo (visto che praticamente tutto il progetto su cui sto lavorando utilizza la libreria ADODB): Codice:
Dim rst As ADODB.Recordset Set rst = New ADODB.Recordset rst.Connection = CurrentProject.Connection Dim sqlstr As String sqlstr = "Stringa sql da inviare al server" rst.Open sqlstr, CurrentProject.Connection Secondo te può essere meglio agire così? Oppure sono solo dei problemi mentali che mi sto facendo? |
|
|
|
|
|
#6 | ||
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
Codice:
Dim stringa As String
stringa = "questa non crea problemi"
DoCmd.RunSQL "INSERT INTO nomeTabella (id, campoStringa) VALUES (100, " & "'" & stringa & "'" & ")"
Codice:
Dim stringa As String
stringa = "Questa crea un po' di problemi"
DoCmd.RunSQL "INSERT INTO nomeTabella (id, campoStringa) VALUES (100, " & "'" & stringa & "'" & ")"
Quote:
In ogni caso prova... E fammi sapere. |
||
|
|
|
|
|
#7 |
|
Member
Iscritto dal: Aug 2008
Messaggi: 56
|
Dunque... ho letto il post che mi hai indicato. E' un procedimento molto interessante. Però ho un'osservazione da fare: tu mi hai detto di non usare CurrentProject.Connection, visto che mi collego ad sql server...
In realtà non mi sembra un'eresia indicare come connessione la CurrentConnection anche nel mio caso, in quanto sto lavorando con un adp che è collegato al database sul server sql... ovvero, nelle proprietà del progetto, la fonte dati è un database su uno specifico server sql: pertanto logicamente la CurrentProject.Connection dovrebbe restituire la connessione al detto server sql. Correggimi se sbaglio (o eventualmente esprimimi meglio il tuo dubbio p.s.: la soluzione con CurrentProject.Connection che ho indicato l'ho testata e funziona... |
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
Non avendo una gran esperienza con i progetti ADP di Access ( per il semplice motivo che, per scelta personale, evito accuratamente di creare applicativi 100%-Access ) ti avevo messo in guardia dall'usare CurrentProject.Connection, ma se dici che è tutto ok, per me va bene. |
|
|
|
|
|
|
#9 |
|
Member
Iscritto dal: Aug 2008
Messaggi: 56
|
Mi trovi del tutto daccordo sul non utilizzare soluzioni al 100% access... a dir la verità io non lo farei nemmeno all' 1%
Il punto è che il progetto su cui lavoro non è una cosa che faccio io da capo: si tratta di un upsizing di un db molto grosso con un sistema informativo (come avrai capito in vba..) da access a sql... Quindi devo modificare tutto il codice vba (che precedentemente era pensato per funzionare con access) in modo che si interfacci correttamente col db, che d'ora in poi starà su sql server... Naturalmente non è che posso buttare via tutto |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 12:28.




















