Newsgroup: it.comp.lang.visual-basic
Titolo: Aiutissimo per favore: ADO conversione da Access

scusate forse è la solita roba rifritta ma col caldo mi stanno ad esplodere
i neuroni.
Allora:
DB programmato in Access 2.0 (!) che funziona bene da aggiornare in vb e ado
(che funziona male!)
Ho una query che pesca da 4 tabelle diverse per mostrarmi la roba da spedire
se volete l'SQL:
SELECT DISTINCTROW TSpedizioni.*, Nominativi.*, Pubblicazioni.ti_descr,
Pubblicazioni.ti_autore, [Motivi spedizione].mo_descr
FROM ((TSpedizioni INNER JOIN Nominativi ON TSpedizioni.id_nomi =
Nominativi.id_nomi) INNER JOIN Pubblicazioni ON TSpedizioni.id_titoli =
Pubblicazioni.id_titoli) INNER JOIN [Motivi spedizione] ON
TSpedizioni.sp_id_motivi = [Motivi spedizione].id_motivi;
agganciata ad una griglia in  access mi permette di cancellare senza tanti
problemi semplicemente illuminando la riga
e premendo delete (il bello è che lo fa anche multi-utente senza tanti
problemi!)
in ADO non funziona un cazzo (scusate la brutalità!)
ho dichiarato(dopo varie prove è quello che "funziona meglio"):
ADOconn.ConnectionString = adoconnDEFAULT
ADOconn.Open
'Check dati da filtrare
rstQTspedizioni.CursorLocation = adUseClient
rstQTspedizioni.Open "QTSpedizioni", ADOconn, adOpenStatic,
adLockBatchOptimistic
 'check se è vuoto etc. etc.
agganciato ad una trueDbGrid e tutto fila liscio finchè:
loop
    confronto idoneo
        rstQTspedizioni.Delete adAffectCurrent
end loop
il record (siccome sono static) localmente lo cancella ma se devo fare un
Resync o requery
e quindi devo aggiornare il db:
le informazioni sulle colonne chiave non sono sufficienti per effettuare
l'aggiornamento!
logicamente se lo metto dynamic mi fa l'errore subito al delete oppure
all'updatebatch.
Ora posto che ADO oramai sia lo standard spinto da Microsoft in casi come
questo che faccio?
Perchè ADO fa così il difficile rispetto ad access che comunque dovrebbe
anche lui rispettare il problema di chiavi insufficienti?
E posto che la query la devo utilizzare così com'è perche serve anche ad
altre routine come faccio
a forzare la cancellazione?
Grazie e scusate la lunghezza!

 Hai provato ad usare adUseServer ?
Ho trovato il bandolo della matassa ...ma mi pone più domande di prima.
L'ERRORE E' nell'SQL
Infatti la query originaria di ACCESS (che peraltro agganciata ad una
griglia consente di cancellare) è in sql:
SELECT DISTINCTROW TSpedizioni.*, Nominativi.*, Pubblicazioni.ti_descr,
Pubblicazioni.ti_autore, [Motivi spedizione].mo_descr
FROM ((TSpedizioni INNER JOIN Nominativi ON TSpedizioni.id_nomi =
Nominativi.id_nomi) INNER JOIN Pubblicazioni ON TSpedizioni.id_titoli =
Pubblicazioni.id_titoli) INNER JOIN [Motivi spedizione] ON
TSpedizioni.sp_id_motivi = [Motivi spedizione].id_motivi;
Il problema subdolamente è lì:
SELECT DISTINCTROW......
va messo come SELECT e tutto funge
PERO' PERCHE'?
la documentazione ufficiale dice di distinctrow :Omette i dati basati su
interi record duplicati e non solo su campi duplicati.
e poco altro (quindi parrebbe funzionante anche il DELETE con essa)
ma io sospetto che:
 distinctrow mi scarta i campi duplicati ma comunque  li carica nella
struttura che ADO si fa del recordset restituito e quando li dico di
cancellare un record ( ad es. con ID=26) lui nella struttura trova il campo
duplicato anche come chiavi e vada in crisi non sapendo quale cancellare( ad
es. trova 3 rec con ID=26)
Access essendo forse più "bocco" non ha questi problemi e cancella anche con
distinctrow
... ma questo diventa un vantaggio rispetto a VB6 io mi chiedo?
e poi chiedo:
Dovendo intervenire su db che già hanno strutture predefinite sicuramente
posso aggiungere query e tab ma non togliere:
e quindi  come potrei intervenire per "simulare" il comportamento di Access
in tali situazioni?
 forse dovrei aprire le tabelle come all e poi applicare un filtro per
restringere ed accorpare i record duplicati?
ma non diventa un lavorone per una cosa all'apparenza semplice?
ma sto cavolo di ADO non doveva semplificare la vita?