Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce
Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce
REDMI Note 17 Pro porta in fascia media una batteria da 8.340 mAh con ricarica HyperCharge a 67W, un display AMOLED da 6,83 pollici capace di picchi di luminosità molto elevati e una struttura certificata TÜV SÜD contro cadute e infiltrazioni d'acqua, il tutto racchiuso in una scocca da 223 grammi. Lo abbiamo provato per diversi giorni tra fotocamera, prestazioni, autonomia e prezzo sul mercato italiano
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra integra un sensore da 1 pollice 8K, ottiche Leica e triplo chip IA. Tra schermo OLED rimovibile, workflow I-Log a 10 bit e stabilizzazione a tre assi, analizziamo le doti tecniche di una gimbal camera pensata per i professionisti
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 19-05-2009, 17:18   #1
tomino87
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
Quando testo il form, cliccando il bottone, mi viene mostrato il messaggio di errore:

"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 17:58.
tomino87 è offline   Rispondi citando il messaggio o parte di esso
Old 20-05-2009, 07:54   #2
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da tomino87 Guarda i messaggi
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
C'è decisamente troppo codice per quello che devi fare.
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 )"
> Meglio usare i caratterri sharp " # " per delimitare le date, in quanto gli apici possono dare problemi...

2. Se, meglio ancora, vuoi usare i parametri, vedi mio esempio qui :
http://www.hwupgrade.it/forum/showthread.php?t=1977950

MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 20-05-2009, 09:14   #3
tomino87
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"?
tomino87 è offline   Rispondi citando il messaggio o parte di esso
Old 20-05-2009, 10:45   #4
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da tomino87 Guarda i messaggi
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....
Sì, mi ero perso la prima parte in cui parlavi di Sql Server...
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:
Originariamente inviato da tomino87 Guarda i messaggi
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"?
"Drastica" nel senso che gli errori 91 < Variabile oggetto o variabile del blocco With non impostata > sono spesso dovuti all'utilizzo di librerie non referenziate, o all'uso di oggetti a nothing, ossia prima che siano stati inizializzati. Non ho provato il tuo codice, perchè appena ho visto che tentavi di fare una semplice Insert, ho suggerito DoCmd, che appunto è la strada più diretta in assoluto ( ma che può riservare brutte sorprese, a differenza della tecnica con parametri, più lunga, ma più sicura... ), se parliamo di Access-VBA.
Quindi DoCmd è una delle funzioni VBA di base, non necessita riferimenti ad ADODB, DAO o altre librerie, e perciò virtualmente immune agli errori 91.
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 20-05-2009, 15:44   #5
tomino87
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
(naturalmente con un opportuno "On Error GoTo ..." prima del "rst.Open ...", in modo da captare possibili errori sull' esecuzione della query)

Secondo te può essere meglio agire così? Oppure sono solo dei problemi mentali che mi sto facendo?
tomino87 è offline   Rispondi citando il messaggio o parte di esso
Old 20-05-2009, 20:39   #6
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da tomino87 Guarda i messaggi
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...)
No, infatti. DoCmd può essere un'ottima scorciatoia, a patto che si sappia esattamente come gestire la concatenazione tra istruzioni Sql e valori, e comunque ti espone a problemi. Piccolo esempio classico :

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 & "'" & ")"
mentre al link che ti ho dato trovi proprio un esempio di come usare gli ADODB Parameters...

Quote:
Originariamente inviato da tomino87 Guarda i messaggi
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
(naturalmente con un opportuno "On Error GoTo ..." prima del "rst.Open ...", in modo da captare possibili errori sull' esecuzione della query)

Secondo te può essere meglio agire così? Oppure sono solo dei problemi mentali che mi sto facendo?
Su questo non mi posso pronunciare al momento, dato che non ho mai sperimentato una cosa simile, ossia un progetto Access che tramite VBA faccia operazioni su Sql Server, ( ho invece spesso usato Excel VBA, VB6 o VB.NET... ) perciò mi suona molto strano che con quella CurrentProject.Connection tu riesca a combinare qualcosa... Il mio consiglio è di usare le tecniche standard ADODB ( che sono le medesime che useresti da un'applicazione VB6 ), senza "mischiarle" con tecniche tipicamente Access, come CurrentProject / CurrentDB / DoCmd ecc...
In ogni caso prova... E fammi sapere.
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 21-05-2009, 08:19   #7
tomino87
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...
tomino87 è offline   Rispondi citando il messaggio o parte di esso
Old 21-05-2009, 08:38   #8
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da tomino87 Guarda i messaggi
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...
Io ti ho suggerito di non mischiare, preferibilmente, il VBA tipico di Access ( fatto di comandi-scorciatoia che non non trovi ad esempio in Excel-VBA o VB6 ) con le tecniche ADODB, che invece puoi usare indifferentemente da qualsiasi implementazione Office di VBA o da VB6, per un mero discorso di omogeneità. Era un consiglio di ciò che farei io, tutto qui. Se poi in futuro dovessi riutilizzare quel codice da Excel-VBA, o da VB6 o da altri applicativi che fanno uso di VBA ( Corel ecc... ) ti troveresti spiazzato, perchè non avresti più a disposizione i vari DoCmd, CurrentDb ecc...

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.
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 21-05-2009, 13:44   #9
tomino87
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 Devo quindi tenermi questa scelta iniziale (che non ho fatto io) di utilizzare in grossa parte l'ambiente access.... questo il motivo per cui ho creato l'adp, che a detta di tutti (anche della stessa microsoft) è la soluzione migliore per i progetti access che utilizzano come fonte di dati non access stesso, bensì sql server
tomino87 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce Recensione REDMI Note 17 Pro: il midrange con ba...
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema Insta360 Luna Ultra: la potenza del sensore da 1...
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
ROG Cronox: ASUS alza l'asticella dei ca...
Lenovo annuncia nuovi sistemi per la vir...
M6 e M5 Ultra, i primi benchmark conferm...
La nuova falla della cybersecurity &egra...
The Blood of Dawnwalker, il sequel potre...
Colpiti i data center Amazon: irrecupera...
Google Wallet, nuova interfaccia in arri...
iPhone Duo, problemi di produzione per i...
Firefox diventa più veloce con PDF e JPE...
WhatsApp, arriva su iOS la nuova scorcia...
Snap presenta Specs: realtà aumentata, c...
SteamOS verso un cambiamento epocale: ar...
Recensione HUAWEI FreeBuds Neo, piccoli ...
TSMC aumenta i costi di produzione: AMD ...
L'Europa sfida i magnati dei combustibil...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 18:33.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v