Newsgroup: it.comp.appl.access
Titolo: Select case su evento click di un command

salve a tutto il N.G. avrei bisogno di un aiuto se fosse possibile;
la mia necessità sarebbe quella di far eseguire delle query di
inserimento diverse le une dalle altre su l'evento click di un command
ma a determinate condizioni, e cioè se due controlli di tipo textbox
sono nulle o meno
Mi spiego meglio:
se la text1 non è nulla e la text2 è nulla  allora docmd runsql
"query1"
docmd runsql "query2"
altrimenti
nulla
se la text1 è nulla e la text2 non e' nulla allora docmd runsql "
query3"
docmd runsql "query 4"
altrimenti
nulla
se la text1 non è nulla e la text2 non e' nulla allora docmd runsql
"query 5"
  docmd runsql "query6"
altrimenti
 nulla
se la text1 è nulla e la text2 è nulla allora docmd runsql "query 7"
alytrimenti
nulla
ed i vari end if
ora avrei voluto invece di questa sequenza di if else ecc ecc adottare
un select case
nonostante mi funzioni in questo modo, ma ritengo piu' elegante e meno
"Logorroico" usare il select case piuttosto che gli if ed else per
questo genere di cose,
il problema sta che non so come fare =))
cioe io scrivo una function del tipo
function registra() e la mando in esecuzione sull'evento click del
command
ma mi impallo perchè non so cosa passare sul select case
cioe:
function registra()
select case ......che cosa cavolo gli metto?
ho provato a fare  select case me.command1.onclick
e poi i vari case 1  case 2 ecc ma non va....
devo lasciare le cose come stanno con gli if ed else?
o posso sperare che ci possa essere una soluzione a questo , magari
semplicissimo per voi problema , ma piuttosto astruso per me!!
grazie 
Saluti
Diego

 ha scritto nel messaggio
news:1159217486.8...@h48g2000cwc.googlegroups.com...


docmd runsql "query2"
altrimenti
nulla

docmd runsql "query 4"
altrimenti
nulla

  docmd runsql "query6"
altrimenti
 nulla

alytrimenti
nulla







cioe:


grazie
Saluti
Diego
Parti da questo e vedi di svilupparlo
Guardati bene la sintassi di Select Case
che non me la ricordo bbene ma dovrebbe
poter accettare due valori contemporaneamente ;)
Morgan
If Me.NotIsNull(text1.value) then
blnX =True
else
blnX=False
end if
If Me.NotIsNull(text2.value) then
blnY =True
else
blnY=False
end if
Function Registra (blnX as Boolean, blnY as Boolean)
Select Case Registra
Case blnX AND blnY = True
docmd runsql "query1"
Case blnX = False AND blnY = True
docmd runsql "query2"
Case blnX = True AND blnY = False
docmd runsql "query3"
End Select

diego ha scritto:

La selezione effettuata da un If....ElseIf ....Else..End if è più
veloce che quella fatta da un SELECT CASE.....!
Detto questo non vorrei che ti scappasse proprio :
If Cond1.... Then
   ...........
ElseIf Cond2 Then
   ............
ElseIf Cond3 Then
   .........
Else
   ...........
End If
@Alex

 ha scritto nel messaggio 
