Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    137

    [Delphi 5] Table con ADO

    Ciao,

    qualcuno mi sa spiegare perchè, durante una situazione di inserimento di un nuovo record in fondo ad una tabella Access 2002 senza chiave primaria o indice (NON l'ho fatta io altrimenti avrei usato le regole di Codd come sempre) tramite un Append e poi un bel Post quando ho terminato il riempimento dei campi, lui mi va a scrivere, il valore che sto inserendo nel primo campo della tabella, nel primo campo del primo record della tabella?
    io l'ho attribuito al fatto che aveva un buffer sporco ma poi ho pensato: "ma come fa a sporcare il buffer se è la sola operazione che compio da dopo che il programma è partito???!!!".
    comunque l'ho risolto mettendo una Close della tabella e poi una Open subito prima dell'Append. In questo modo funziona correttamente.

    e poi come si fa a vedere il contenuto del buffer?????

    grazie.

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,288
    Il tuo caso è molto sospetto...io posterei il codice.

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

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

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    137
    Il codice è molto banale perchè dev'essere una cosa estremamente banale è per questo che non l'ho postato, cmq:

    codice:
    try
     DataModuleAssenze.ADOConnection.BeginTrans;
     with DataModuleAssenze.TAssenze do begin
       Close;
       Open;
       Append;
       FieldByName('Interno').Value := db_interno;
       FieldByName('DataIni').AsString :=  aa_i+mm_i+gg_i;
       if Length(TimeToStr(DTPOraInizio.Time)) < 8 then
         FieldByName('OraIni').AsString := '0'+Copy(TimeToStr(DTPOraInizio.Time), 0, 4)
       else
         FieldByName('OraIni').AsString :=  Copy(TimeToStr(DTPOraInizio.Time), 0, 5);
       FieldByName('DataFine').AsString :=  aa_f+mm_f+gg_f;
       if Length(TimeToStr(DTPOraFine.Time)) < 8 then
         FieldByName('OraFine').AsString :=  '0'+Copy(TimeToStr(DTPOraFine.Time), 0, 4)
       else
         FieldByName('OraFine').AsString :=  Copy(TimeToStr(DTPOraFine.Time), 0, 5);
       Post;
     end;
     DataModuleAssenze.ADOConnection.CommitTrans;
    except
     DataModuleAssenze.ADOConnection.RollbackTrans;
     if MessageDlg('ERRORE REGISTRAZIONE.', mtError, [mbOk], 0) = mrOk then
     Close;
    end; //try-except
    poi: tutti i campi della tabella sono di tipo Testo

    spero ti possa aiutare.

    Grazie.


  4. #4
    Io non ho capito qual é errore!

  5. #5
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,288
    Originariamente inviato da zephyr
    Il codice è molto banale perchè dev'essere una cosa estremamente banale è per questo che non l'ho postato
    Sì, l'avevo immaginato, ma volevo avere delle certezze...

    La versione precedente del codice lavorava sulla tabella già aperta? In termini pratici, veniva richiamata la Open prima di procedere ad effettuare l'Append? Spero di sì, poichè è necessario ovviamente aprire la tabella prima di aggiungere record.

    In secondo luogo, verifica che il tuo programma venga salvato con le tabelle chiuse: in caso contrario, esse vengono aperte automaticamente al caricamento del Data Module e, senza invocarne la chiusura, la chiamata al metodo Open non sortisce alcun effetto.

    Infine......ma siamo sicuri che il driver per Access sia effettivamente in grado di gestire alcun tipo di transazioni?

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

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

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    137
    Dunque:

    1. sì, la tabella è aperta prima di effettuare l'operazione infatti anche nel codice sopraesposto la riapro nella stessa maniera.

    2. all'avvio del programma, testo, nel datamoduleassenze, se le tabelle sono Active e se lo sono prima le chiudo e poi le apro altrimenti le apro solamente:
    codice:
      if TAssenze.Active then
          TAssenze.Close;
      TAssenze.Open;


    3. per il driver: penso sia corretto anche perchè è quello ufficiale ed in altre circostanze si comporta adeguatamente ...




    Altre idee?

  7. #7
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,288
    Originariamente inviato da zephyr
    Altre idee?
    E' possibile che campi di lookup o tabelle correlate (ad esempio, in master/detail) provochino lo "scroll" dei record presenti in questa tabella annullando l'operazione di Append in corso e tramutandola in un Edit del primo record?
    :master:
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  8. #8
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    137
    non è proprio così: lo scroll avviene prima di arrivare ad eseguire l'Append e, di conseguenza, quando sono nella fase incrimanata ho i record corretti (recuperati da uno scroll) in canna anche perchè debuggango il programma lui mi dice che si trova nel punto giusto ergo non capisco proprio il perchè lo faccia.

    ti dò la situazione più in generale. all'avvio sono loggato come un utente. successivamente mi riloggo come un altro utente ed in questo caso mi va a scasinare il record in oggetto della discussione altrimenti non lo fa. premetto che a tutti gli effetti divento l'altro utente in tutto e per tutto che però NON è quello relativo al primo record in esame!!!


    ti ho fatto ?

  9. #9
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,288
    Purtroppo, con i dati che ho in mano, mi è impossibile diagnosticare il problema effettivo.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  10. #10
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    137
    OK,

    grazie lo stesso per il supporto.

    A presto

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.