Newsgroup: it.comp.appl.access
Titolo: Dati in base a delle condizioni

Ciao
Ho dei problemi per impostare delle condizioni per avere in automatico il
prezzo, mi spiego meglio, in una casella combinata ho inserito una certa
quantità di articoli (20÷30) indicandoli come testo, e sin qui non avevo
problemi con il seguente codice:
If TIPO = "a" Then TARIFFA = 10.33
If TIPO = "b" Then TARIFFA = 7.13
ecc.
adesso sorge il problema, in quanto ogni articolo ha due prezzi in base alla
"CATEGORIA" quindi se il "TIPO" "a" appartiene alla "CATEGORIA" "A" ha un
prezzo mentre se appartiene a "B" ne ha un'altro, allora ho modificato il
codice in questo modo:
If TIPO = "A" Then:If CATEGORIA  = "A" Then TARIFFA = 10.33
If TIPO = "A" Then:If CATEGORIA  = "B" Then TARIFFA = 9.50
ecc.
Per snellire la scrittura del codice in quanto per ogni articolo debbo
impostare le due condizioni, come potrei fare? Visto che le "CATEGORIE" sono
solo due cioè se la categoria è "A" corrisponde a quel prezzo altrimenti
all'altro
Grazie
Massimo

 Massimo
Mi rispondo da solo:
If TIPO = "A" Then:If CATEGORIA  = "A" Then TARIFFA = 10.33 Else TARIFFA =
9.50
potrei semplificare ancora?
Grazie
Massimo

 potrei semplificare ancora?
    Dim a As Integer
    Dim b As Integer
    If CATEGORIA = "A" Then a = 1
    If CATEGORIA = "B" Then b = 1
    If TIPO = "A" Then TARIFFA = 10.33 * a + 9.5 * b
    If TIPO = "B" Then TARIFFA = 20.66 * a + 5.9 * b
    Debug.Print TARIFFA
-oppure-
    Select Case TIPO
    Case "A":
        Select Case CATEGORIA
        Case "A":  TARIFFA = 10.33
        Case Else: TARIFFA = 9.5
        End Select
    Case "B":
        Select Case CATEGORIA
        Case "A":  TARIFFA = 20.66
        Case Else: TARIFFA = 5.9
        End Select
    End Select
    Debug.Print TARIFFA
-oppure-
    (Il migliore?...)
    Select Case TIPO
    Case "A": If CATEGORIA = "A" Then TARIFFA = 10.33 Else TARIFFA = 9.5
    Case "B": If CATEGORIA = "A" Then TARIFFA = 20.66 Else TARIFFA = 5.9
    End Select
    Debug.Print TARIFFA
-oppure-
    (o meglio questo, perche' ha la riga piu' corta?)
    Dim a As Integer
    Dim b As Integer
    If CATEGORIA = "A" Then a = 1
    If CATEGORIA = "B" Then b = 1
    Select Case TIPO
    Case "A": TARIFFA = 10.33 * a + 9.5 * b
    Case "B": TARIFFA = 20.66 * a + 5.9 * b
    End Select
    Debug.Print TARIFFA
-oppure-
    (Questa e' la piu' compatta, ma probabilmente non e' applicabile,
perche' immagino che i tuoi tipi "A", "B", ecc. sono forse solo a titolo
esemplificativo e gli articoli sono piu' delle lettere dell'alfabeto...)
    ReDim TIPI(Asc("A") To Asc("Z"), Asc("A") To Asc("B")) As Single
    TIPI(Asc("A"), Asc("A")) = 10.33
    TIPI(Asc("A"), Asc("B")) = 9.5
    TIPI(Asc("B"), Asc("A")) = 20.66
    TIPI(Asc("B"), Asc("B")) = 5.9
    TARIFFA = TIPI(Asc(TIPO), Asc(CATEGORIA))
    Debug.Print TARIFFA
    Pero' penso sarebbe meglio creare una adeguata tabella delle tariffe. Le
