Newsgroup: it.comp.lang.visual-basic
Titolo: Aiuto salvataggio dati in un DB

Sull'evento click di un pulsante di una form, con il codice sotto dovrei 
salvare ed aggionare i dati, ma la riga non mi funziona, dove sbaglio?
            Dim db As Database
            Dim Sq As String
            Set db = OpenDatabase(App.Path & "\Laboratorio.mdb")
            Sq = "UPDATE QueryDBMicro SET " & "DataInizioAnalisi" & "=" & 
Replace(MaskEditControl1.Text, "'", "''") & "', " & "DataFineAnalisi" & "=" 
& Replace(Text5.Text, "'", "''") & "', " & "Risultato" & "=" & 
Replace(Text4.Text, "'", "''") & "', " & "WHERE ProtocolloMicro" & "=" & 
Codice_F And "Where Analisi" & "=" & Cod_Analisi
            db.Execute (Sq)
            db.Close
L'errore è nella Sq=.... dove sbaglio??
 chi mi può dare una mano??
Grazie

 ha scritto nel messaggio 
news:4667249f$0$37198$4faf...@reader3.news.tin.it...


 ha scritto nel messaggio 
news:4667249f$0$37198$4faf...@reader3.news.tin.it...


 
Io non mi fiderei dei vari maskedit e robe varie...mi trovo molto meglio 
a scrivere un po di codice in più!
Ad esempio...considerando anche il tipo di errore....è molto probabile 
che tu voglia mettere delle pere dove si aspetta bulloni!
Mi spiego....se hai un campo DataFineAnalisi...ho il sospetto che il 
campo accetti una data...e non un testo!
Se è così
DataFineAnalisi ='#06/07/2007#'
secondo la sintassi mm/dd/yyyy
Esiste l'evento validate nei controlli....io userei quello per validare 
l'input prima di passare il dato ad una query....
Io mi costruisco una matrice...o un type...quello che vuoi...con tutti i 
dati che mi servono....poi volta volta che li inserisco nel controllo li 
valido e li piazzo nella matrice (o nel type)
quando mi serve mi faccio la query con i valori trattenuti dalla 
matrice...se i dati sono TANTI...è comodo (il type ancora di più)...se 
sono pochi no!
ma IMHO validerei l'input...prima di darlo in pasto ad una query!

 Codice_F And "Where Analisi = " & Cod_Analisi
-----------^
anche l'And DEVE stare dentro le virgolette, visto che fa parte del 
comando SQL e non e' un And del visual basic
piu' o meno cosi':
Replace(Text4.Text, "'", "''") & "', " & "WHERE ProtocolloMicro = " &
  Codice_F  & " And Where Analisi = " & Cod_Analisi
ripeto: ELIMINA TUTTE le contatenazioni non necessarie ovvero quelle 
chre uniscono 2 parti costanti della sgtringa SQL.
resta anche valido in consiglio di wodka di controllasre PRIMA la 
validita' dei 'parametri' che usi per construire la query ed, aggiungo, 
il loro formato: usa i cancelletti ( # ) per le costanti di tipo 
date/time e usa il loro formato corretto ( non ricordo de gg/mm/aaaa o 
mm/gg/aaaa ) access ( jet o mdb che di si voglia ) e' di bocca buona in 
quanto al formato delle date ma a volte e' un po' intraprendente quando 
le date sono ambigue: 1/3/2007 e' il primo marzo o il 3 di gennaio ? :-)
tieni conto che mettendo delle date tra apici tu dici, al motore jet, 
che sono delle stringhe e lui provvede a convertirle in date, usando il 
cancelletto tu lo avverti che la costante e' una data:
DataInizioAnalisi = '1/3/2007'
DataInizioAnalisi = #1/3/2007#
non sono esattamente la stessa cosa
l'help in linea e' di tuo aiuto


 ha scritto nel messaggio 
news:4667a46e$0$37207$4faf...@reader3.news.tin.it...


 
sicuramente manca ALMENO uno spazio nella stringa
ma non ti dico dove :-) altrimenti non esci da questo problema
piuttosto di indico una strada .... :
metti una breakpoint alla linea dovre prepari la stringa SQL:
Sq = "UPDATE Query .......
fai girare il programma ( che si interrompera' quando arriva a quella 
linea di codice )
esegui SOLO quella linea col passo passo ( tasto F8 )
fai apparire la finestra 'immediata' ( Ctrl-G )
nella finestra 'immediata' scrivi:
? Sq
e batti invio
ti apparira' il contenuto della stringa Sq cosi' potrai trovare 
facilmente dov'e' il problema.

