Problema contatore

di il
7 risposte

Problema contatore

Salve a tutti,
ho un problema relativamente al database che sto costruendo.
Praticamente, dopo aver letto sui manuali che per la costruzione delle tabelle sarebbe meglio non avere campi calcolati, nella creazione della maschera di immissione dati ho questa situazione:

tblPunti_di_prelievo
sito_codice
punto_codice
x_coordinata
y_coordinata
z_coordinata

Premetto che sito_codice e punto_codice sono le mie chiavi della tabella e sito codice nella maschera essendo il padre ho fatto si che trasformando la casella della maschera in casella combinata possa selezionare direttamente i codici dei siti immessi nella tabella tblSito (la quale è quella che fa da fulcro a tutto il database).
Fino qui mi funziona tutto, poi dato che per ogni sito posso avere più punti vorrei che il codice_sito derivasse dall'unione del nome sito più un numero crescente relativo ad ogni sito in modo che io possa avere ad es:


codice sito e numero punto che insieme intervallati da uno spazio mi danno il codice_punto
p1003 1
p1003 2
P1003 3

p 1004 1
p1004 2
p1005 3

ora, per farmi scrivere nella casella punto codice il codice sito ho utilizato:

=Forms![tblPunti_prelievo]![Sito_codice] e funziona, appena seleziono nel controllo sito codice, il sito codice da me voluto questo viene riportato automaticamente sotto nel controllo punto codice.

Qui sorgono i miei problemi,

alla funzione =Forms![tblPunti_prelievo]![Sito_codice]&.....dovrei mettere "una funzione o qualcosa" che mi conti tutti i punti di uno stesso sito.

Secondo problema, pur non avendo trovato tale funzione ho provato a salvare i dati immessi, e nel controllo in cui automaticamente mi viene riportato il risultato della funzione ...... si visualizza tale risultato ma al salvataggio il sistema mi chiede di immettere un valore in quanto il controllo punto_codice essendo una chiave primaria non ammette valori null.

Ecco qui non capisco....ho provato avedere se c'era qualche incompatibilità tra il formato immesso nella scheda e quello della tabella ma entrambi sono settati su testo.

Vi ringrazio in anticipo dell'attenzione

Edo

