Newsgroup: it.comp.lang.visual-basic
Titolo: [?][ADO] forzare l'esecuzione di una query

Scusate il subject poco chiaro....
Comunque il problema è questo:
Con DAO se eseguo una query utilizzando il metodo Execute dell'oggetto
Database, specificando dbFailOnError, e la query genera ad esempio un errore
di chiave duplicata, l'intera query non viene eseguita. Ma se ometto
dbFailOnError, i record che NON violano la chiave vengono comunque inseriti.
esempio:
tabella1 (campo1, campo2) dove campo1 è la chiave
campo1    campo2
1                aaa
2                bbb
3                ccc
tabella2 (campo1, campo2)
campo1    campo2
1                aaa
5                eee
6                fff
se faccio
INSERT INTO tabella1 SELECT * FROM tabella2
con dbfailonerror non inserisce nulla, mentre se non lo metto vengono
accodati i record 5 e 6
Ora la domanda: come faccio con ADO?
Io vorrei ottenere proprio il risultato che avrei con DAO *omettendo*
dbFailOnError, ma non ho trovato nulla a riguardo.
idee?
grazie
ciaociao


Ho trovato questo metodo modificando la query e mettendo una not in sulla
stessa tabella:
INSERT INTO tabella1
SELECT * FROM tabella2
WHERE tabella2.campo1 NOT IN (SELECT campo1 FROM tabella1)
ma possibile che sia l'unico modo?
ciaociao

 WHERE tabella2.campo1 NOT IN (SELECT campo1 FROM tabella1)
Utilizzando una transazione .. se succede qualcosa fai il rollback
altrimenti il commit
Saluti

 altrimenti il commit
Marg vuole ottenere l'opposto: l'inserimento dei record che non generano 
errore.
Ciao

 Saluti
ciaociao

 "mostro" :-P
Ops.. non avevo capito bene il problema ...
scusate

 scusate
Figurati.
Ma adesso che l'hai capito......non è che ti è venuta in mente una soluzione
alternativa? :-P
ciaociao

 soluzione alternativa? :-P
... la soluzione non c'era nemmeno allora...:
http://makeashorterlink.com/?B32555B18

 
http://makeashorterlink.com/?B32555B18
ah, ecco...
A dire il vero non ho nemmeno guardato nei vecchi post... (me colpevole
:(  )
quella della not in è l'unica soluzione che mi è venuta in mente, e vedo che
anche allora tu hai fatto la stessa cosa. (azz.. come sono bravo!)
Quello che mi rode è appunto che nel mio caso la chiave è formata da 3
campi, quindi:
insert into ....... where campo1 not in (select.....) and campo2 not in
(select....) and campo3......
eccheccacchio!
Se uno ha una chiave composta da molti campi, si deve sciroppare una miriade
di select nella stessa query....:(
Questa volta (e bada, *solo* per questa volta)..... w DAO! ;-)
ciaociao

 ha scritto nel messaggio
news:c6ap47$a2t47$1...@ID-193795.news.uni-berlin.de...
<quoting>
ho letto il thread. secondo me riesci ad ottenerlo solo con DAO, perchè è
solo Access che ti dà quella possibilità. Access inteso come applicazione e
usando DAO, appunto.
ADO invece essendo db-independent, non può fare quello che chiedi. se usi
mysql, oracle o sqlserver, ti fallisce tutta la insert-into.
ecco perchè DAO invece ha quel parametro che invece ADO non ha.
magari c'è....non posso provare adesso, però data una ADODB.Connection
puntata su un db Access, scandisci la collection Properties e guarda se c'è
qualcosa al riguardo.....
trattandosi di una cosa specifica di Access, ma può far parte delle
proprietà di base, ma in quella che dipendono dal provider in uso.....
good coding!!!
-- 
Alletun
"Se ti va di spassartela adesso
Prendi il Vettore oggi stesso."
Terre Desolate - Stephen King

 good coding!!!
ciaociao


Premetto che non conosco bene Access, quindi magari diro' una
belinata, ma......
In SQL Server farei una cosa del genere
INSERT INTO tabella1
SELECT * FROM tabella2
WHERE (SELECT COUNT(campo1) As Conteggio FROM tabella1 WHERE
Tabella1.Campo1 = Tabella2.campo1 AND Tabella1.Campo2 =
Tabella2.Campo2) = 0
Nella condizione Where della subquery ci puoi mettere cio' che vuoi.
Ciao!
Luca

 Luca
grazie
ciaociao