cose cambiano, e non c'e' forse nulla di piu' variabile di un prezzo, nel
tempo. Col sistema che usi sei costretto a por mano al codice ad ogni
variazione. Col risultato che, se per caso sono due o piu' i punti nel
codice in cui hai scritto il prezzo, rischi di dimenticarne qualcuno. Senza
contare la possibilita' di introdurre nuovi errori. Basta uno squillo del
telefono, a volte.
    Con una tabella tariffe potresti cavartela con un:
    fTariffa _
      = DLookUp( _
            "[Tariffa]" _
          , "tabTariffe" _
          , "[Tipo] = '" & sTipo & "'" _
          & " AND " _
          & "[Categoria] = '" & sCategoria & "'")
--
Ciao.
Maurizio
--------
?SPQR(C)
 X
--------

> "Massimo" [...]:

    Continuo qui il discorso dell'altro mio post (l'hai visto?) perche' dopo
scaricato la mia replica mi sono accorto di una cosa che m'era sfuggita: la
questione casella combinata. Se ho ben capito inserisci un elenco valori
come origine riga. Probabilmente qualcosa tipo:
        "Articolo1";"Articolo2"; ...
    Perche' allora non inserire invece:
        "Articolo1";10,33;9,50;"Articolo2";20,66;5,9; ...
di modo che, senza quasi scrivere una riga di codice, per mezzo della:
        Property Column(Index As Long, [Row])
            sola lettura
            Membro di Access.ComboBox
otterresti il risultato che vuoi.
    Comunque continuo a ritenere opportuna la creazione di una tabella
tariffe...


   fTariffa _  = DLookUp( _ "[Tariffa]" _ , "tabTariffe" _ , "[Tipo] = '" &
sTipo & "'" _  & " AND " _  & "[Categoria] = '" & sCategoria & "'")
come si legono le "TARIFFE" in base alla "CATEGORIA" ed il "TIPO" ?
Grazie
Massimo

 ed ognuno avrą il suo identifiativo e dopo?
    Dopo agganci la casella combinata alla tabella tramite una query... e
usi la proprieta' column per leggere la tariffa relativa alla categoria a o
b. Ma ne riparliamo dopo che hai spulciato la guida.



Sull'Help in linea ho trovato questo:
"Č possibile utilizzare la proprietą Column per assegnare il contenuto di
una casella combinata o di una casella di riepilogo a un altro controllo,
quale una casella di testo. Per impostare, ad esempio, la proprietą
ControlSource di una casella di testo al valore presente nella seconda
colonna di una casella di riepilogo, č possibile utilizzare la seguente
espressione:
=Forms!Customers!CompanyName.Column(1)"
arrivo a capire che su una casella di testo ci posso inserire il valore di
una colonna e di un rigo corrispondente di una tabella, valori che dovrei
pescare tramite le caselle di testo presenti sulla maschera "CATEGORIA" e
"TIPO" (poi per passare alla pratica....),ma perchč dovrei agganciare la
casella combinataad una query? Cosa intendi?Nel frattempo volevo continuare
con il codice che avevo impostato in precedenza, cioč:If TIPO = "1" Then:If
CATEGORIA  = "A" Then TARIFFA = 10.33 Else TARIFFA = 9.50If TIPO = "2"
Then:If CATEGORIA  = "A" Then TARIFFA = 5.13 Else TARIFFA = 4.50If TIPO =
"3" Then:If CATEGORIA  = "A" Then TARIFFA = 8.17 Else TARIFFA = 6.50 ma non
va indicandomi sempre l'ultimo prezzo, c'č qualche errore nel
codice?GrazieMassimo

 arrivo a capire che su una casella di testo
    No! Non stiamo parlando di una Casella di testo (TextBox) ma di una
Casella combinata (ComboBox).
    Prima che andiamo avanti coi discorsi, ese'rcitati con la ComboBox su
