Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [sql]query di selezione su campo inzialmente nullo

    devo effettuare una query di selezione su un campo che, inizialmente è nullo.
    Questo campo è l'ID Cliente/fornitore e quindi, all'estrazione deve essere incrementato di una unità per ottenere l'ID del prossimo cliente/fornitore.
    Il problema sorge quando la tabella è vuota: pur eseguendo la query, ottengo sempre <null>
    Tenendo presente che sto utilizzando un database Access, come posso fare per risolvere il mio problema??
    Su SQL server usavo:
    codice:
    SELECT isnull(max(ID),0)+1 as Codice FROM Nometab
    ma in access non funziona perchè mi da errore con il numero di parametri da "isnull" in avanti.
    grazie.

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Scusa ma... perchè non usare un campo Contatore?
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    infatti c'è il campo contatore proprio su ID.
    Ma se parto da uno stato di tabella vuota, il valore massimo del suddetto campo è comunque null e se sommo 1, ottengo ancora null.

    il codice è quindi questo
    codice:
    SELECT max(ID)+1 as Codice  FROM Nometab
    che mi genera <null>

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Non hai bisogno di generare ID in questo modo se il campo è di tipo Contatore: è il campo stesso a determinare automaticamente il proprio valore.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  5. #5
    ok ma per come ho progettato il programma, questo deve prima estrarre il valore massimo del campo ID, incrementarlo di una unità e questo nuovo valore associarlo al nuovo record che sarà inserito.
    Quindi, come ho detto, se vado a fare il massimo su una tabella vuota, ottengo sempre <null>

  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Originariamente inviato da motogpdesmo16
    ok ma per come ho progettato il programma [...]
    In tal caso, hai progettato male il tuo programma, poichè hai attribuito ad un campo un significato che non trova corrispondenza con la sua implementazione.

    Poi, ancora non riesco a capire perchè tu debba determinare il valore di un campo Contatore: ammesso che sia possibile utilizzarlo, non potresti comunque assegnarlo al campo.

    Un campo autoincrementale Contatore va utilizzato per generare chiavi univoche e il suo valore non deve avere alcun significato per l'applicazione: serve solamente a distinguere e correlare i record quando necessario.

    In base a questo principio non dovresti resettarlo, tentare di "riempire i buchi" o compiere altre operazioni che andrebbero contro lo scopo per cui tale campo è stato progettato.

    Tutt'al più, se vuoi numerarli manualmente, ma non vedo quali vantaggi potresti ottenere (o meglio, non capisco cosa vuoi effettivamente fare) devi usare un comune campo Intero di cui puoi determinare il valore e scriverlo in fase di inserimento/modifica di un record.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  7. #7
    ok allora innanzitutto grazie delle delucidazioni.
    Dato che si trattava di una progettazione molto ma molto old del programma, mi sono accorto che è necessario effettuarne una più dettagliata.
    Mi spiego meglio: ho creato 4 tabelle identiche per fornitore/cliente (totale 8 tabelle dunque) quando, più semplicemente, ne bastano solo 4 aggiungendo in ognuna un campo FLAG che segnala quando si tratta di un movimento da un fornitore e quando da un cliente.

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.