news:1159217486.8...@h48g2000cwc.googlegroups.com...
salve a tutto il N.G. avrei bisogno di un aiuto se fosse possibile;
la mia necessità sarebbe quella di far eseguire delle query di
inserimento diverse le une dalle altre su l'evento click di un command
Potresti utilizzare la seguente struttura valida per 2 campi
Select case 
((iif(isnull(me.campo1.value),0,1)+(iif(isnull(me.campo2.value),0,2))
Case 0 'campo1 e 2  nulli
......
Case 1 'campo1 non nullo e campo2 nullo
.....
Case2 'campo1 nullo e campo2 non nullo
......
Case3 'campo1 e 2 non nulli
.....
End select
Non l'ho provata ma dovrebbe funzionare.
Michele

 End Select
ti ringrazio della dritta, credo che possa funzionare, una cosa pero'
ti chiedo:
If Me.NotIsNull(text1.value) then
blnX =True
else
blnX=False
end if
If Me.NotIsNull(text2.value) then
blnY =True
else
blnY=False
end if
ma questa routine dove la colloco? all'inizio nella function registra o
deve essere una function a se stante?
Grazie
Diego

 @Alex
Ciao Alex, io credevo invece che fosse l'opposto, mi avevano detto che
le istruzioni if else end if  risultavano meno performanti rispetto ai
select case che risultavano piu' veloci oltre che piu' sintetici dal
punto di vista di quantita' di codice da andare ad esaminare, quindi
pensavo che fosse stato meglio adottare il select case piuttosto che
gli if.

 Michele
Ora la provo
Grazie michele

 Michele



Mi sa proprio che per scegliere il metodo giusto dvrai utilizzare la classe 
cronometro di Baraldi....... Grande Alex, un capolavoro!
Michele 

 Michele
Mi sa di si....eppure pensavo di aver capito bene quando mi dissero che
il select case e' piu' veloce dell'if else end if
o magari mi ero "calato" qualche bicchere in piu' di mitico "Sangue
Siciliano".....si forse è così :=))

diego ha scritto:

La cosa è da analizzare.
Se la prima Condizione(il 1° Case) è quella più frequente il Select
è più veloce, se invece
le condizioni sono multiple con una casualità di precedenza il Select
case perde velocità....!
Parliamo sempre di finezza....
@Alex

 ha scritto nel messaggio 
news:1159221484....@m73g2000cwd.googlegroups.com...



Siciliano".....si forse č cosě :=))
Ma allora sto Select Case che ho concepito e partorito ieri sera funzia o 
non funzia?
Michele 

 Michele
scusa Michele se non ho risposto subito ma l'ho provato solo stasera
quando sono rientrato, comunque si che funziona cosi'  come anche tutte
le altre soluzioni suggerite, devo solo scegliere quale soluzione
adottare, c'e' da dire , per rispondere ad Alex, che in effetti una
query in particolare e' davvero richiesta le altre sono utilizzate
sporadicamente
quindi magari dal momento che la condizione  che il Case1 sia quello
più usato rispetto gli altri Case esiste, magari vedro per optare per
il Select anziche' con gli IF :
Grazie
Saluti
Diego

diego ha scritto:

L'ordine dispositivo del Case è fondamentale, sel la QRY1 è quella
maggiormente usata
dovrai metterla come 1° Case, in questo modo la valutazione verrà
interrotta subito
evitando le singole valutazioni, ma questo è valido anche per
IF...ELSEIF...END IF
Ciao
@Alex

 @Alex
Sinceramente questo non lo sapevo, devo dirti in tutta franchezza che
non mi ero mai posto il problema della precedenza, posso, forse, anche
capire il perche' magari ho avuto qualche problema nel far funzionare
la routine, io non posizionavo come primo select o comunque come prima
condizione, usando gli IF, la query maggiormente usata, ma bensì
dettavo le condizioni, cioè se uno dei due controlli era nullo o meno,
se erano nulli o non nulli entrambi, e mi sono accorto che la query,
anzi le query, piu' usate che vengono eseguite sulla condizione
entrambi nulli, vengono sempre eseguite e le altre no, mi spiego
la maschera non e' associata ci sono una ventina di campi che vanno a
scrivere dati su  5 tabelle,  all'evento click del command,circa 10
campi inseriscono i valori scritti nella tabella utente, 4 campi
scrivono nella tabella targa associata attraverso l'idUtente alla
tabella utente, altri  8 o 9 campi scrivono dati nella tabella Pass che
è associata alla tabella targa attraverso l'idTarga, quindi le query
di inserimento principali sono la INSERT INTO TblUtente, INSERT INTO
TblTarga, INSERT INTO TblPass; ora ci stanno altri due Controlli, il
Controllo INTESTATARIO dove viene inserito il nominativo
dell'intestatario della vettura qualora l'utente non fosse
l'intestatario, ed il Controllo NOTE, entrambi i controlli scrivono
dati sulle relative tabelle Tabella Intestatario e Tabella Note
entrambe le tabelle sono relazionate alla Tabella Utente attraverso
l'IdUtente, Naturalmente ogni tabella ha anche un proprio Id che viene
generato attraverso una funzione di incremento (SELECT 1+Max(ecc.ecc.)
che viene scritto su un Controllo (TextBox) nascosto e che nel momento
che la query di inserimento viene eseguita scrive il valore nella
Tabella di Riferimento, questo per ogni tabella.
Quindi cosa succede, succede che se il controllo Note o Intestatario
sono Nulli (perche' naturalmente non tutti gli utenti sono NON
PROPRIETARI e non tutti gli Utenti devono essere in possesso di NOTE
da riportare come promemoria), le query che vengono eseguite sono le 3
principali di cui sopra, se viceversa non sono nulli le query che
vengono eseguite diventano da 4 a 5 se i controlli in questioni NON
sono NULLI entrambi. Ora mi sono accorto che sia con select che con
l'IF vengono solo eseguite le 3 query principali e vengono sempre
ignorate le altre due , qualunque condizione sia,
ho anche pensato che il valore su Controllo vuoto non fosse Null, ed ho
quindi fatto il DEBUG.PRINT e come valore mi restituisce
NULLO....Quindi non so come mai non vengono eseguite le altre due
Query, non ho ancora provato però a dare le precedenze come mi hai
appena suggeito tu, puo' darsi che magari la soluzione del problema
possa  essere questa, inoltre volevo aggiungere che tutto l'Ambaradam
di query da eseguire e tutto il relativo codice che ne deriva non lo
scrivo sull'evento click del command, ma bensì scrivo una sub che ho
chiamato Sub inserisci() scrivo tutte le condizioni e le relative query
e poi la passo sull'evento click del command.
Non ho piu' nulla da scrivere, e meno male.
Saluti
Diego

diego ha scritto:

Prova a postare il codice pulito del condizionamento(inteso come Select
Case o If...End if) mi suona strano quello che dici...!
Il controllo di un Controllo Testo si deve eseguire in 2 modi:
If IsNull(Me!nomeControllo) Or Len(Me!NomeControllo)=0 Then
Se ti limiti al Null rischi di avere brutte sorprese...!
@Alex

 @Alex
Posto il codice con le relativa funzione di inserimento dati e la
routine da svolgere sull'evento click del command:
On Error GoTo Err_CmdSalva_Click
DoCmd.SetWarnings False
Dim RISPOSTA
    RISPOSTA = MsgBox("CONFERMARE L'INSERIMENTO DEL NUOVO UTENTE ? ",
vbYesNo, titoloApp)
    If RISPOSTA = vbYes Then
'        Cancel = True
inserisci_id (inserisce l'id delle tabelle attraverso la funzione
progressivo SELECT 1+Max(Ecc.Ecc)
increIntes (incrementa di 1 il numero dell'intestatario qualora
l'utente ha più vetture non intestate. Esempio: Int. N° 1 Brambilla
Luigi  ecc ecc )
incremenNota ( lo stesso dell'incremento intestatario se l'utente ha
piu' note si specifica come notaN°1 ecc ecc)
AssegnProtocollo (assegna il numero di protocollo per ogni pass
rilasciato)
INSERISCIDATI (Inserisci i dai della form nelle relative tabelleconle
condizionidel caso)
MsgBox "Inserimento Nuovo Utente Effettuato", , titoloApp
Forms!FrmUtente.Requery
Forms!FrmUtente.Refresh
Forms!FrmUtente.Recordset.MoveLast
Forms!FrmUtente!ListPass.Requery
Forms!FrmUtente!ListPass = Forms!FrmUtente!ListPass.ItemData(0)
Forms!FrmUtente!TxTIdIndirizzo = Me.TxIndirizzo.Column(0)
DoCmd.Close acForm, "FrmNuovo"
Else
MsgBox "INSERIMENTO DATI ANNULLATO", , titoloApp
DoCmd.Close acForm, "FrmNuovo"
End If
---------------------------------------------------------------------------------------------------------------------------------------------------------------
Function INSERISCIDATI()
'inserisce nelle relative tabellei dati caricati nella form a
determinte condizioni: se è nullo l'intestatario veicolo, se è nulla
_
' _la casella Note, se non sono nulle entrambi o se sono nulle entrambi
If Not IsNull(Me.TxNominIntes.Value) = True And
IsNull(Me.Testo28.Value) = True Then
DoCmd.RunSQL ("INSERT INTO
TblUtente(IdUtente,Pratica,CodFam,Cognome,Nome,DataNascita,NatoA,CodFisc,Indirizzo,Civico)VALUES("
& TxIdUtente & "," & TxPratica & ",'" & TxCodFam & "'," & Chr(34) &
TxCognome & Chr(34) & "," & Chr(34) & TxNome & Chr(34) & ",'" &
TxDataNascita & "'," & Chr(34) & TxNatoA.Column(1) & Chr(34) & ",'" &
TxCodFisc & "'," & Chr(34) & TxIndirizzo.Column(1) & Chr(34) & ",'" &
TxCivico & "')")
DoCmd.RunSQL ("INSERT INTO TblTarga(IdTarga,IdUtente,Targa) VALUES(" &
TxIdTarga & "," & TxIdUtente & ",'" & TxTarga & "')")
DoCmd.RunSQL ("INSERT INTO TblProtocollo(Protocollo,Anno) VALUES(" &
TxN_Prot & ",'" & TxAnnoProtocollo & "')")
DoCmd.RunSQL ("INSERT INTO
TblPass(IdPass,IdTarga,Protocollo,Del,Targa,Zona,Gestore,Autorizzazione,PassN,Rilascio,validita,Scadenza,Banca)
VALUES(" & TxIdPass & "," & TxIdTarga & ",'" & TxProtocollo & "','" &
TxDel & "','" & TxTarga & "'," & TxZona & ",'" & TxGestore & "','" &
Txautorizzazione & "'," & TxPassN & ",'" & TxRilascio & "','" &
Txvalidita & "','" & TxScadenza & "'," & Chr(34) & TxBanca & Chr(34) &
")")
DoCmd.RunSQL ("INSERT INTO
TblIntestatario(IdIntestatario,IdUtente,N_Intest,Nominativo,TargaInt)VALUES(
" & Me.TxIdIntest.Value & "," & Me.TxIdUtente.Value & " ," &
Me.TxN_Intest.Value & " ," & Chr(34) & Me.TxNominIntes.Value & Chr(34)
& ",'" & Me.TxTarga.Value & "')")
ElseIf IsNull(Me.TxNominIntes.Value) = True And Not
IsNull(Me.Testo28.Value) = True Then
DoCmd.RunSQL ("INSERT INTO
TblUtente(IdUtente,Pratica,CodFam,Cognome,Nome,DataNascita,NatoA,CodFisc,Indirizzo,Civico)VALUES("
& TxIdUtente & "," & TxPratica & ",'" & TxCodFam & "'," & Chr(34) &
TxCognome & Chr(34) & "," & Chr(34) & TxNome & Chr(34) & ",'" &
TxDataNascita & "'," & Chr(34) & TxNatoA.Column(1) & Chr(34) & ",'" &
TxCodFisc & "'," & Chr(34) & TxIndirizzo.Column(1) & Chr(34) & ",'" &
TxCivico & "')")
DoCmd.RunSQL ("INSERT INTO TblTarga(IdTarga,IdUtente,Targa) VALUES(" &
TxIdTarga & "," & TxIdUtente & ",'" & TxTarga & "')")
DoCmd.RunSQL ("INSERT INTO TblProtocollo(Protocollo,Anno) VALUES(" &
TxN_Prot & ",'" & TxAnnoProtocollo & "')")
DoCmd.RunSQL ("INSERT INTO
TblPass(IdPass,IdTarga,Protocollo,Del,Targa,Zona,Gestore,Autorizzazione,PassN,Rilascio,validita,Scadenza,Banca)
VALUES(" & TxIdPass & "," & TxIdTarga & ",'" & TxProtocollo & "','" &
TxDel & "','" & TxTarga & "'," & TxZona & ",'" & TxGestore & "','" &
Txautorizzazione & "'," & TxPassN & ",'" & TxRilascio & "','" &
Txvalidita & "','" & TxScadenza & "'," & Chr(34) & TxBanca & Chr(34) &
")")
DoCmd.RunSQL ("INSERT INTO
TblNote(IdNota,IdUtente,N_Nota,[Note])VALUES( " & Me.TxIdNota.Value &
"," & Me.TxIdUtente.Value & " ," & Me.TxN_Nota.Value & " ," & Chr(34) &
Me.Testo28.Value & Chr(34) & ")")
ElseIf Not IsNull(Me.TxNominIntes.Value) = True And Not
IsNull(Me.Testo28.Value) = True Then
DoCmd.RunSQL ("INSERT INTO
TblUtente(IdUtente,Pratica,CodFam,Cognome,Nome,DataNascita,NatoA,CodFisc,Indirizzo,Civico)VALUES("
& TxIdUtente & "," & TxPratica & ",'" & TxCodFam & "'," & Chr(34) &
TxCognome & Chr(34) & "," & Chr(34) & TxNome & Chr(34) & ",'" &
TxDataNascita & "'," & Chr(34) & TxNatoA.Column(1) & Chr(34) & ",'" &
TxCodFisc & "'," & Chr(34) & TxIndirizzo.Column(1) & Chr(34) & ",'" &
TxCivico & "')")
DoCmd.RunSQL ("INSERT INTO TblTarga(IdTarga,IdUtente,Targa) VALUES(" &
TxIdTarga & "," & TxIdUtente & ",'" & TxTarga & "')")
DoCmd.RunSQL ("INSERT INTO TblProtocollo(Protocollo,Anno) VALUES(" &
TxN_Prot & ",'" & TxAnnoProtocollo & "')")
DoCmd.RunSQL ("INSERT INTO
TblPass(IdPass,IdTarga,Protocollo,Del,Targa,Zona,Gestore,Autorizzazione,PassN,Rilascio,validita,Scadenza,Banca)
VALUES(" & TxIdPass & "," & TxIdTarga & ",'" & TxProtocollo & "','" &
TxDel & "','" & TxTarga & "'," & TxZona & ",'" & TxGestore & "','" &
Txautorizzazione & "'," & TxPassN & ",'" & TxRilascio & "','" &
Txvalidita & "','" & TxScadenza & "'," & Chr(34) & TxBanca & Chr(34) &
")")
DoCmd.RunSQL ("INSERT INTO
TblIntestatario(IdIntestatario,IdUtente,N_Intest,Nominativo,TargaInt)VALUES(
" & Me.TxIdIntest.Value & "," & Me.TxIdUtente.Value & " ," &
Me.TxN_Intest.Value & " ," & Chr(34) & Me.TxNominIntes.Value & Chr(34)
& ",'" & Me.TxTarga.Value & "')")
DoCmd.RunSQL ("INSERT INTO
TblNote(IdNota,IdUtente,N_Nota,[Note])VALUES( " & Me.TxIdNota.Value &
"," & Me.TxIdUtente.Value & " ," & Me.TxN_Nota.Value & " ," & Chr(34) &
Me.Testo28.Value & Chr(34) & ")")
Else
DoCmd.RunSQL ("INSERT INTO
TblUtente(IdUtente,Pratica,CodFam,Cognome,Nome,DataNascita,NatoA,CodFisc,Indirizzo,Civico)VALUES("
& TxIdUtente & "," & TxPratica & ",'" & TxCodFam & "'," & Chr(34) &
TxCognome & Chr(34) & "," & Chr(34) & TxNome & Chr(34) & ",'" &
TxDataNascita & "'," & Chr(34) & TxNatoA.Column(1) & Chr(34) & ",'" &
TxCodFisc & "'," & Chr(34) & TxIndirizzo.Column(1) & Chr(34) & ",'" &
TxCivico & "')")
DoCmd.RunSQL ("INSERT INTO TblTarga(IdTarga,IdUtente,Targa) VALUES(" &
TxIdTarga & "," & TxIdUtente & ",'" & TxTarga & "')")
DoCmd.RunSQL ("INSERT INTO TblProtocollo(Protocollo,Anno) VALUES(" &
TxN_Prot & ",'" & TxAnnoProtocollo & "')")
DoCmd.RunSQL ("INSERT INTO
TblPass(IdPass,IdTarga,Protocollo,Del,Targa,Zona,Gestore,Autorizzazione,PassN,Rilascio,validita,Scadenza,Banca)
VALUES(" & TxIdPass & "," & TxIdTarga & ",'" & TxProtocollo & "','" &
TxDel & "','" & TxTarga & "'," & TxZona & ",'" & TxGestore & "','" &
Txautorizzazione & "'," & TxPassN & ",'" & TxRilascio & "','" &
Txvalidita & "','" & TxScadenza & "'," & Chr(34) & TxBanca & Chr(34) &
")")
End If
End Function
Grazie Alex
Saluti
Diego