una nuova maschera di test e prova a vedere cosa ottieni associando la
ComboBox alla tabella TARIFFE. Prova le varie combinazioni possibili delle
proprieta' riguardanti le colonne, dacci dentro di brutto con la guida, e
chiedi aiuto se serve.


 Maurizio
Ciao
La casella di testo era dove la casella combinata andava a salvare il dato
richiesto.
Cmq ho creato una tabella TIPO dove sono elencate le varie tipologie ed i
prezzi in base alla categoria di appartenenza, cioč
ID TIPO, TIPO, IMPORTOA, IMPORTOB.
Con questa tabella creo la casella combinata in cui "ORIGINE CONTROLLO" č
impostata la casella di testo "TARIFFE" e come "ORIGINE DI RIGA" SELECT
TIPO.IDTIPO, TIPO.TIPO, TIPO.IMPORTOA, TIPO.IMPORTOB FROM TIPO;
adesso giostrando con la "COLONNA ASSOCIATA" quando seleziono l'articolo
sulla casella di testo "TARIFFE" viene inserito il prezzo richiesto. Come
posso condizionare il tutto in base alla "CATEGORIA" ho provato ad inserire
qualche codice sulla "COLONNA ASSOCIATA", ma ricevo errore e l'Help in linea
non mi č stato d'aiuto.
Grazie
Massimo

 linea non mi č stato d'aiuto.
    Guarda, ti illustro brevemente come opererei a questo punto.
    Premessa: evita di scrivere tutto maiuscolo. So che e' comodo ma, a
parte problemi di leggibilita' e di affaticamento della vista, ti privi
della possibilita' di scrivere nomi composti che siano anche intelligibili.
    La tabella:
        tabTariffe
            id         (ma anche: Id, ID, IdTariffe, IDTariffe)
            tTipo      (Perche' il campo e' di tipo: Testo)
            nsImportoA (idem: Numerico precisione semplice)
            nsImportoB (idem)
    La query:
(Attenzione! L'ordine in cui scrivi i campi dipende dall'ordine in cui vuoi
visualizzare le colonne del controllo)
        orTariffe:
        SELECT
            [tabTariffe].[tTipo]
          , [tabTariffe].[nsImportoA]
          , [tabTariffe].[nsImportoB]
        FROM
            tabTariffe
        ORDER BY
            [tabTariffe].[tTipo]
        ;
    Il controllo Casella combinata:
        ccTariffe
            Origine controllo: <Non associato>
            Tipo origine riga: Tabella/Query
            Origine riga: orTariffe
            Numero colonne: 3
            Larghezza colonne: ;0;0 (Solo la 1a col. sara' visibile)
-oppure-
            Larghezza colonne: <Vuota> (Tutte le col. visibili)
            Colonna associata: 0
    Ipotizzando che il valore della categoria sia nella Casella di testo di
nome cdtCategoria e che il valore della tariffa selezionato tu voglia averlo
nella Casella di testo di nome cdtImporto, scriverai:
        Private Sub ccTariffe_Click()
            With Me.ccTariffe
                If (Me.cdtCategoria.Value = "A") Then
                    Me.cdtImporto.Value = .Column(1, .ListIndex)
                Else
                    Me.cdtImporto.Value = .Column(2, .ListIndex)
                End If
            End With
        End Sub
(Oppure:
    .ListIndex + 1
fai delle prove perche' in questo momento mi sfugge se viene contata la riga
dei titoli o no.)


 --------
che tu prima TI vada ????
(        ovviamente ;-]         )
Lo faccio o non lo faccio? Lo faccio o non lo faccio? Lo faccio o non lo
faccio? Lo faccio o non lo faccio?
Ooops!

 Ooops!
    Ti s'e' rotto il tergicristallo?
--
Ciao :-)


 ha scritto nel messaggio
news:ake139$1h5bog$1...@ID-52090.news.dfncis.de...

ROTFL
e ri:-))))))))))))
Sei uno spasso, ho le lacrime agli occhi!
Mandi Rob.