Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di nelsonblu
    Registrato dal
    Feb 2007
    Messaggi
    2,234

    Query in access complicata

    Da una tabella A di 1000 record circa, in una query sulla tabella A, ho creato un nuovo campo [status] ottenuto elaborando alcuni campi della tabella A.
    In questo campo [status] ho due valori che si ripetono centinaia di volte per l'esattezza "vivo" e "deceduto".
    Adesso avrei bisogno di filtrare di questa query solo i record che hanno nel campo [status] il valore "vivo".

    Come posso fare? quale strada seguire?

  2. #2
    Moderatore di Javascript L'avatar di ciro78
    Registrato dal
    Sep 2000
    residenza
    Napoli
    Messaggi
    8,514
    puoi fare una query sulla query
    niente di più semplice.

    E li imposti i filtri
    Ciro Marotta - Programmatore JAVA - PHP
    Preferisco un fallimento alle mie condizioni che un successo alle condizioni altrui.


  3. #3
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Ciao Nelson.
    Prova a dare uno sguardo al file che avevo caricato in questa discussione.
    http://forum.html.it/forum/showthrea...ghlight=access

    Il problema era analogo. Spero ti sia utile. Nel caso abbia ulteriori problemi facci sapere.

  4. #4
    Utente di HTML.it L'avatar di nelsonblu
    Registrato dal
    Feb 2007
    Messaggi
    2,234
    @Ciro78
    Ha funzionato, molto più semplice di quel che credevo, grazie
    @nicola75ss
    Ulteriori problemi??.. qui mi sa che mi sono incartato su me stesso con questo canile!!!!
    Di solito la notte uno conta le pecorelle... io da una settimana conto solo cani!!
    Access lo conosco pochissimo e sto imparando, l'unica fortuna è che le espressioni assomigliano a quelle di excel e quindi qualcosa combino.
    Per l'integrazione con il vba sono già scadente in excel figuriamoci in questo ambiente tutto nuovo.

    Problema di stamattina: lo sgambettamento.
    i cani, vivi, non scomparsi, non affidati, non trasferiti come ubicazione, stanno in 45 box. Di cui 15 sanitari e 30 di rifugio permanente. I sanitari sono di due tipi, 10 di isolamento (1 cane per box) e 5 sanitari transitori (fino a 6 mesi di età). Non più di 7 per box. 2-3 box alla volta, a rotazione, fanno lo sgambettamento, cioè vanno in una zona più estesa dove possono correre e giocare, operazione necessaria per lo sviluppo di ossa, pelo, etc etc.. Sono disponibili due di queste zone.
    Dovrei creare una tabella che tiene data di questi sgambettamenti per box e avvertire qual'è il box che non lo fa da piu tempo. E fin qui....
    Variabili
    1) quando un cane viene immesso in un box, succede spessissimo che non è gradito dagli altri cani del box, questo può avvenire subito ma anche dopo molti giorni. Se ciò accade il cane va trasferito in un altro box altrimenti viene ucciso dagli altri cani. Questi spostamenti prima che il box sia "tranquillo" possono essere numerosi. Bisogna tenere a mente chi era il cane o i cani che creavano il problema per evitare di rimetterli insieme in un altro box o fargli fare lo sgambettamento insieme.
    Lo sgambettamento avviene di solito per box e non bisogna far passare più di tot tempo da uno sgambettamento all'altro. Operazione semplice se non si tiene conto dei signoli cani e dei loro trasferimenti tra box. Quindi, rotazione dello sgambettamento per box, ma bisogna tenere presente la data di sgambettamento di ogni singolo cane per evitare che salti il turno del box essendo stato trasferito.
    2) il singolo cane sgambetta o resta immobile?

    Dopo tutti i filtri mi resta come punto di partenza per questo problema una query in cui ho
    ID-CANE-n°BOx-data ultimo sgambettamento.

    Al di là della faccenda tecnica, voi come vi organizzereste come idea?

    Avrei bisogno di una tabella che abbia i box come riga e i cani come colonna.... come consultazione la pivot fà egregiamente il suo dovere ma come maschera di immissione dati e modifiche sono in alto mare

  5. #5
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Ciao nelson. Adesso ti rispondo rapidamente perchè sono in ufficio e mi sto prendendo 5 minuti di sano cazzeggio.

    Ovviamente non posso avere chiara tutta la struttura della banca dati ma a grosse linee mi è sembrato di capire che ti occorra una tabella in cui riporti tutti i box.
    Occorre poi una tabella relativa all'anagrafica dei cani.
    Visto che i cani sono soggetti a spostamenti di box sarà necessario creare un'ulteriore tabella che tenga conto degli spostamenti degli animali. Avrai quindi una relazione 1 a molti tra il singolo cane e i suoi spostamenti.

    Quindi a grandi linee

    tabella box
    id_box
    nome_box

    tabella anagrafe_canina
    id_cane
    codice/nome_came
    ...
    sfilza di tutti i dati

    tabella spostamenti
    id_spostamento
    id_cane
    id_box
    data_inizio
    data_fine

    Qui l'idea è di creare una tabella in cui terrai traccia di tutti gli spostamenti dei cani
    Quindi un cane da una certa data fino ad un'altra sarà in un box, successivamente al suo spostamento inserirai le nuove date e il box di residenza.

    Una volta creata la relazione tra le due tabelle inserirai la tabella degli spostamenti come sottomaschera della tabella anagrafica e ti sarà quindi facile gestire tutti gli spostamenti di ogni singolo animale. Ovviamente questo tutto a grosse linee.

  6. #6
    Moderatore di Javascript L'avatar di ciro78
    Registrato dal
    Sep 2000
    residenza
    Napoli
    Messaggi
    8,514
    Originariamente inviato da nelsonblu
    @Ciro78
    Ha funzionato, molto più semplice di quel che credevo, grazie
    prego
    Ciro Marotta - Programmatore JAVA - PHP
    Preferisco un fallimento alle mie condizioni che un successo alle condizioni altrui.


  7. #7
    Utente di HTML.it L'avatar di nelsonblu
    Registrato dal
    Feb 2007
    Messaggi
    2,234
    In effetti credo che la tua strada sia più o meno quella giusta....
    Ma mi sono fermato già al primo ostacolo, l'immissione del dato del box.
    Come dicevo il punto di partenza è necessariamente una query della query che mi dice i cani
    effettivamente presenti nel canile.
    Mi spiego un poco meglio. Allora in un'altra query tengo traccia come colonne a gruppi di
    tre (ho previsto massimo 10 casi, 3x10 colonne), delle dichiarazioni del proprietario
    riguardo al fatto che il cane è 1)deceduto, affidato, trasferito, etc etc con 2)data e 3)
    nuova residenza del cane.
    Poi per sapere lo stato attuale del cane unisco tutte le colonne della residenza in una
    sola partendo dall'ultima alla prima inserendo una chiocciola per ogni campo. La formula è
    questa:
    unione: (IIf(IsNull([DATA_DECESSO_CANE]);"";" è deceduto@")) & (IIf(IsNull([10°
    _STATUS]);"";[10°_STATUS] & "@")) & (IIf(IsNull([9°_STATUS]);"";[9°_STATUS] & "@"))
    &...........fino a ..... & (IIf(IsNull([1°_STATUS]);"";[1°_STATUS] & "@")) & "@"

    Alla fine ottengo espressioni tipo questa in una singola cella della colonna [UNIONE]:

    S.Mauro Forte, Azienda Deufemia@Matera, Canile Argo, C.da Le Matinelle@Canile di Pisticci, C.da Lavandaio@

    Da questa colonna creo una nuova colonna con la residenza presente nell'ultima dichiarazione del proprietario:

    LAST: IIf([LAST]="è scomparso" Or [LAST]="è deceduto";"";Left([UNIONE];(InStr(1;[unione];"@")-1)))

    in pratica conto quanti caratteri ci sono prima della chiocciola e stacco solo la stringa
    corrispondende fatta di quei caratteri a partire da sinistra meno la chiocciola.
    Chiaramente se è morto o è scomparso come residenza non ci deve scrivere niente.
    E fin qui sembra funzionare bene.
    Con la famosa query della query prendo dalla colonna LAST solo l'ID di quelle righe che
    hanno Canile di Pisticci, C.da Lavandaio.
    Cosi sò SEMPRE l'ID dei cani che effettivamente stanno nel canile e quindi nei box.
    la query che chiamo [cani-in-box] ha un aspetto simile
    ID-BOX- ...altri campi
    23-R12
    345-R30
    1123-S14
    R=rifugio S=Sanitario
    L'ID è in relazione con l'ID dell'anagrafe generale (uno a molti)
    Il BOX è quello della Tabella principale BOX.

    L'intoppo:
    Il gestore del canile vuole sapere nel momento in cui sostituisce il numero del box
    qual'era il box vecchio.
    Con la maschera di immissione dati inserendo l'ID mi appare anche il numero del box che
    posso modificare. Tutto ok.
    C'è un caso però dove purtroppo questo non va bene.
    Esempio:
    - il cane 345 è nel canile è sta nel box R30.
    - Il proprietario dichiara che è stato affidato quindi avrà una nuova residenza: il cane scompare dalla query [cani in box] MA HA ANCORA NELLA TABELLA PRINCIPALE il numero del BOX R30!
    - L'affidatario restituisce il cane al canile

    La maschera di immissione box dovrebbe ora avere all'atto dell'immissione
    ID:345 BOX:""
    invece mi ritrovo
    ID:345 box:R30

    GRRRRRRRRRRRRRRRRRRRRRRRRRRRRR!!!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.