Compilazione automatica campo testo

di il
14 risposte

Compilazione automatica campo testo

Salve, ho una tabella impegnativa_esami_ematochimici con relativa maschera con campi ID_esame (campo contatore), ID_paziente (campo lookup da tabella collegata pazienti), data_esame (campo_data), e poi una serie di esami da richiedere es: glicemia (casella di controllo SI/NO), azotemia (casella controllo SI/NO), Colesterolo (casella controllo SI/NO),ecc, e Codici_esami_complessivi (campo testo); il laboratorio analisi, a cui invio le impegnative, mi chiede di compilare quest'ultimo campo inserendovi il riepilogo di tutti i codici degli esami richiesti. Glicemia (001), azotemia (002), Colesterolo (003), ecc. Come faccio a compilarlo senza scriverne i codici manualmente? (es: se sulla maschera sono fleggate le caselle di controllo glicemia e colesterolo in automatoco desidero la compilazione del campo codici_complessivi con 001-003; spero di essere stato esaustivo e ringrazio anticipatamente chi volesse darmi un l'aiuto... Cordialmente!

14 Risposte

  • Re: Compilazione automatica campo testo

    Io non sono affatto d'accordo con una gestione tabelle/campi fatta così. Mi spiego meglio.
    1)

    Blueyes ha scritto:


    e poi una serie di esami da richiedere es: glicemia (casella di controllo SI/NO), azotemia (casella controllo SI/NO), Colesterolo (casella controllo SI/NO),ecc
    Io farei la relazione uno-a-molti.

    2)

    Blueyes ha scritto:


    Codici_esami_complessivi (campo testo); il laboratorio analisi, a cui invio le impegnative, mi chiede di compilare quest'ultimo campo inserendovi il riepilogo di tutti i codici degli esami richiesti
    Idem.

    Blueyes ha scritto:


    ho una tabella impegnativa_esami_ematochimici
    Io ripartirei da qui. Potresti descrivere passo passo cosa succede nel tuo ambito professionale per giustificare questa e/o eventuali altre tabelle? Mi serve solo un esempio esplicativo per non addetti ai lavori.
  • Re: Compilazione automatica campo testo

    Grazie Osvaldo per il consiglio,
    in realtà la mia scelta di inserire tutto in un'unica tabella era stata dettata dalla necessità di raggiungere il risultato in fretta....e quest'ultima è cattiva consigliera!!!!..... seguirò il consiglio (1 impegnativa-molti esami) e vi farò sapere....intanto veramente GRAZIE!
  • Re: Compilazione automatica campo testo

    Un database va strutturato su più tabelle secondo varie regole di normalizzazione.
    Il fatto che tu vuoi vedere "tutto insieme" si può fare, ma non attraverso le tabelle, bensì sfruttando le query di selezione.
  • Re: Compilazione automatica campo testo

    Provo a spiegare passo passo cosa succede in pratica (e mi scuso per la lungagine):
    devo produrre una impegnativa (richiesta) per il laboratorio analisi per ogni dipendente sottoposto a prelievo del sangue; tale è costituita da un format A4 predisposto dal laboratorio e non modificabile!(rappresentato da un elenco di esami con relativo codice esame al cui fianco è posta una casella di controllo che deve essere flaggata nel caso di esame richiesto [X] altrimenti da lasciare in bianco [ ] (trattasi di format pensato per la compilazione "a penna"). Inoltre devo inviare un file di excel contenente il riepilogo solo dei codici degli esami richiesti.
    Il mio piccolo data base è stato ideato con le segenti tabelle: tbl_dipendenti (ID_dipendente [contatore], cognome [testo], nome [testo], data_nascita [data] ecc.) e tbl_impegnative (ID_impegnativa [contatore], data_impegnativa [data], ID_dipendente [lookup da tbl_dipendenti], glicemia [casella di controllo], azotemia [casella di controllo] ecc. (ossia serie di esami del sangue tutti con casella di controllo) ed inoltre un campo riepilogo codici esami [testo] . La compilazione della tabella impegnative avviene tramite maschera associata (le caselle di controllo mi permettono di essere veloce nello scegliere gli esami da richiedere (mediante "flag"), mentre il campo riepilogo codici viene compilato inserendo manualmente i codici di ogni esame richiesto); la stampa dell'impegnativa è ralizzata mediante un report di stampa basato su una query di selezione. Cambiare il progetto inserendovi la relazione 1 a molti tra la tbl_impegnative ed una tbl_elenco_esami (da costituire) se da un lato è corretto come principio e mi risolve certamente il problema dei codici complessivi, dall'altro mi vincola con il format di stampa impegnativa che non potrà essere quello previsto dal laboratorio (nell'impegnativa mi comparirebbero solo gli esami richiesti); pertanto volendo lasciare questo errore tecnico voluto come posso fare affinche il campo codici complessivi sia aggiornato mediante l'inserimento automatico del codice per ogni casella di controllo "flaggata"? si potrebbe far ricorso al codice VBA? GRAZIE!! anticipatamente
  • Re: Compilazione automatica campo testo

    Io proverei a pensare
    1. una query di selezione dove importi le tabelle che ti interessano (soprattutto Impegnative) e trascini nella griglia sicuramente tutti i campi Sì/No (Glicemia, Azotemia, Colesterolo...)
    2. In una nuova colonna della griglia (in fondo a destra) scrivi in alto la seguente espressione:
    CodiciEsami: IIf([Glicemia]=True;"001";"") & IIf([Azotemia]=True;" 002";"") & IIf([Colesterolo]=True;" 003";"") & ecc....
    ovviamente metti la spunta su Mostra
    3. Salva la query con nome Query1
    4. Poi non ho capito se vuoi far poggiare un report su Query1 oppure vuoi usare la stampa unione...per quest'ultima ipotesi però non sono in grado di aiutarti

    L'unico dubbio che ho su quella espressione è che non so quale potrebbe essere il risultato finale considerando che fra un Codice e un altro vorresti vedere UN SOLO SPAZIO...non so cosa ne viene fuori...ma, a grandi linee...ci siamo.
  • Re: Compilazione automatica campo testo

    GRAZIE!! di cuore!!! infatti funziona!!! ho solo apportato una modifica per non far comparire nel campo tutti i codici attaccati l'un l'altro (001002003) ho inserito "-" prima del codice... veramente grazie ancora!Cordialmente
  • Re: Compilazione automatica campo testo

    OPS!!! ulteriore problema il campo aggiunto alla query con l'espressione sopra indicata ha un limite !!!! io devo inserire 60 espressioni (IIF) e mi blocca alla 30^........che posso fare??? avrebbe funzionato perfettamente....Cavolo!!!
  • Re: Compilazione automatica campo testo

    Aggiungo alla query un altro campo calcolato suddividendo i codici per categorie ed unisco il tutto con una query della query...vedremo!
  • Re: Compilazione automatica campo testo

    Forse l'ideale sarebbe mettere mano al VBA. Però io ci metterei la seguente "pezza a colori":
    1. In una prima colonna CodiciEsami1 scrivi la concatenazione dei primi 30
    2. In una seconda colonna CodiciEsami2 scrivi la concatenazione dei secondi 30
    3. In una terza colonna scrivi:
    CodiciEsamiTutti: [CodiciEsami1] & [CodiciEsami2]

    Prova...non sono sicuro che funzioni.
  • Re: Compilazione automatica campo testo

    Blueyes ha scritto:


    ...pertanto volendo lasciare questo errore tecnico voluto come posso fare affinche il campo codici complessivi sia aggiornato mediante l'inserimento automatico del codice per ogni casella di controllo "flaggata"? si potrebbe far ricorso al codice VBA? GRAZIE!! anticipatamente
    Osvaldo ti ha già invitato a riflettere sulla struttura del tuo db e tu, consapevolmente, hai deciso di lasciarlo inalterato. Questa premessa serviva per dire che la soluzione proposta è costruita ad hoc per questa situazione.
    Potresti eseguire un ciclo su tutti i controlli della maschera, discriminando poi l'esecuzione del codice per la costruzione della stringa che contiene la serie di esami richiesti in base al tipo di controllo (casella di controllo) se non ci sono altre caselle di controllo "sì/no" nella maschera e/o in base al nome.
    Una cosa del tipo
    Dim ctl As Access.Control
    Dim strEsami as String
    For Each ctl in Me.Controls Then
    	If ctl.ControlType=Access.AcControlType.acCheckBox then
    		'codice costruzione stringa
    	End If
    Next
    Se invece vuoi discriminare in base al nome (che ovviamente dovrai aver impostato appositamente, esempio chkEsame001, chkEsame002 e via dicendo) la riga con l'If potrebbe diventare
    If Left$(ctl.Name, 8)="chkEsame" then
    Ora si passa al codice dentro l'If per costruire la stringa che contiene gli esami selezionati. Da qualche parte devi aver associato ad ogni controllo checkbox il codice esame. Potresti avero fatto nel nome, come dicevo prima: chkEsame001, chkEsame002, ... chkEsame999 ed in questo caso andrai a prendere gli ultimi tre caratteri del nome del controllo con la funzione Right$, oppure aver inseriri il solo codice esame, ad esempio, nella proprietà Tag del controllo ed in questo caso sarà sufficente prendere la proprietà Tag così com'è.
    Questa è la parte del codice da inserire dentro la If
    strEsami = strEsami & Right$(ctl.Name, 3) & "-"
    oppure
    strEsami = strEsami & ctl.Tag & "-"
    alla fine del ciclo trovi una stringa su questo modello
    "001-002-005-006-...-095-"
    e devi togliere l'ultimo carattere, il segno di separazione di troppo.
    strEsami = Left$(strEsami, Len(strEsami)-1)
    Per prudenza sarebbe meglio imporre la verifica della lunghezza della stringa, per evitare di togliere l'ultimo carattere ad una stringa vuota (improbabile, significherebbe non aver selezionato alcun esame, cioè la richiesta di un NON esame)
    If Len(strEsami) <> 0 Then
    	strEsami = Left$(strEsami, Len(strEsami)-1)
    End If
    
    Ricapitolando
    Dim ctl As Access.Control
    Dim strEsami as String
    For Each ctl in Me.Controls Then
    	If ctl.ControlType=Access.AcControlType.acCheckBox then
    		strEsami = strEsami & Right$(ctl.Name, 3) & "-"
    	End If
    Next
    If Len(strEsami) <> 0 Then
    	strEsami = Left$(strEsami, Len(strEsami)-1)
    End If
    Me!txtEsami.Value = strEsami
    L'evento nel quale inserire questo codice potrebbe essere BeforeUpdate della maschera. Su quest'ultimo aspetto non posso darti garanzie (in teoria nemmeno su quanto scritto prima, sono andato a "memoria" ma è abbastanza affidabile). Se non funziona devi inserirlo in AfterUpdate, ricordandoti di riportare il bookmark della recordset della maschera all'ultimo record Inserito/Modificato con
    Dim rst As DAO.Recordset
    Set rst = Me.RecordsetClone
    Me.Bookmark = rst.LastModified
    avendo l'accortezza di abilitare la modifica del Recordset della maschera prima di assegnare il valore a txtEsami (tutto quello che segue sostituisce "Me!txtEsami.Value = strEsami")
    Set rst = Me.Recordset
    rst.Edit
    rst!nomecampoesami.Value = strEsami
    rst.Update
    rst.Close
    Set rst = Nothing
    In questo thread trovi uno dei tanti esempi scritti da @Alex per le operazioni che usano il ciclo sui controlli di una maschera
    **
  • Re: Compilazione automatica campo testo

    Grazie ......siete veramente BRAVI!! si dimostra che in access non esiste un unica soluzione ad un problema!! è solo necessario trovare quella più efficace. Grazie ancora per la vostra grande disponibilità!
  • Re: Compilazione automatica campo testo

    Anzi.... per la precisione è necessario trovare la soluzione la più efficiente (efficaci sono tutte)!
  • Re: Compilazione automatica campo testo

    Chiedo ancora scusa se approfitto della vostra competenza: ho una tabella dipendenti:(ID_dipendente, cognome, nome, ecc), una tabella elenco_rischi: (ID_rischio, tipo_rischio), ed una tabella di appoggio rischi_dipendenti: ID_dipendente (lookup da tabella dipendenti), ID_rischio (lookup da elenco_rischi) quantità_rischio (testo dove inserire il valore del rischio ES: 85 Decibel per rischio rumore); Se in una query volessi inserire un campo calcolato in cui raggruppare in un unico campo tutti i rischi per ciascun dipendente come debbo fare?? grazie anticipatamente
  • Re: Compilazione automatica campo testo

    Blueyes ha scritto:


    ...Se in una query volessi inserire un campo calcolato in cui raggruppare in un unico campo tutti i rischi per ciascun dipendente come debbo fare??...
    Accodare questa richiesta al thread forse non è proprio la scelta più azzeccata. Comunque credo che questa funzione possa esserti utile:
Devi accedere o registrarti per scrivere nel forum
14 risposte