P.S.
Quota CORRETTAMENTE le risposte vanno DOPO la parte di posta originale a 
cui fanno riferimento, e nno in TESTA al messaggio, inoltre elimina le 
parti inutili del messaggio quotato, ed inoltre leggi attentamente 
quello che ti scrivono :-) perche' nel mio mesaggio precedente la 
sintassi era giusta :-))))

>             db.Close
L'errore č ancora lo stesso identico e preciso :,((((
Ti prego schiodami...
7mino

Penso che questa sia la migliore da me partorita:
Sq = "UPDATE QueryDBMicro SET " & "DataInizioAnalisi = '" & 
Replace(MaskEditControl1.Text, "'", "''") & "', " & "DataFineAnalisi = '" & 
Replace(Text5.Text, "'", "''") & "', " & "Risultato = '" & 
Replace(Text4.Text, "'", "''") & "', " & "WHERE ProtocolloMicro = '" & 
Codice_F & "'" & " And Where Analisi = '" & Cod_Analisi & "'"
Ma il risultato è identico, non funziona, identico errore...


la "Where" dopo l' "And" e' l'errore
Sq = "UPDATE QueryDBMicro SET " & "DataInizioAnalisi = '" &
Replace(MaskEditControl1.Text, "'", "''") & "', " & "DataFineAnalisi ='" 
& Replace(Text5.Text, "'", "''") & "', " & "Risultato = '" &
Replace(Text4.Text, "'", "''") & "', " & "WHERE ProtocolloMicro = '" &
Codice_F & "'" & " And Where Analisi = '" & Cod_Analisi & "'"
-----------------------^^^^^
SE ProtocolloMicro e/o Cod_Analisi NON sono dei campi testo i 
corrispondenti apici NON sono necessari, ma questo e' un dettaglio,
resta sempre il problema delle date e di come Jet le gestisce

Ho fatto cosě:
Sq = "UPDATE QueryDBMicro SET " & "DataInizioAnalisi = '" & 
Replace(MaskEditControl1.Text, "'", "''") & "', " & "DataFineAnalisi = '" & 
Replace(Text5.Text, "'", "''") & "', " & "Risultato = '" & 
Replace(Text4.Text, "'", "''") & "', " & "WHERE ProtocolloMicro = '" & 
Codice_F & "'" & " " & "And" & " " & "WHERE Analisi = '" & Cod_Analisi & "'"
Ma indovina.... Non funziona!! :,,,,(

Ciao mmm,
Ti volevo ringraziare per avermi insegnato ad usare la finestra immediato, 
grazie alla quale ho smontato completamente la stringa SQL ed ho iniziato 
con l'update di un solo campo filtrato solo da un record, e partendo da quì 
son andato avanti, rimondandola, ho apportato anche un paio di variazioni 
alla struttura del database, cmq la stringa giusta è questa:
Sq = "UPDATE DBMicro SET " & "DataInizioAnalisi = '" & 
Replace(MaskEditControl1.Text, "'", "''") & "', " & "DataFineAnalisi = '" & 
Replace(Text5.Text, "'", "''") & "', " & "Risultato = '" & 
Replace(Text4.Text, "'", "''") & "'" & "WHERE ProtocolloMicro = " & LabCodP 
& " And " & "Analisi = " & Cod_Analisi
Come puoi notare la prima differenza è quì:
"WHERE ProtocolloMicro = " & LabCodP & " And " & "Analisi = " & Cod_Analisi
ho inserito un solo Where
ma la parte che mi stava facendo uscire pazzo è questa:
& "'" & "WHERE ProtocolloMicro = "
mentre prima era:
& "', " & "WHERE ProtocolloMicro = "
Analizzando il tutto era una virgola del Ca..o che mi rompeva le scatole da 
3 giorni...
Cmq grazie ancora, senza il tuo aiuto non ci sarei mai arrivato.
7mino