Newsgroup: it.comp.software.database
Titolo: da access a mysql via ODBC non accoda causa duplicati

ANTEFATTO Mi capita spesso di dover aggiornare delle tabelle locali
Access prendendo i dati da fonti Oracle via ODBC. I record sono
indicizzati su un campo chiave con "duplicati non ammessi", quando io da
access lancio la query di accodamento lui mi fa la query, poi prima di
finalizzarla mi dice, per esempio, "record da accodare 10000, record che
non verranno  accodati per violazione di chiave 9000", e mi accoda gli
altri 1000, sincronizzando le tabelle. Comodissimo. 
PROBLEMA Ora vorrei fare la stessa cosa a parti invertite: vorrei
aggiornare delle tabelle su linux - mysql, prendendo i dati da fonti
access. Sempre da access io lancio la query di accodamento da access a
mysql, ma my-ODBC si blocca subito sul primo record dicendo che non
procedera' oltre con l'accodamento perche' ha trovato una chiave
duplicata al record n. 1.
DOMANDA Tipicamente le chiavi cominceranno a essere nuove dopo parecchie
migliaia di record, c'e' un settaggio per dire a my-ODBC di non fermarsi
al primo errore ma di ignorarlo e accodare via via tutti i record che
non danno errore?
Perche' altrimenti a ogni aggiornamento devo azzerare la tabella mysql e
rigenerarla ex-novo, crescendo la tabella sara' una procedura sempre
piu' lunga, non mi piace.
TIA
B.

 al primo errore 
No. Il settaggio non e' di MyODBC o di ODBC ma del programma che usi
per eseguire l'accodamento. Se e' Access, vedi in Access.
La cosa migliore da fare sarebbe fare una procedura che accodi solamente
i record non esistenti, il che ridurrebbe di molto la durata del tutto.
Davide

 ha scritto nel messaggio
news:as8enk$oh119$2...@ID-18487.news.dfncis.de...

Pienamente daccordo, basta rilevare l'errore(36xx...non ricordo) e fare il
JUMP al record successivo.
E' ovvio che se non gestisci l'errore non funzionerà mai......!!!!
@Alex.

 JUMP al record successivo.
prima di fare la procedura via codice faccio sempre le prove a mano,
facendole a mano si ferma al primo record con due successive finestre di
errore, una access una odbc.
In realta' voi mi proponete di gestire l'accodamento non via query ma record
dopo record tramite un recordset che li scandisca da cima a fondo e tenti un
insert, nessun problema a farlo, ma cosi' si fa rientrare dalla finestra un
approccio procedurale riga per riga che era stato buttato fuori dalla porta
grazie alla programmazione descrittiva (dico che query voglio e ci pensa lui
a eseguirla).
Si puo' fare (faro' delle prove perche' se devo accodare su tabelle con
milioni di record mi sa che impiega tutta notte) ma mi rendo conto che sto
aggirando il problema e non risolvendolo.
Dopotutto io ho un esempio di query di "accodamento dei soli record nuovi"
che si comporta come previsto (skippa i vecchi e accoda i nuovi in un colpo
solo), e un altro esempio di query del tutto analoga, ma  che non lo fa, e
in cui la differenza non e' nel programma in uso (access) ma
nell'interfaccia dati e nel database destinazione.
Ciao
B.

 ha scritto nel messaggio
news:asa7g8$pipbh$1...@ID-163647.news.dfncis.de...

Guarda che anche se esegui una Query UPDATE ti ritorna l'errore relativo e
ti si pianta
nel record che genera errore, il problema è essere iin grado di gestire le
TRANSAZIONI.
Non puoi interagire con QUERY ACTION se non controllando l'errore, ma
vengono legate
alla loro esecuzione le tranzazioni, almeno con DB che le
supportano........!!!!
@Alex.

 supportano........!!!!
Si' ma guarda che in modalita' interattiva tutto si riduce ad access che mi
avvisa che puo' accodare solo una parte di record,  io premo il bottone OK,
e questo e' tutto il controllo dell'errore.
In modalita' codice disattivo i warning,  apro la query, e questa va a buon
fine senza dire nulla in due righe di codice senza ulteriori problemi.
Ciao
B.

 non danno errore?
Mysql supporta un comando chiamato "INSERT IGNORE", che dovrebbe fare al
caso tuo. Una sua descrizione dovresti trovarla nella documentazione di
mysql (sul sito).
mirko.