Newsgroup: it.comp.appl.access
Titolo: select case

salve,
 
purtroppo non ne vengo a capo,
 
ho un codice articolo
 
ho un campo in una query dove devo verificare varie possibilita':
 
ESPR1: SWITCH ([COD_ART] Like 'CAA*';10; [COD_ART] Like 'CA*';11;
[COD_ART] Like 'CF*';12; [COD_ART] Like 'CPP*';13; [COD_ART] Like
'CS*';14; ([COD_ART] Like 'UT*' AND [DES_RIGA] LIKE'*H2O*' );15;
[COD_ART] Like 'XCC*';16; [COD_ART] Like 'XPP*';17; [COD_ART] Like
'COS*';18; [COD_ART] Like 'UT*';19; ([COD_ART] Like 'ZT*' AND
[DES_RIGA] LIKE'*H2O*' );20; ([COD_ART] Like 'ZT*' AND [DES_RIGA]
LIKE'*ACR*' );21; ([COD_ART] Like 'ZT*' AND [DES_RIGA] LIKE'*LUC*' );
22; ([COD_ART] Like 'ZT*' AND [DES_RIGA] LIKE'*GOFFR*' );23; [COD_ART]
Like 'ZT*';24)
 
mi restituisce espressione troppo complessa
 
ho provato a crearmi un modulo con una funzione appropriata (partendo
con il solo primo caso)
 
Function TIPOPRODOTTO() As String
Select Case Query![TUTTIICODICI]![DES_RIGA]
Case Is = "CAA*"
TIPOPRODOTTO = 10
End Select
End Function
 
e richiamando la funzione sul campo della query con:
 
TIPOPRODOTTO([TUTTIICODICI])
 
ma ottengo un "numero errato di argomenti specificato in una funzione
nell'espressione immessa"
 
cosa sbaglio?
 
 

 cosa sbaglio?
 
La tua Function non � impostata per accettare parametri.
Inoltre non puoi utilizzare caratteri jolly (*) in Select Case, fallo con
un 
IF ... ELSEIF .... che � anche pi� veloce.
 
Public Function TIPOPRODOTTO(Riga as String) As String
Select Case Riga
If Riga like "CAA*" Then
  TIPOPRODOTTO = 10
ElseIf Riga like "...." Then
  TIPOPRODOTTO = ....
ElseIf Riga like "...." Then
  TIPOPRODOTTO = ....
.....
.....
End if
 
Ciao.
-Marco-
 
 
-- 
 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it
 
 
 


 
 
GRAZIE per la pronta risposta, i dubbi ci sono ancora, chiedo scusa ma
sono proprio alle prime armi:
 
avendo
 Public Function TIPOPRODOTTO(Riga as String) As String
 Select Case Riga
 If Riga like "CAA*" Then
     TIPOPRODOTTO = 10
 ElseIf Riga like "...." Then
     TIPOPRODOTTO = ....
 ElseIf Riga like "...." Then
     TIPOPRODOTTO = ....
.....
 
Nel mio caso, chiamandosi il campo DES_RIGA e non riga devo scrivere
appunto DES_RIGA? oppure query![TUTTIICODICI]![DES_RIGA]
 
ho provato in tutti i modi ma non va
 
se poi richiamo la funzione, nel campo della query, scrivendo:
TIPOPRODOTTO([TUTTIICODICI])               (tuttiicodici e' il nome
della tabella)
 
non funge e mi chiede di inserire il parametro

 non funge e mi chiede di inserire il parametro
 
Nella query dove la richiami passi alla funzione il nome del CAMPO (non
solo 
della tabella!) che contiene il valore da esaminare.
Nella Function usi una variabile (Riga) che riceve il valore passato e lo 
elabora. Non � necessario che il nome del parametro della function
rispecchi 
quello del campo della query.
 
Quindi la Function va bene cos�, e nella query richiami
TIPOPRODOTTO([TUTTIICODICI].[DES_RIGA])



 
grazie dell'aiuto, ora sono fermo qui:
 
c'e' un campo nella query TUTTIIPRODOTTI che richiama la funzione
 
Espr1: TIPOPRODOTTO([DES_RIGA])
 
se mettevo TIPOPRODOTTO([TUTTIIPRODOTTI].[DES_RIGA]) mi chiede di
inserire il parametro
 
e la funzione TIPOPRODOTTO che e' cosi' impostata
 
Public Function TIPOPRODOTTO(Riga As String) As String
Riga = Query.[TUTTIIPRODOTTI].[DESRIGA]
Select Case Riga
If Riga Like "CAA*" Then            <-----------------------------
        TIPOPRODOTTO = 10
ElseIf Riga Like "CA*" Then
        TIPOPRODOTTO = 11
End If
 
ora mi si ferma sulla riga evidenziata dalla freccia e mi dice
errore di compilazione:
istruzione ed etichette non valide tra select case e la prima
posizione del case
 
 
 


 
Mi rispondo da solo, ma ho ancora un problema,
 
ho modificato cosi' il codice
 
Option Compare Database
Public Function TIPOPRODOTTO(Riga As String) As String
Riga = Query.[TUTTIIPRODOTTI].[DESRIGA].Value
Select Case Riga
Case Riga Like "CAA*"
      TIPOPRODOTTO = 10
Case Riga Like "CA*"
  TIPOPRODOTTO = 11
End Select
 
errore di run time 424 necessario oggetto
 
aiuuuuto :)  grazie in anticipo
 
marco

 Riga = Query.[TUTTIIPRODOTTI].[DESRIGA].Value
 
Questa riga qua sopra va tolta.
Non sei tu che vai ad inserire nella variabile il valore, gli viene
passato 
in automatico quando nella query richiami la funzione.
Scrivendo TIPOPRODOTTO([TUTTIIPRODOTTI].[DESRIGA]) viene eseguita la 
funzione TIPOPRODOTTO che si aspetta di ricevere un valore di tipo String,
e 
che viene messo nella variabile definita nella dichiarazione della
function, 
in questo caso Riga.
Quindi puoi (devi) usare la variabile Riga SENZA doverla valorizzare 
esplicitamente.
Se ti compare una richiesta di parametro vuol dire che nella query dove 
richiami la funzione TIPOPRODOTTO([TUTTIIPRODOTTI].[DESRIGA]) hai
sbagliato 
a scrivere il nome della tabella o del campo, ricontrollali, mettendo
anche 
eventuali spazi o trattini. Le maiuscole/minuscole invece non importano.


 Questa riga qua sopra va tolta.
 
 
INFINITAMENTE GRAZIE, RISOLTO!


aargh
 
ho postato col nick del mio collega
 
pardon
 
:)