Routine di access

di il
4 risposte

Routine di access

Salve,
nella form ho una combo con la quale, scelto un valore, ad esso si abbina un determinato valore che viene caricato sulla combo adiacente ad essa.
Siccome devo ripetere la procedura con altre combo, vorrei non dover ripetere le stesse routine più volte ma trovare un metodo per risparmiare righe di comando.
A titolo di esempio allego il contenuto di una routine:
Private Sub CasellaCombinata240_Click()
 If CasellaCombinata240.Value = "A" Then
CasellaCombinata231 = "1"
Exit Sub
End If
If CasellaCombinata240.Value = "B" Then
CasellaCombinata231 = "2"
Exit Sub
End If
If CasellaCombinata240.Value = "C" Then
CasellaCombinata231 = "3"
Exit Sub
End if
End sub
Private Sub CasellaCombinata241_Click()
If CasellaCombinata240.Value = "D" Then
CasellaCombinata232 = "4"
Exit Sub
End If
If CasellaCombinata240.Value = "E" Then
CasellaCombinata232 = "5"
Exit Sub
End If
If CasellaCombinata240.Value = "F" Then
CasellaCombinata232 = "6"
Exit Sub
End if
End sub
ecc.ecc.
Come posso fare?
Grazie

4 Risposte

  • Re: Routine di access

    Sarà mai possibile che queste N combo abbiano tutte la stessa gestione...?
    Se così fosse, perchè non hai semplicemente fatto uso di una Tabella con 2 Campi...
    il primo Numerico ed il 2° Alfabetico le lettere che dici...

    Otterrai questo:
    
    Numero      Lettera
       1           A
       2           B
       3           C
       4           D
       5           E
       6           F
    Ora impostando come Origine Riga la Tabella in questione...

    Ora impostando come Colonna Associata la 1°, impostando come Numero Colonne=2 e la loro Larghezza in modo tale da rendere visibile solo la 2° quindi Larghezza=0cm;2cm
    otterrai che la visualizzazione è vincolata alle lettere mentre leggendo il valore del controllo, essendo associato alla Colonna 1 restituirà il valore relativo.

    Il sistema diventa CODE FREE.

    Se proprio non ne vuoi fare a meno... suggerisco questo
    
    ValoreFinale=ASC(Me!NomeCombo)- 64
    Ti basta fare una Funzione che passando la combo come riferimento applichi quella funzione
    e restiutisca il valore corrispondente.
    
    Function GetNumFromLetter(ctl As String) As Integer
         GetNumFromLetter=ASC(Me!NomeCombo)- 64
    End Function
  • Re: Routine di access

    Grazie per la risposta.
    La prima suggerita da Alex mi costringe a creare una relazione tra le due tabelle (cosa non opportuna per il mio DB) e la seconda non l'ho capita molto.
    Mi ha dato tuttavia l'opportunità di porre l'attenzione sulla funzione GET.
    Per cui ho creato una public function (Public Function get( )(ByVal s( ) As Variant) As String) che ho richiamato nell'origine riga delle text( non associate) adiacenti alle rispettive combox (=get( ) ([........].[.....]).
    Il tutto funzione e in tal modo ho eliminato le routine impostate precedentemente.

    Silene
  • Re: Routine di access

    silene ha scritto:


    Grazie per la risposta.
    La prima suggerita da Alex mi costringe a creare una relazione tra le due tabelle (cosa non opportuna per il mio DB)
    Sbagliato, la cosa è opportuna perchè strutturalmente corretta, le altre soluzioni sono poco opportune...

    silene ha scritto:


    e la seconda non l'ho capita molto.
    Mi ha dato tuttavia l'opportunità di porre l'attenzione sulla funzione GET.
    Puoi darci qualche informazione anche a noi della funzione GET... da 20 anni che sviluppo
    io nel mio pacchetto non l'ho mai sentita.
    Intendevi forse la funzione che ti ho scritto [GetNumFromLetter(...)]...?
    Fai attenzione...

    silene ha scritto:


    Per cui ho creato una public function (Public Function get( )(ByVal s( ) As Variant) As String) che ho richiamato nell'origine riga delle text( non associate) adiacenti alle rispettive combox (=get( ) ([........].[.....]).
    Il tutto funzione e in tal modo ho eliminato le routine impostate precedentemente.
    Silene
    Secondo me hai le idee molto confuse.
    In prima battuta la parola GET è una parola RISERVATA dal VBA in quanto è un metodo del VBA usato per Accedere a Proprietà di Classi.
    Il rischio pertanto, non avendo il VBA nè Override nè Overload dei metodi, è quello di avere grossi problemi alla prima implementazione di una classe.
    Non commento la sintassi in quanto come l'hai scritta NON PUO' FUNZIONARE... ma vedi poi tu...
  • Re: Routine di access

    Può essere che le idee siano...confuse ma se tutto funziona non vedo dove sta il problema.
    Comunque cerco di spiegare quello che ho fatto usando la funzione GET.
    Situazione iniziale: voti espressi con numero vengono similmente stampati nel report associato.
    Complicazione: necessità di trasformare nel report i voti numerici in voti letterali.
    Azioni: costruzione della funzione di traduzione globale per intervenire solo sui report
    Public Function getvoti(ByVal svoti As Variant) As String
    Select Case svoti
    Case "4"
    getvoti="QUATTRO/decimi"
    Case "5"
    getvoti = "CINQUE/decimi"
    Case "6"
    getvoti = "SEI/decimi"
    Case "7"
    getvoti = "SETTE/decimi"
    Case "8"
    getvoti = "OTTO/decimi"
    Case "9"
    getvoti = "NOVE/decimi"
    Case "10"
    getvoti = "DIECI/decimi"
    Case "10 e Lode"
    getvoti = "DIECI e Lode"
    Case ""
    getvoti = ""
    Case Null
    getvoti = ""
    End Select
    End Function
    La funzione getvoto sul modulo globale riceve il voto numerico e lo traduce in letterale.
    Nel report, inserimento di altrettante txt sovrapposte alle precedenti(rese non visibili) con all'origine record:
    =getvoti([testo29].[Value])
    =getvoti([testo30].[Value])
    ecc. ecc.
    Spero di esser stato chiaro
    Buona serata
    Silene
Devi accedere o registrarti per scrivere nel forum
4 risposte