+ Rispondi al Thread
Pagina 1 di 2 12 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: Ricerca di campo nullo o campo SI/NO

  1. #1
    Jocman non è in linea Scolaretto
    Post
    202

    Ricerca di campo nullo o campo SI/NO

    Ciao a tutti e auguri (di buone fine feste, a questo punto)
    Mi sto impelagando in quella che forse è una stupidaggine....

    Ho bisogno di aprire un recordset e trovare alcuni record (e muovermi poi tra i vari record che soddisfano quel criterio).

    Valutavo due possibilità:
    - .findfirst e impostare se il campo X è vuoto
    - .findfirts e cercare un campo SI/NO con valore NO

    Non riesco a impostare l'istruzione per nessuno dei due casi.

    In effetti se riuscissi a impostargli l'istruzione per il campo vuoto potrei tranquillamente eliminare dalla struttura della tabella il campo SI/NO....

    Suggerimenti?

    Andrea

  2. #2
    Phil_cattivocarattere non è in linea Scribacchino
    Luogo
    Verona-Mantova
    Post
    1,426
    Quote Originariamente inviato da Jocman Visualizza il messaggio
    ...
    In effetti se riuscissi a impostargli l'istruzione per il campo vuoto potrei tranquillamente eliminare dalla struttura della tabella il campo SI/NO....
    Non ho capito molto bene, perché mi sembra che la soluzione sia fin troppo facile, quindi temo di aver frainteso.
    Apri il recordset con una
    codice:
    SELECT ... FROM ... WHERE CAMPO = ''
    Occhio: nel titolo del thread parli di campo nullo, nella spiegazione poi dici che è vuoto. Sono due cose diverse. Si può verificare anche il Null
    codice:
    SELECT ... FROM ... WHERE CAMPO Is Null
    Ultima modifica di Phil_cattivocarattere; 07-01-2017 15:07 

  3. #3
    L'avatar di monello
    monello non è in linea Scribacchino
    Luogo
    Roma
    Post
    1,166
    In effetti se riuscissi a impostargli l'istruzione per il campo vuoto potrei tranquillamente eliminare dalla struttura della tabella il campo SI/NO....
    il campo SI/NO farà qualcosa ...

    il campo VUOTO pure ... ma ...

    di sicuro se hai impostato un campo BOOLEANO è perchè avevi bisogno di un determinato VALORE e non di un CAMPO VUOTO ...

    Per il resto vale la risposta di Phil ...

  4. #4
    Jocman non è in linea Scolaretto
    Post
    202
    Quote Originariamente inviato da monello Visualizza il messaggio
    il campo SI/NO farà qualcosa ...

    il campo VUOTO pure ... ma ...

    di sicuro se hai impostato un campo BOOLEANO è perchè avevi bisogno di un determinato VALORE e non di un CAMPO VUOTO ...

    Per il resto vale la risposta di Phil ...
    Grazie per i suggerimenti.
    In effetti mi riferivo ad un campo di testo vuoto.

    Il fatto è che quando viene creato un record, esiste un campo di testo dove, successivamente, andrei a inserire una nota.
    Inizialmente avevo pensato di mettere il campo SI/NO che di default è NO, nel momento in cui inserisco la nota assume valore SI.
    Semplificando la struttura della tabella a soli 3 campi (sono di più in realtà), il DB dovrebbe fare un controllo di questo tipo: Campo A: ID Campo B: SI/NO Campo C: Nota
    Cerca il primo record dove B è NO e prendi nota di A, quindi cerca il record successivo che soddisfa la stessa condizione. Ad ogni record confronta A con il valore trovato precedentemente. Se è uguale vai avanti, se è differente blocca tutto e avvisa.
    Per fare questo accedo ai record mediante VBA e non usando una query.
    Alla fine (se non ci sono intoppi, cioè se i valori A sono sempre uguali) mi chiede cosa inserire nel campo C di ognuno di quei record.

    Analogamente avevo pensato di effettuare la ricerca sfruttando il fatto che C è vuoto in origine (se è pieno vuol dire che il record è a posto) ed eliminando così il campo SI/NO.

    I problemi erano che sia in un caso che in un altro non mi ritrovava i files (più che altro sicuramente sbaglio a impostare l'istruzione di ricerca).

    Nel we ci ho pensato un attimo, e stamattina velocemente ho provato una alternativa: nel momento in cui creo il record assegno a C un valore qualunque (ad es. "vuoto") e poi effettuo la ricerca sfruttando come chiave il termine "vuoto".

    Sembra funzionare (almeno per i miei scopi) anche se non mi pare una soluzione.....intelligente.

    Andrea

  5. #5
    Phil_cattivocarattere non è in linea Scribacchino
    Luogo
    Verona-Mantova
    Post
    1,426
    C'ho capito poco. Nonostante la conclusione,
    Quote Originariamente inviato da Jocman Visualizza il messaggio
    Sembra funzionare (almeno per i miei scopi)
    ti invito a riflettere sulla struttura del tuo db, non tanto per il fatto che la soluzione non sia intelligente (uso le tue parole, non ho elementi per valutare l'intea procedura) quanto perché sembra che sia "fatto male" all'origine. Sicuramente a noi mancano alcuni elementi che tu invece hai sott'occhio (ad un certo punto parli di files che non vengono ritrovati... quali files?) ma questa
    Quote Originariamente inviato da Jocman Visualizza il messaggio
    Alla fine (se non ci sono intoppi, cioè se i valori A sono sempre uguali) mi chiede cosa inserire nel campo C di ognuno di quei record.
    suona come una mancata normalizzazione.

    Comunque a grandi linee: è inutile mettere nella tabella un campo booleano Sì/No se serve solo a dire se sono presenti note in un altro campo della stessa tabella e fin qui ci sei arrivato anche tu.

  6. #6
    L'avatar di monello
    monello non è in linea Scribacchino
    Luogo
    Roma
    Post
    1,166
    Bè ... io preferivo la prima soluzione ...

    Se devi affidare la ricerca ad un valore casuale allora fermati e non andare avanti col tuo DB ... nel momento che vorrai cercare "certezze" non potrai farlo non trovi ?

    Parliamo di struttura LOGICA di un DB ...

    campo A = ID

    campo B = nota (se vuota oppure Null = "" or Null)

    campo C = se campo B IsNotNull allora metti 1 altrimenti 0

    Vedi queste sintassi di esempio :

    Contiene valori Null (o mancanti)


    Is Null


    Restituisce i record che non contengono alcun valore nel campo.

    Non contengono valori Null


    Is Not Null


    Restituisce i record in cui è presente un valore nel campo.

    Contengono stringhe di lunghezza zero


    "" (coppia di virgolette)


    Restituisce i record in cui il campo è impostato su un valore vuoto diverso da Null. Ad esempio, i record relativi alle vendite realizzate per un altro reparto potrebbero contenere un valore vuoto nel campo Paese.

    Non contengono stringhe di lunghezza zero


    NOT ""


    Restituisce i record in cui il campo Paese contiene un valore non vuoto.

    Contengono valori Null o stringhe di lunghezza zero


    "" Or Is Null


    Restituisce i record in cui il campo non contiene valori o è impostato su un valore vuoto.

    Non sono vuoti


    Is Not Null And Not ""


    Restituisce i record in cui il campo Paese contiene un valore non vuoto e diverso da Null.
    Questo è il link : https://support.office.com/it-it/art...3-aba746fb29d8

    Adesso struttura la tua ricerca basandoti su questi suggerimenti e poi facci sapere ok ?

  7. #7
    L'avatar di @Alex
    @Alex non è in linea Very Important Person
    Post
    14,953
    Il campo Si/No mi pare sia solo un calcolo del campo Note... se.cosi è non serve.
    Io di solito non cerco i campi NULLI in quanto è nullo solo se è NUOVO o VERGINE... ma se si cancella un contenuto diventa vuoto che non è NULL.
    Quindi cerco:
    codice:
    LEN (NomeCampo + '')=0
    Oppure da vba
    LEN (NomeCampo & vbNullString)=0
    Si basa sulla conversione di tipo... da NullVariant a NullString che è leggibile da LEN(..)
    @Alex
    Il CROSSPOST è VIETATO
    Mirror al vecchio sito WEB(salvare i Demo riassegnando l'estensione (.Zip/.Rar/.Exe in base all'icona...):
    http://mirror.masterdrive.it/alessandrobaraldi/
    Leggi il
    Regolamento del Forum e nel comprenderne la filosofia rispettalo.

  8. #8
    Jocman non è in linea Scolaretto
    Post
    202
    Riguardo la normalizzazione:
    Il db è (mi auguro) decentemente normalizzato.
    La tabella in cui effettuo la ricerca (a proposito, col termine files mi riferivo ai record in realtà, ho fatto confusione - il fatto è che quel campo note mi registra il percorso di un file) l'ho dovuta creare perché mi hanno richiesto una funzione che non avevo previsto in origine, e non volevo stravolgere tutto (continuo a ritenere che sia inutile, ma questi sono paranoie dei colleghi dell'ufficio).
    Cerco di esemplificare semplificando:
    Tra le altre cose registro delle preparazioni chimiche, di cui poi il DB mi stampa una pagina da inserire in un registro. La ricetta prevede, ad es, 3 componenti (X,Y,Z), e la pagina di registro viene salvata in pdf. Sulla mia tabella originale salvo che il giorno tot ho fatto il preparato Alfa e che la pagina del registro è salvata in quella posizione.
    Adesso mi hanno chiesto di fare in modo che se scelgono uno dei reagenti (X,Y o Z) possano vedere anche una dichiarazione che viene firmata dal tecnico e poi dal responsabile di lab (che poi verrà scansionata e salvata su HD).
    Quindi adesso vado a salvare i dati di ogni singolo reagente su questa nuova tabella (specificando in che preparazione sono stati usati), in cui il campo Note (cioè il percorso della scansione) è il dato che devo inserire in un secondo momento.
    Quindi quando sarà il momento, il DB mi deve effettuare la ricerca in questa tabella, confrontare se i campi vuoti siano riferiti alla stessa preparazione o meno, e inserire in ogni record corrispondente il percorso del file nel campo note.
    Schematicamente: vedi quali record hanno il campo note vuoto e confronta in quali preparazioni (il campo ID) sono stati impiegati; se la preparazione è la stessa, chiedimi il percorso del file e inseriscilo per ognuno di quei record, altrimenti avvisami e ferma la procedura (se ci sono preparazioni diverse senza percorso non va bene, vuol dire che qualcuno ha toppato. In teoria ogni volta il DB mi dovrebbe restituire o "non ci sono record i sospeso" oppure una sola risultanza)
    In definitiva, se adesso qualcuno sceglie Alcol Etilico, vuole sapere in quali preparazioni è stato usato e dove sta la relativa dichiarazione

    Inizialmente per vedere quali record erano senza Note avevo pensato di usare il campo SI/NO per discriminare ma alla fine ho optato per discriminare con il campo vuoto, in quanto è inutile usare SI/NO a questo scopo (come anche Alex mi dice)

    Mi scuso per la lungaggine e se in precedenza ho creato qualche confusione, ma avevo cercato di semplificare quanto più possibile la problematica

    Grazie

    Andrea

  9. #9
    Phil_cattivocarattere non è in linea Scribacchino
    Luogo
    Verona-Mantova
    Post
    1,426
    Quote Originariamente inviato da Jocman Visualizza il messaggio
    ...
    Tra le altre cose registro delle preparazioni chimiche, di cui poi il DB mi stampa una pagina da inserire in un registro
    ....
    In definitiva, se adesso qualcuno sceglie Alcol Etilico, vuole sapere in quali preparazioni è stato usato e dove sta la relativa dichiarazione
    Porta pazienza se torno sulla normalizzazione.
    Se ho capito bene la dichiarazione è relativa alla preparazione, non al singolo reagente. Se è così il path del file deve essere nella tabella delle preparazioni, non ripetuto in corrispondenza di ogni reagente che costituisce il preparato. Come vedi ho inziato le ultime due frasi con il "se", perché non sono sicuro di aver capito correttamente la struttura del tuo db.
    Se ritieni opportuno approfondire, prova a descrivere il contenuto di quella dichiarazione, cioè a quali elementi e di quali tabelle può essere collegato. Non è da escludere la possibilità che "la dichiarazione" sia inserita in una tabella ad hoc (ad esempio se può riguardare più preparati e/o solo alcuni componenti di un preparato).
    Per favore non mi far scrivere che voglio i nomi propri di tabelle e campi, altrimenti porto via "il lavoro" a... strano che non abbia ancora detto la sua!

  10. #10
    Jocman non è in linea Scolaretto
    Post
    202
    Quote Originariamente inviato da Phil_cattivocarattere Visualizza il messaggio
    Porta pazienza se torno sulla normalizzazione.
    Non preoccuparti, qua la pazienza l'avete voi con me.

    Hai ragione quando dici che quella dichiarazione è riferita alla preparazione e non al singolo reagente. In effetti è così.
    Ma la paranoia che si sono fatti è che, un giorno (cioè quasi sicuramente MAI), se qualcuno (che non si è capito chi) volesse fare un controllo (ma quale?), si possa richiamare una sostanza chimica, vedere in quali preparazioni è stata impiegata e risalire alla rispettiva dichiarazione.
    Es: Ma fammi fare un po' gli affaracci dell'etanolo! Ecco qua, usato in 75 preparazioni. Voglio vedere la dichiarazione nella preparazione X

    La dichiarazione in sé riporta solo data, nome del tecnico, tipo di preparazione, reagenti usati, lotti e scadenze. E un po' di testo buttato qua e là per legare il tutto.

    Tant'è che la tabella originale usata fino alla nascita della paranoia riporta solo 4 dati scarni inseriti (progressivo della preparazione, tipo, data e tecnico), perché fino ad oggi non c'era alcuna necessità di registrare ogni singolo componente

    In ogni caso ho preferito costruire una tabella e una maschera ad hoc, in quanto il resto del DB è tutto...concatenato (tabelle correlate, maschere che si richiamano a vicenda etc), e per questa paranoia non mi andava di stravolgere tutto integrandola. anche perché un domani cancello tabella, cancello maschera e amici come prima.

    In ogni caso, dopo aver eliminato quel campo SI/NO, sono riuscito a effettuare le ricerche (e tutto il resto correlato) riferendomi al campo del percorso del file da archiviare.

    Tanto 'sta cosa non verrà mai usata.... Mettiamola così: ho fatto esercizio.

    Andrea

+ Rispondi al Thread
Pagina 1 di 2 12 ultimoultimo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi