Newsgroup: it.comp.appl.access
Titolo: Condizione WHERE

ho scritto questa query che aggiunge una riga prendendo i valori da
dei campi calcolati di una maschera
Ho bisogno che pero' prima di scriverli VERIFICHI che la voce
"distributore" e "data" siano diversi dalle righe precedenti
INSERT INTO venduto ( data, distributore, welcome, happyness, omnia,
wind, butterfly, goldentime, freeline, planet )
SELECT [Forms]![test]![data], 'Piazza Domenicani',
[Forms]![test]![WELCOME_VENDUTE], [Forms]![test]![HAPPYNESS_VENDUTE],
[Forms]![test]![OMNIA_VENDUTE], [Forms]![test]![WIND_VENDUTE],
[Forms]![test]![BUTTERFLY_VENDUTE],
[Forms]![test]![GOLDENTIME_VENDUTE],
[Forms]![test]![FREELINE_VENDUTE], [Forms]![test]![PLANET_VENDUTE];
in questo caso  il distributore e' una stringa fissa "Piazza
Domenicani" e la data e' presa da una maschera
come implemento WHERE per fargli fare questi 2 controlli ?
(nell'help , esempi etc etc non c'e' nulla a questo)

 
potresti usare la clausola NOT IN (SELECT ...), ma imho ti conviene 
controllare il tutto via codice ed eseguire la query solo se le 
condizioni sono verificate.
dim rst as recordset
set rst=openrecordset("select * from tuatabella where tuoicritert")
if rst.recordcount=0 then
    	'tutto ok, procedo con la query di accodamento
else
    	'rogne: i dati c sono già...
endif
-- 
+-------
| Paolo opg
|
| janickg ( at ) hotmail ( dot ) com
+-------

endif
il punto e' che non ho idea di come dirgli se sono tutti e 2 uguali
allora non scrivere , senno vai pure avanti

 allora non scrivere , senno vai pure avanti
...
metti le due condizioni in AND nella clausola WHERE della query del 
recordset di controllo...


recordset di controllo...
il problema non e' capire DOVE mettere ma cosa mettere di preciso per
dirgli : se i 2 valori sono UGUALI non scrivere altrimenti fai pure

 
...
beh, se non hai chiara la condizione, č un pň difficile eseguire un 
controllo...
tanto piů che nel tuo post iniziale, le informazioni che dai non sono molto 
esplicative...
riposta spiegando con parole diverse, che magari ne caviamo fuori qlcs.


riposta spiegando con parole diverse, che magari ne caviamo fuori qlcs.
questo e' il codice sql della mia query
e' una query di accodamento e va a scrivere i dati
[Forms]![test]![prodotto_venduto] (quindi li prende da una maschera
chiamata "test" che ha un campo chiamato"prodotto venduto"
Ok questo e' il stato attuale
la mia tabella venduto e' cosi strutturata
ID,data,distributore,prodotto (dove prodotto sono gli 8 nomi qui sotto
, welcome,happyness ecc ecc)
finita la prefazione
la query di accodamento funziona perfettamente ho bisogno pero' di una
condizione
vorrei che la query , prima di scrivere un record , verifichi che tale
record non sia gia scritto e credo che la soluzione migliore per cio'
sia fargli controllare il campo data e il campo distributore
Se questi 2 campi sono uguali al record che sta per scrivere allora si
ferma e non va avanti senno prosegue senza problemi
Ho quindi necessita di completare il codice qui sotto per mettere
questo controllo su questi 2 campi e credo che il campo Where sia piu'
indicato anche se non ho idea di come "scriverlo in codice" per fargli
fare questo controllo
ecco spiegato il mio piccolo problema


 
il controllo sull'esistenza dei dati, io lo farei in una routine apposta 
(col codice che ti ho postato), principalmente perchè con del codice, 
puoi anche segnalare un errore quando trovi dei problemi a procedere, 
mentre con una query non puoi.
quindi, tieni la tua query così com'è e la esegui solo se il codice 
verifica che non ci siano errori.
per quanto riguarda la condizione where, il controllo per l'esistenza di 
un record, non devi farlo sui 2 campi che 'credi' siano quelli che ti 
servono, ma devi sapere qual'è la chiave primaria e usare quella.
prendi i campi chiave e controlla quelli:
WHERE (chiave1='valorechevoglioinserire) AND (chiave2='altrovalore')


WHERE (chiave1='valorechevoglioinserire) AND (chiave2='altrovalore')
diventa quindi cosi
dim rst as recordset
set rst=openrecordset("select * from venduto where
(chiave1='[forms]![test]![data] AND (chiave2='altrovalore')")    ?!?!?
if rst.recordcount=0 then
    	'tutto ok, procedo con la query di accodamento
else
    	'rogne: i dati c sono già...
endif
sono duro di comprensione
non riesco a seguirti e capire come dirgli controlla data e il
distributore e se li hai gia scritti allora ferma

 
il controllo lo fai con il recordset.
se nel recordset hai già i valori che vuoi inserire, vuol dire che tali 
valori esistono in tabella e che di conseguenza non devi inserirli di 
nuovo...
if numerorighe=0 -> non ci sono dati che rispondono ai criteri impostati 
-> inserisco i nuovi dati
else (numerorighe<>0) -> ho già delle righe che rispondono a quei criteri 
-> mando un msg d'errore all'utente


> 
ho finalizzato cosi
Private Sub Comando64_Click()
Dim rst As Recordset
Set rst = OpenRecordset("select * from venduto Where = "(data='" &
[forms]![test]![data] & "') AND _
                        (distributore='" &
[forms]![test]![distributore] & "')"
If rst.RecordCount = 0 Then
        'tutto ok, procedo con la query di accodamento
Else
        'rogne: i dati sono già...
End If
On Error GoTo Err_Comando64_Click
    Dim stDocName As String
    stDocName = "test"
    DoCmd.OpenQuery stDocName, acNormal, acEdit
Exit_Comando64_Click:
    Exit Sub
Err_Comando64_Click:
    MsgBox Err.Description
    Resume Exit_Comando64_Click
 
End Sub
ma sulla condizione where mi da' un sacco di errori , ho provato a
modificarla , ma non sono stato in grado di capire ..
ti riporto l'errore
Errore di sintassi : e mi evidenzia tutta la riga where in giallo.
Per semplificare le cose non uso il riferimento alla maschera per la
chiave2 (in questo caso il distributore) ma utilizzo il nome vero e
proprio e quindi Piazza Domenicani
Set rst = OpenRecordset("select * from venduto Where = "(data='" &
[forms]![test]![data] & "') AND _
                        (distributore= '& Piazza Domenicani & ')"
ma anche qui , ovviamente , non riesco a farla partire e mi da errore
di sintassi
Sicuramente e' una sciocchezza ma non riesco a trovarla
Sarebbe ideale riuscire a sistemare questa seconda soluzione con la
stringa fissa

 
...
prima di andare avanti, ti consiglio vivamente di leggerti (meglio se te 
lo studi) qualche tutorial base sul linguaggio sql.
google e' tuo amico:
http://www.google.com/search?q=%2Bsql%2Btutorial&ie=ISO-8859-1&hl=it&lr=
hai sbagliato la sintassi della clausola where in una maniera che indica 
che tu non conosci il linguaggio sql.
non che tu non ne abbia una conoscenza approfondita, ma che proprio non 
conosci le basi.
la sintassi sql di una query di selezione è:
SELECT elencocampi FROM nometabella WHERE (elencocondizioni);
tu hai messo un pò di apici sparsi, un uguale e qualche doppio apice che 
ti generano quegli errori a runtime...
cmq, nel tuo caso, la query per il recordset è:
strQuery = "select * from venduto Where ((data='" & _
 [forms]![test]![data] & "') AND (distributore='Piazza domenicani'));"
Set rst = OpenRecordset(strQuery)
ti ripeto: leggiti almeno qualche tutorial, altrimenti ti complicherai la 
programmazione in access...


programmazione in access...
Ho gia , chiaramente iniziato a seguire il tuo consiglio , e ti
assicuro come ben immagino saprai che partire da 0 e' veramente
difficile , tempo libero a parte.
Ora pero' ho solo bisogno di riuscire a sistemare questo piccolo
tassello per completare la "mia" (eheheh) piccola creatura
E se dovessi aspettare di arrivare a questo livello di programmazione
per riuscire a sistemare senza aiuti questo 1% di programma attenderei
molto tempo.
Per questo ti chiedo gentilmente di darmi per l'ultima volta una mano
non solo indicandomi il codice completo corretto da riportare ma
avendo anche pazienza :) 
strQuery = "select * from venduto Where ((data='" & _
[forms]![test]![data] & "') AND (distributore='Piazza domenicani'));"
Set rst = OpenRecordset(strQuery)
mi da' l'ennesimo errore 
Errore di sintassi (variabile non definita) ed evidenzia 
lo strQuery iniziale

 
le impostazioni predefinite di access, prevedono che tutte le variabili 
debbano essere dichiarate, prima di poter essere usate...
dim strQuery as string


dim strQuery as string
Private Sub Comando64_Click()
Dim strQuery As String
strQuery = "select * from venduto Where ((data='" & _
[Forms]![test]![data] & "') AND (distributore='Piazza Domenicani'));"
Set rst = OpenRecordset(strQuery)
If rst.RecordCount = 0 Then
DoCmd.OpenQuery "test"
Else
End If
il mio comando onclick
si blocca su Sub o funzione non definitaed evidenzia OpenRecordset
se per caso ci sono altri errori fammelo presente cosi evito di
continuare :)