View Full Version : QUERY CON VBA
Michael Jennings
21-02-2007, 20:28
Salve a tutti. Ho scritto poche righe di codice in VBA che dovrebbero permettermi di inserire dei dati in una tabella(query di accodamento). Sintatticamente è corretta...tuttavia quando eseguo queste istruzioni mi viene detto:"impossibile accodare tutti i record nella query di accodamento" facendo riferimento alla violazione di un vincolo di chiave.
Questo è il codice:
Dim statement As String
Codice.SetFocus
statement = "INSERT INTO Noleggi(Filmato,Cliente,Data_prestito,Data_restituzione) VALUES(" & Codice.Text & ", (Cliente), (Data_prestito), (Data_restituzione));"
DoCmd.RunSQL (statement)
Le chiavi della tabella Noleggi sono Filmato e Cliente.
Qualcuno può aiutarmi??
ti aiuto io!
per com'è scritta la query non ti da errori di sintassi...ma la query in sè non ha senso...
infatti tu scrivi: caro il mio access, accodami alla tabella Noleggi (che ha i seguenti campi:Filmato, Cliente, Data_prestito, Data_restituzione...) i seguenti valori nell'ordine in cui compaiono:
1) il valore che c'è in Codice.Text (<---tra l'altro questo non lo puoi fare...se devi accedere al valore contenuto nella casella di testo "codice", lo devi fare semplicemente col nome che ha la casella di testo, ad esempio "casellacodice", oppure se vuoi essere pignolo con "casellacodice.value", oppure pignolisssssimo "Me.casellacodice.value")
2)la stringa "Cliente"
3)la stringa "Data_prestito"
3)la stringa "Data_restituzione"
capirai che le ultime tre istruzioni non hanno proprio senso (non che la prima ce ne abbia di più...:) )
Allora, assumiamo che tu lanci quella routine da una maschera in cui vi sono le seguenti caselle di testo:
txtCodice, txtCliente, txtData_prestito, txtData_restituzione
che, immagino, l'utente debba compilare.
Allora il codice vba corretto è il seguente che effettua la query di accodamento:
DoCmd.RunSQL "INSERT INTO Noleggi(Filmato,Cliente,Data_prestito,Data_restituzione) VALUES ('" & Me.txtcodice & "','" & Me.txtCliente & "','" & Me.txtData_prestito & "','" & Me.txtData_restituzione & "')"
capito?
se ci sono problemi non esitare a farci sapere!
[Riot]-kyashan
23-02-2007, 09:03
ti aiuto io!
per com'è scritta la query non ti da errori di sintassi...ma la query in sè non ha senso...
infatti tu scrivi: caro il mio access, accodami alla tabella Noleggi (che ha i seguenti campi:Filmato, Cliente, Data_prestito, Data_restituzione...) i seguenti valori nell'ordine in cui compaiono:
1) il valore che c'è in Codice.Text (<---tra l'altro questo non lo puoi fare...se devi accedere al valore contenuto nella casella di testo "codice", lo devi fare semplicemente col nome che ha la casella di testo, ad esempio "casellacodice", oppure se vuoi essere pignolo con "casellacodice.value", oppure pignolisssssimo "Me.casellacodice.value")
2)la stringa "Cliente"
3)la stringa "Data_prestito"
3)la stringa "Data_restituzione"
capirai che le ultime tre istruzioni non hanno proprio senso (non che la prima ce ne abbia di più...:) )
Allora, assumiamo che tu lanci quella routine da una maschera in cui vi sono le seguenti caselle di testo:
txtCodice, txtCliente, txtData_prestito, txtData_restituzione
che, immagino, l'utente debba compilare.
Allora il codice vba corretto è il seguente che effettua la query di accodamento:
DoCmd.RunSQL "INSERT INTO Noleggi(Filmato,Cliente,Data_prestito,Data_restituzione) VALUES ('" & Me.txtcodice & "','" & Me.txtCliente & "','" & Me.txtData_prestito & "','" & Me.txtData_restituzione & "')"
capito?
se ci sono problemi non esitare a farci sapere!
Ottima spiegazione:D , anche se il tuo punto 1 non è corretto, perche si può anche prendere un valore con textbox.text.
Ma ovviamente se non aggiunge gli apici alla query, difficlmente entrerà...:)
-kyashan;16093916']Ottima spiegazione:D , anche se il tuo punto 1 non è corretto, perche si può anche prendere un valore con textbox.text.
beh certo che si può fare, ma obbligatoriamente la casella in quesione dovrà avere lo stato "attivo", altrimenti access darà un errore del tipo "impossibile accedere alla proprietà text di un campo che non ha lo stato attivo"....dunque bisognerebbe far precedere quel tipo di comando da un "codice.setfocus" (non mi ricordo come mai access lanci quell'errore...almeno in access 2000 è così, non ho verificato se sulle ultime vesioni la cosa sia stata cambiata...)
Ottima spiegazione
grazie :)
[Riot]-kyashan
23-02-2007, 13:29
beh certo che si può fare, ma obbligatoriamente la casella in quesione dovrà avere lo stato "attivo", altrimenti access darà un errore del tipo "impossibile accedere alla proprietà text di un campo che non ha lo stato attivo"....dunque bisognerebbe far precedere quel tipo di comando da un "codice.setfocus" (non mi ricordo come mai access lanci quell'errore...almeno in access 2000 è così, non ho verificato se sulle ultime vesioni la cosa sia stata cambiata...)
grazie :)
è vero..:D , mi era sfuggito che si parlasse di access...in vb non è cosi...:stordita:
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.