Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,326

    [delphi] Lock ti una tabella Interbase

    Salve a tutti,...

    dovrei effettuare delle scritture su una tabella, e tale tabella ha un field dichiarato Univoco!

    il seguente campo: codice char 8

    il codice e' chiave univoca, ed io devo aggiungere dei record in cui il codice dovra' rappresentare un progressivo (alfanumerico) es.: 2000AAAA, 2000AAAB, 2000AAAC.. etc etc

    in vecchi programmi su piattaforma DOS, eseguivo il lock della tabella e proseguivo...:

    subito dopo la conferma di aggiunta nuovo record;

    lock della tabella.

    lettura ultimo valore + generazione del nuovo valore progressivo.

    append record con scrittura della chiave univoca e degli altri campi.

    commit.

    unlock della tabella.

    in questo modo oltre ad assegnare un valore progressivo (da me generato seguendo alcuni criteri) ero sicuro dell'unicita del valore del campo 'codice', rendendo le modifice disponibili per tutti gli utenti.

    adesso, in delphi, usando Interbase che strada devo seguire per poter creare questi codici univoci?

    non conosco nessun comando che mi permetta di effettuare il 'lock' della IBTable....ne del IBDatabase.

    qualc'uno mi puo' aiutare?

    grazie
    fulvio

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    In quanto database di tipo client/server, non è possibile effettuare un "lock" di una tabella, poichè tutti gli utenti sono autorizzati a lavorare simultaneamente sul database.

    Ciascun utente che si collega ad InterBase Server apre una transazione e inizia ad effettuare inserimenti, modifiche e cancellazioni; se la transazione viene confermata con Commit, le modifiche saranno (da impostazione predefinita) visibili nella loro totalità anche gli altri utenti.

    Per ottenere un identificativo univoco, puoi sfruttare i generatori di InterBase (leggi la documentazione a riguardo).

    Si tratta di "registri autoincrementali" che si ottengono tramite l'istruzione SQL GEN_ID alla quale viene passato il nome del generatore e l'incremento da effettuare (di solito, 1).

    In questo modo, hai a disposizione uno strumento efficiente in grado di restituire numeri sempre progressivi per qualsiasi utente si colleghi al database.

    Come sempre la problematica è complessa. Se ben ricordo, hai acquistato un libro su InterBase/FireBird?? Se sì, dai un'occhiata all'argomento appropriato per capire come funziona il meccanismo.

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

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

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,326
    bene, io riesco a generare un progressivo nel mio campo codice. ho aggiunto nella proprieta ModifySQL della query il seguente codice:
    codice:
    insert into TABELLA_RUBRICA
      (CODICE, COGNOME, NOME)
    values
      ((GEN_ID(PROG_RUBR,1)), :COGNOME, :NOME)
    ed ogni volta che aggiungo un record mi viene generato un codice progressivo, chiaramente nuemrico.

    a questo punto, dato che ho bisogno di un codice univoco alfanumerico,...come posso fare x cambiare il valore del campo gia assegnato da: es.'134 ' a '00000134'?


    ancora una cosa, se puoi, potresti chiarirmi il concetto di transazione? ....in effetti io so cosa e' una transazione, ma non ho ancora capito delphi coma la utilizza, l'ho inserita sulla form ma praticamente non ho scritto alcun codice per gestirla.

    credo di aver capito che skematicamente, quando voglio eseguire piu istruzioni SQL devo fare cosi:

    inizializzare la transazione (IBTransaction.create)
    ....
    eseguire + operazione SQL
    ....
    chiudere la transazione (IBtransaction.CommitRetaining)

    giusto?


    grazie

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.