Newsgroup: it.comp.appl.access
Titolo: Numerazione

Un saluto a tutti
Ho un problema con una campo numerico
In una sottomaschera ho diversi controlli tra i quali uno numerico,[ID] che
è la chiave primaria e che incremento con la funzione
DMax("[ID]";"[dettagli]")+1.
Ora mi capita di dover copiare alcuni record presenti nella sottomaschera e
incollarli sempre nella sottomaschera il programma non me lo permette in
quanto verrebbe duplicata la chiave primaria se fosse contatore la stessa
operazione verrebbe eseguita.
La stessa cosa mi succede quando cerco di inserire dei record mediante una
query devo digitare io il numero progressivo del campo [ID] c'è la
possibilità di rendere automatico l'incremento di questo campo.So che
modificando il campo [ID] da numerico a contatore  avrei risolto i miei
problemi ma non vorrei farlo perchè devo avere una continuità ner record e
non avere dei buchi dopo eventuali cancellazioni.
Un Grazie per ogni Vs. gentile consiglio

 non avere dei buchi dopo eventuali cancellazioni.
Perche' DEVI avere continuita'?
Comunque l'unica e' una query di accodamento che calcoli automaticamente gli
ID, puoi modificare opportunamente la query sul sito comune che crea un
contatore "al volo" in modo da fargli creare "al volo" i vari ID.
Sib

"Marina F." <1@l1> ha scritto nel messaggio
news:NrN7a.164236$YG2.4...@twister1.libero.it...

Io per una particolare applicazione avevo lo stesso problema e ho creato ad
OC
una Funzione che cerca i Buchi di progressione e mi propone quelli
nell'eventualità
di AddNew......!
Public Function Progressivo(strSQL as string) as Long
   Dim rst As Recordset
   Dim intRecordCount As Long 'Contiene il numero di record
   Dim intCounter As Long
   Dim pract As long
   Set rst = CurrentDb.OpenRecordset(strSQL)
   'Controlla che l'ultimo record (EOF) e il primo (BOF) non coincidano
   'in quanto il set di record sarebbe vuoto
   If rst.EOF And rst.BOF Then Progressivo = 0: Exit Function
   rst.MoveLast
   intRecordCount = rst.RecordCount - 1
   rst.MoveFirst
   For intCounter = 0 To intRecordCount
      pract = rst!CampoProgressivo
      If intCounter < rst!CampoProgressivo Then
         Prg = intCounter
         Exit For
      End If
      If intCounter = intRecordCount Then
         Prg = intCounter + 1
         Exit For
      End If
      rst.MoveNext
   Next intCounter
   rst.close
   Set rst = Nothing
   Progressivo=prg
End Function
Ti ho inserito uno stralcio della mia Funzione, magari mi sono dimenticato
qualche assegnazione, ma in sostanza l'idea c'è............!!!
La mia Funzione è generica, vedi infatti che passo alla Func una SQL tipo
"Select CampoProgressivo From MiaTabella"
Nulla ti vieta, nel caso di inserirla nella Form ed invece di crearti il
Recordset passare Rst=Me.RecordsetClone
@Alex.

 Grazie Sib ma dov'è questa query sul sito comune
Nella sezione query trovi una query che genera un campo di conteggio dei
record, puoi modificarla in modo da ottenere cio' che ti serve.
Sib

 Grazie Ale ho provato ma non riesco a farla funzionare a dovere comunque
per i buchi ho risolto con una funzione che rinumera i record in modo
progressivo.
Avrei bisogno invece della seconda domanda cioè creare una query basata su
una tabella che abbia un campo numerico come chiave primaria e che quando
vado ad inserire nuovi record in questa query il campo numerico si
incrementi di 1 proprio come fa un campo contatore è possibile?

 Grazie Ale ho provato ma non riesco a farla funzionare a dovere comunque
per i buchi ho risolto con una funzione che rinumera i record in modo
progressivo.
Avrei bisogno invece della seconda domanda cioè creare una query basata su
una tabella che abbia un campo numerico come chiave primaria e che quando
vado ad inserire nuovi record in questa query il campo numerico si
incrementi di 1 proprio come fa un campo contatore è possibile?
Grazie e buona Domenica

 incrementi di 1 proprio come fa un campo contatore č possibile?
Creati una Function in cui metti DMAX(........)+1
@Alex.


Dimenticavo, nella QRY il Campo sarà =NomeFonction().
@Alex.