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

    [delphi] ibtabella chiave esistente

    ciao a tutti,

    ho una applicazione dalla quale apro 2 finestre dove gestisco la stessa ibtabella.

    una semplice tabella costituita da codice (univoco) e nome.

    nel momento dell'apertura digito il codice, e creo il mio dataset
    codice:
    select * from tabella where codice = edit1.text;
    inserendo un codice inesistente ottengo un nuovo record (supponendo che da entrambe le finestre ho digitato lo stesso codice), nel momento che eseguo IBDataSet1.ApplyUpdates succede che dalla prima il risultato e' ok, mentre la seconda genera (giustamente) errore di duplicazione kiave.

    ho fatto questo per simulare il funzionamento in rete, nel caso specifico quando due utenti cercano di inserire contemporaneamente la stessa anagrafica...ricordo che il codice anagrafica non deve essere generato automaticamente.

    sugli eventi del IBdataset gestisco gli eventi AfterDelete e AfterPost: ....CommitRetaining;

    come devo fare per gestire questo problema?

    grazie
    fulvio

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    Non puoi fare nulla, se non visualizzare un messaggio appropriato.

    E' normale che il database non accetti un record con lo stesso valore per la chiave primaria.
    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,315
    visualizzo il mio messaggio scrivendo nell'evento OnPostError del ibdataset:
    codice:
    procedure TFrmFornitori.IBDataSet1PostError(DataSet: TDataSet;
      E: EDatabaseError; var Action: TDataAction);
    begin
    Application.MessageBox('Errore nella scrittura del record', 'Errore', mb_OK);
    end;
    ma subito dopo viene emesso un errore da sistema...
    forse dopo il mio messaggio devo scrivere un comando per far tornare il focus sulla form di accettazione dati e non far visualizzare anke l'errore di sistema?

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,315
    ho risolto in questa maniera,....spero di aver fatto bene:

    codice:
    procedure TFrmFornitori.BtnOKClick(Sender: TObject);
    begin
      Try
       IBDataSet1.ApplyUpdates ;
      Except
       ShowMessage('Errore su registrazione record');
      end;
    end;

    e' una giusta tecnica?


    grazie
    fulvio

  5. #5
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    Magari è meglio se intercetti - ammesso che sia possibile - l'eccezione di chiave duplicata in modo da segnalare all'utente che la chiave scelta (visto che non viene determinata in automatico) è già in uso poichè probabilmente inserita prima dallo stesso utente o da un altro.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

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 © 2024 vBulletin Solutions, Inc. All rights reserved.