Newsgroup: it.comp.lang.delphi
Titolo: Passaggio da Paradox ad Access

Mi capita una cosa strana.
Terminata la mia applicazione C/S che sotto Paradox funzionava regolarmente
ho voluto modificare il database sostituendolo con Access ed utilizzando
ADO. Sostanzialmente ho lasciato il codice invariato ed ho solo inserito un
TADOConnection ed ho cambiato le TTable con delle TADOTable. I metodi di
accesso ai dati sono i soliti First, Post ecc. del TDataSet.
Utilizzando per raffronto gli stessi pacchetti dati che simulano gli stessi
tempi di elaborazione, dati e affini che su Paradox non davano alcun
problema molto frequentemente il server mi restituisce l'errore di:
IL RECORD CORRENTE CORRISPONDE ALL'INIZIO O ALLA FINE DEL FILE OPPURE E'
STATO ELIMINATO ... ... E' NECESSARIO DISPORRE DI UN RECORD CORRENTE
Inoltre la comparsa del messaggio non viene filtrata dal try..except del mio
codice principale che chiama le funzioni di accesso al db. Cosě ho inserito
in ogni funzione un trap personalizzato ma č come se non ci fossero. Nessuna
segnalazione di errore da queste ma solo il msg che ho riportato sopra.
Sotto ide ovviamente l'applicazione va in break, ma se spunto l'opzione Stop
on Delphi Exception il messaggio si moltiplica ma senza bloccare
l'applicazione che prosegue tranquillamente.
Qualche idea?
V

Su Google ho trovato qualche riferimento all'errore in oggetto ma pare che 
l'unica soluzione prospettata fosse quella di eseguire gli update dal sito 
Borland.
In alcuni casi qualcuno ha affermato trattarsi di bug.
In ogni caso così ho fatto ma non è cambiato nulla.
L'unico cosa che ho potuto constatare è che l'errore probabilmente si 
manifesta solo durante l'eliminazione del record e non durante i vari 
inserimenti.
Ho dato un'occhiata a tutte le proprietà ed i metodi di TADOTable ma non 
sono riuscito a vedere nulla che faccia al caso mio.
Inoltre le funzioni principali che chiamano l'accesso al db sono racchiuse 
in un TCriticalSection dunque non dovrebbero manifestarsi accessi 
concorrenti al db.
Sapete se c'è un modo per verificare se l'eliminazione di un record è stata 
conclusa prima di proseguire nel codice o avete suggerimenti alternativi?
V

 > IL RECORD CORRENTE CORRISPONDE ALL'INIZIO O ALLA FINE DEL FILE OPPURE E'
 > STATO ELIMINATO ... ... E' NECESSARIO DISPORRE DI UN RECORD CORRENTE
Dovresti specificare quale versione di Delphi usi.
Se non ricordo male questo era un incompatibilità tra Delphi 6 (o forse
5) e MDAC 2.7 che fu risolta con un apposito aggiornamento.
Ciao
Giotto.

 Dovresti specificare quale versione di Delphi usi.
D7 Pro, upgradato a 7.1 e tutti i possibili aggiornamenti presenti sul sito 
Borland
V 

Faccio fatica a crederci ma parrebbe l'evidenza:
la TADOTable ha un suo TDataSource al quale ho collegato una
DBGrid...disabilitando quest'ultima l'errore scompare...
per maggior sicurezza ho lasciato in bianco il datasource della dbgrid e
posto un checkbox che aggancia la griglia al dataset in questione.
Ho lanciato l'applicativo constatando che i dati venivano correttamente
salvati e cancellati dalla TADOTable sequenzialmente al ritmo di
un'operazione ogni 2/3 secondi (trattandosi di dati inviati da client online
potrebbe accadere che due o più client inviino i loro dati anche
contemporaneamente, pur se utilizzo una TCriticalSection proprio per
questo)..tutto ok per un minuto buono...ho checkato il box per visualizzare
i dati nella griglia e immediatamente si è sollevato l'errore oggetto del
mio primo post.
L'assurdità (forse) è che lavorando sotto paradox la dbgrid non crea alcun
problema ed il codice è lo stesso. Ho provato il refresh, lo sleep(), il
disable / enabledcontrols ma senza risultato.
Cosa ne pensate?
V

 STATO ELIMINATO ... ... E' NECESSARIO DISPORRE DI UN RECORD CORRENTE
-----------------------------------------
ciao
mi sembra tanto un messaggio che ricevo io, in inglese.
io programmo col c++ builder 6  ma penso che non ci sia nessuno differenza
ho cercato per mesi in internet una soluzione, senza risultato,  poi ieri
l'ho trovata
per conto mio e la espongo nel caso il problema sia analogo
premetto:
    programmazione in windows XP,
    collegamento a un database MYSQL con ADO via ODBC
    (il problema non sembra  direttamente in Borland o nel database, ma in
ADO)
soluzione:
   Andare in start - Impostazioni  - Pannello di Controllo - Strumenti di
Amministrazione -
         Origine Dati (ODBC) - DSN di sistema
   selezionare database interessato - il mio:  "mycond"  MYSQL ODBC 3.51
driver
  Configura
   Advanced
  Flags1
  spuntare il checkbox "Return Matching rows"
  salvare
 riavviare IDE Borland
controllare risultato
spero sia di aiuto
gioca
-------------------------------------------
Ciao, ho ricevuto il tuo msg nella mia mail e lo rigiro al gruppo perchè
potrebbe venire utile a qualcuno in futuro...purtroppo non posso sfruttare
il suggerimento in quanto io accedo direttamente ad un db Access con Ado.
Grazie comunque per la tua risposta.
V.