7 Risposte

  • Re: Problema contatore

    Ciao,vorrei capire meglio come sono strutturare le tue tabelle,puoi farmi un esempio concreto?
    ti dico questo perchè forse con una query potresti ottenere quello che cerchi senza complicarti troppo la vita.(i campi calcolati si ricavano con le query).
  • Re: Problema contatore

    Ok, cercherò di evitare per semplicità contenuti tecnici, io ho questa tabella,


    tblCASE
    Casa_nome
    Casa_codice
    I dentificativo
    n°schedario
    comune


    Praticamente ho costruito una maschera alla prima tab, tblCASA, e dato che voglio Casa_codice come l'unione del codice istat del comune unito a quello dello schedario ho digitato su origine controllo di casa_codice =[comune]&[n°schedario] esso funziona perfettamente ma quando vado a salvare un messaggio di errore mi chiede di inserire un valore (ma il valore c'è...è stato composto ed appare nel controllo)...clicco sul punto interrogativo del messaggio di errore e leggo che il valore non può essere null....qui ho provato a mettere la condizione is not null ma niente....mi chiede di inserire un valore...



    L'altro problema riguarda il fatto che ogni casa ha più preventivi fatti da diversi istituti.
    Ora io vorrei fare in modo che il codice del preventivo fosse legato al codice della casa in questo modo.

    casa 1 preventivo 1--ovvero 00423 1
    casa 1 preventivo 2--ovvero 00423 2
    casa 1 preventivo 3--ovvero 00423 3
    casa 2 preventivo 1--ovvero 00422 1
    casa 2 preventivo 2--ovvero 00422 2
    casa 2 preventivo 3--ovvero 00422 3
    -

    La tabella è questa :


    PREVENTIVO
    casa_codice
    codice_preventivo
    ditta
    note

    vorrei quindi nella seconda pagina della maschera che sto costruendo selezionarmi il codice della casa e questo dovrebbe far apparire lo stesso codice sotto nel controllo del codice_preventivo (se risolvo il primo problema questo già lo so fare) piu un numero cronologico che identifica se è il primo di preventivo o il secondo.....dato che è l'immissione stessa ad essere cronologica debbo trovare un modo per far si che tale numero mi tenga conto per ogni immissione della casa di riferimento (quindi un contatore che faccia riferimento alla casa )

    ho già diversi manuali e sto cercando fammi comunque sapere se ti viene in mente qualcosa.

    Ringrazio comunque tutti per il supporto.
  • Re: Problema contatore

    Ciao,ho simulato le tue tab.,la tblCASE composta come la tua escludendo il casa_codice.
    poi ho creato una query con la tab. suddetta,ed ho inserito in questa query un nuovo campo:Casa_codice: [comune] & [n°schedario].la maschera relativa è stata creata su questa query.(di norma i campi calcolati vanno creati nelle query)nella stessa maschera ho inserito una casella combinata che ricerca il casa_codice e visualizza i dati relativi.
    Anche la seconda tab.preventivi è stata realizzata allo stesso modo della tua ad esclusione del codice_preventivo,che è stato inserito in una query come nell'esempio precedente.Codice_preventivo: [casa_nome] & [preventivo]
    le due tab.sono collegate tra loro da casa_nome(uno a molti tra tblCASE e PREVENTIVO)
    una seconda maschera creata sulle due query visualizza il casa_nome e casa_codice e la relativa sottomaschera co preventivo,ditta,cod_preventivo ecc...
    non ho avuto nessun msg di errore.vedi se così ti va bene.
  • Re: Problema contatore

    Grazie funziona perfettamente:

    il problema è che a me il codice_preventivo e il casa_codice mi servono per legare le tabelle quando vado su strumenti database --------->relazioni ...in cui avrei messo le tabelle con dentro il codice e avrei praticamente fatto dei join uno a molti. Ma ora ho invece il codice come risultato della query da cui esce un recordset....access memorizza la struttura dela query e non il dato.....forse sbaglio approccio in quanto ho letto che i campi calcolati non possono essere mai messi dentro le tabelle....

    come si potrebbe ovviare a questo problema? ed in genere come si crea e utilizza una chiave univoca? ovvero con quello che ho creato con le tue istruzioni come posso utilizzarlo?Magari non concosco la normale prassi di costruzione di tali chiavi e il loro normale utilizzo.

    Come riesco a fare una chiave univoca con queste mie tabelle senza calcolarla?

    Ho avuto un'idea:
    cancello i codici ed assumo per la prima tabella come codice il n°schedario che è univoco e lo perpetuo nella seconda tabella.Che ne dite?

    tblCASE
    n°schedario
    Casa_nome
    I dentificativo
    comune


    tblPREVENTIVO
    n°schedario
    codice_preventivo
    ditta
    note

    Sintatticamente parlando non converrebbe tenermi n°schedario e mettere un'altro campo definito come codice casa il quale riporterebbe l'esatto contenuto del n°schedario? La copia avverrebbe automaticamente in quanto utilizzerei un semplice codice vba il quale scriverebbe nel controllo codice_casa l'esatto contenuto di n°schedario (immesso a mano dall'operatore)dopo che quest'ultimo subisce l'aggiornamento (scorrimento con il tab)

    Infine, ogni casa ha più preventivi, come potrei costruirmi un codice che per ogni casa mi conta il numero di preventivi....che quindi associa per ogni tipo di casa un numero crescente che definisce la sua abbondanza relativa?

    Vi ringrazio in anticipo dell'attenzione
  • Re: Problema contatore

    Ciao,come ti scrivevo precedentemente io ho usato Casa_nome come chiave univoca(presumendo che ogni casa abbia un nome diverso).
    non vedo la necessità di usare casa_codice e codice_preventivo come chiavi primarie,che invece potresti usare per la ricerca nella maschera.
    per quanto riguarda sapere la quantità di preventivi per ogni casa io consiglio di usare sempre le query.es: nella query preventivi (penultimo post)
    dovresti avere i seguenti campi:preventivo ,ditta,note,casa nome e codice preventivo.creando un'altra query con i dati della query preventivi(mettendo solo casa nome e codice preventivo)
    clicco sul simbolo "sommatoria"(in modo che mi compaia il campo formula) e lì sotto al campo codice preventivo al campo formula metto conteggio e per ogni casa conterà il numero dei preventivi.
    vedi sè può servirti.
  • Re: Problema contatore

    Ti ringrazio dei preziosi consigli,
    mi scuso innanzitutto per il ritardo nella risposta ma sono stato 6 giorni a letto con l'influenza e non ho toccato il pc.

    Allora ho sperimentato la soluzione che mi hai consigliato riguardo i codici...avevi ragione...il codice va calcolato e volevo su questo chiederti:

    dato che io sto creando maschere di immissione, da come ho letto creo prima una query dalla tabella e da quest'ultima una maschera...io la query in questione la debbo fare di selezione? perché una volta fatta la maschera a me servirebbe per immettere i dati facendo visualizzare il codice ...se la faccio di selezione poi non mi permette di immettere dati..(per il quale ho capito che non va memorizzato ma costruito per l'utente in maschera tramite query)

    altra cosa...ho eseguito le tue istruzioni riguardo il numero di preventivi per ogni casa...il problema è che alla fine mi calcola il totale dei preventivi per ogni casa mentre invece io cerco una funzione che mi associ un conteggio relativo del preventivo per ogni casa tipo:

    casa A 1
    casa A 2
    casa A 3

    forse con l'sql? puoi darmi una mano?

    ti ringrazio in anticipo per la collaborazione.
  • Re: Problema contatore

    Ciao,premetto che ho cancellato involontariamente gli esempi che avevo creato per il tuo db.e quindi ho perso un attimo il filo del discorso.per quanto riguarda la masch.d' immissione dati va creata sulle tabelle,in modo che tu possa inserire nuovi record,mentre per visualizzare il risultato finale con codice_casa e codice_preventivo crea una masch.basata sulle query.per ciò che riguarda il preventivo non ho idee al momento,potresti forse inserire nella tab. preventivi un ID numerico (numero preventivo) (crescente tipo 1,2,3,4 ecc) da inserire manualmente ad ogni richiesta di preventivo,e nell'esecuzione della query visualizzare il codice_casa,o casa_nome con il numero preventivo.
Devi accedere o registrarti per scrivere nel forum
7 risposte