Campo numerico che si incrementa +1 ed azzeramento

Discussioni sulle caratteristiche di database
Rispondi
pinosauro
Messaggi: 37
Iscritto il: sabato 7 settembre 2013, 8:33

Campo numerico che si incrementa +1 ed azzeramento

Messaggio da pinosauro »

Ciao a tutti gli utenti presenti e passati,

ho tentato moltissime soluzioni proposte ma nulla. E quindi... Come si fa a creare un campo che si autoincrementa di 1?

Altro quesito strettamente collegato, quando il campo che si autincrementa andrà azzerato qual è la procedura?

Grazie a tutti gli appassionati di OOo :)
OpenOffice 3.3 / win 8
Avatar utente
Mizio1961
Volontario
Volontario
Messaggi: 841
Iscritto il: mercoledì 5 ottobre 2011, 22:55
Località: Roma

Re: Campo numerico che si incrementa +1 ed azzeramento

Messaggio da Mizio1961 »

Semplice!!!
Se vuoi una certezza del risultato puoi farlo solo tramite macro su un campo numerico normale (non autoincrementante)
Saluti
OpenOffice Windows - Libre su Ubuntu Desktop e Notebook WiFi
Per cortesia, inserisci [Risolto] nel Titolo iniziale se il tuo problema è stato risolto. ;-)
pinosauro
Messaggi: 37
Iscritto il: sabato 7 settembre 2013, 8:33

Re: Campo numerico che si incrementa +1 ed azzeramento

Messaggio da pinosauro »

Ciao Mizio, anzitutto ti ringrazio della risposta.

ok, le macro ma come faccio praticamente? Mi puoi dare qualche indicazione in più? :?:

grazie mille
OpenOffice 3.3 / win 8
Avatar utente
Mizio1961
Volontario
Volontario
Messaggi: 841
Iscritto il: mercoledì 5 ottobre 2011, 22:55
Località: Roma

Re: Campo numerico che si incrementa +1 ed azzeramento

Messaggio da Mizio1961 »

Certo

Codice: Seleziona tutto

private sub cmdNew(oEvent)                   ' DEFINIZIONE NUOVA RIGA
   dim oForm, oConn as object                    ' OGGETTI SU CUI SI OPERA
   dim NBWRK as integer
   '---------------------------------------------'
   oForm  = oEvent.Source.Model.Parent           ' ACQ. FORM CORRENTE
   oConn  = oForm.ActiveConnection                ' ACQ. CONN. DB CORRENTE   
   NBWRK = Fn_SelVN(oConn, "SELECT MAX(NBWRK) FROM T_WRKTES") + 1
   oForm.moveToInsertRow()                       ' MI SPOSTO SULLA NUOVA RIGA
   '---------------------------------------------' SCRIVO DATI DI RIGA
   oForm.getbyname("NBWRK").text = NBWRK         '
   oForm.getbyname("NBWRK").commit = true        '
   oForm.insertrow()                             ' LA INSERISCO IN DB
end sub                                          ' FINE
Dove la Fn_SelVN acquisisce e controlla la presa del dato da tabella con il seguente codice:

Codice: Seleziona tutto

Public Function Fn_SelVN(DBConn, SQLXC)          ' SEL. VAL. NUMERICO DA BD
   '---------------------------------------------'
   '  Apertura resultset attraverso la connessione DBConn e selezione del valore 
   '  numerico contenuto nel primo record trovato che soddisfa la condizione di 
   '  selezione contenuta nell'argomento SQLXC. Gestisce l'errore per sintassi
   '  SQL errata (Fn_SelVN = -1) e la selezione nulla (Fn_SelVN = 0)
   '---------------------------------------------'
   dim OBJRSET as object                         ' VAR. PER RESULTSET
   dim NBER as Double
   dim DESCR as String
   '---------------------------------------------' APERTURA RESULTSET
   on error resume next                          ' GESTIONE ERRORE
   OBJRSET = DBConn.createStatement.executeQuery(SQLXC)   ' APERTURA RESULTSET
   if not isnull(OBJRSET) then                   ' IF    RESULTSET VALIDO
      OBJRSET.next                               ' VADO A PRIMO RECORD
      if OBJRSET.row > 0 then                    ' IF    RECORD TROVATO
         Fn_SelVN = Val(OBJRSET.getString(1))    ' NUMERO LETTO DA TABELLA
      else                                       ' ELSE  RESULTSET VUOTO
         Fn_SelVN = 0                            ' RESTITUISCO 0
      endif                                      ' ENDIF RECORD TROVATO O NO 
      OBJRSET.Close                              ' CHIUSURA RECORDSET
   else                                          ' ELSE  RESULTSET NON VALIDO
      Fn_SelVN = -1                              ' RESTITUISCO -1
   End If                                        ' ENDIF PER EOF
End Function                                     ' FINE
Il tutto si basa sull'acquisizione del nuovo numero di protocollo dalla tabella.
La mia tabella si chiama T_WRKTES e la chiave numerica da incrementare è nel campo NBWRK... ovviamente questi nomi li devi personalizzare secondo le tue necessità
Il compitino da svolgere è il seguente:
1) Creare la form per operare sulla tua tabella
2) Creare un bottone che chiamerai ad esempio: cmdNew con didascalia Nuovo al quale associ la macro cmdNew nell'evento Esegui l'azione
3) Salvi il formulario, lo provi e... ci fai sapere
4) Non c'è un 4!!! Basta così... Al limite se qualcosa non ti torna metti un piccolo esempio del tuo DB con il formulario in cui hai provato il tutto, lo alleghi e vediamo quali problemi sono ancora rimasti
Ok? Saluti e... buon divertimento ;)
OpenOffice Windows - Libre su Ubuntu Desktop e Notebook WiFi
Per cortesia, inserisci [Risolto] nel Titolo iniziale se il tuo problema è stato risolto. ;-)
Rispondi