Newsgroup: it.comp.lang.visual-basic
Titolo: [?2] DAO, ADO, SQL Server

Riposto dal 30-03 (avrei veramente bisogno di un vostro aiuto, grazie):
Cercherò di essere breve: Tutto nasce da un'applicazione gestionale (da 1 a
20 postazioni in rete locale, non mi interessa oltre, nè il remoto) VB6 SP5
che usa SQL Server 7.0 (su NT4) al quale mi interfaccio con i miei
applicativi con DAO 3.51 e tabelle Access 97 collegate via ODBC alle
omologhe SQL Server. La scelta era dovuta a una certa fretta e agli
applicativi già completamente scritti. Le modifiche erano minime.
Ora ho dovuto riprendere in mano il tutto perchè le prestazioni sono
pessime. Molti di voi mi hanno già consigliato di usare ADO con Provider
SQLOLEDB per ridurre i passaggi e ottenere così il massimo della velocità
possibile. Ho letto e fatto e mi sto impiccando per mantenere un'unica
versione di programmi che possa, con 8000 opzioni, gestire Archivi Access 97
e 2000 con DAO 3.51/3.6, o archivi SQL Server con ADO 2.6 o (per mantenere
quanto già fatto fintanto che non si farà una scelta definitiva) archivi SQL
Server col le tabelle Access collegate via ODBC con SQL Server. In questi
giorni di puro masochismo sono giunto ad alcune conclusioni/dubbi che vorrei
confermare/chiarire con voi:
1) Le migliori prestazioni per SQL Server si ottengono con ADO e Provider
SQLOLEDB.
2) Secondo documentazione MSDN, per archivi Access 97/2000, ADO è molto più
lento di DAO e ho potuto verificarlo: semplicemente penoso! (Ho provato con
con Provider Microsoft.Jet.OLEDB.4.0)
3) Mi pare che recordset ADO (ho provato solo con Access) aperti con cursore
lato Server non supportino i metodi Sort e Filter, vi risulta?
E ora i dubbi (ok, ho una fretta da suicidio, mi vergogno per non aver letto
tutto, ma, spudoratamente, ve li dico). Tenendo conto delle prestazioni e
degli eventuali limiti, in ambiente ADO e SQL Server, è preferibile:
A) Usare cursore lato Client o Server?
B) Aprire i recordsets con Static, Keyset, Dynamic (ho capito, ma lasciamo
stare il ForwardOnly!)
C) Nella connessione si può specificare il Provider SQLOLEDB o SQLOLEDB.1.
Qual è la differenza?
D) Dove cacchio trovo un elenco completo (!) degli errori ADO con Provider
SQLOLEDB?
E) Varie ed eventuali (Leggasi: Tutte le dritte che potete per un sistema
veloce e stabile)
Grazie a tutti per la pazienza e la disponibilità e Buona Pasqua.


[CUT]
Per quella che è stata la mia esperienza,
il passaggio da ADO2.5  ad ADO 2.6 con sql server 7 fu un disastro
in fatto di prestazioni.
Tornai subito a ADO 2.5 fino a che non passai a SQL server 2000, dove ado2.6
si mostrò ottimo.
Spero di esserti stato utile. Luca

 veloce e stabile)
Leggiti gli innumerevoli post sull'argomento ado...
ciao
ugo

 Msdn.
Io ho trovato solo (in MSDN, anche in linea) quelli pubblicati nell'Help di
ADO e sono pochini (20/30). Inoltre sono solo quelli previsti da ADO. A me
servirebbero tutti quelli previsti dalla combinazione ADO + Provider
SQLOLEDB. Per esempio quali sono gli errori per un'aggiunta di un record con
chiave duplicata in un indice o quello di blocco condiviso in caso di Update
con lock ottimististico? Hai qualche link, per favore?
Grazie ancora.

 con lock ottimististico? Hai qualche link, per favore?
Ora come ora non mi vengono in mente links e non ho msdn a portata di tiro.
Sicuramente su msdn / SqlServer books online trovi tutto.
Magari non in una unica raccolta, ma si sa... mamma Ms si diverte a
farci cercare le informazioni...
ciao
ugo

 affatto.
Ah, una precisazione.
Meglio, se il problema è proprio quello che ti ho detto,
usare una delle due tecniche:
1) recordset limitati (solo i clienti che iniziano con "a",
poi quelli che iniziano con "b", etc) che recordset mastodontici
caricati lato client.
2) recordset lato server e un po' di codice scritto a "manina"
per popolare una flexgrid man mano che l'utente scrolla.
ciao
ugo

 Se mi parli di apertura di una griglia di dati, il problema _non_ è
Mi riferivo alla semplice apertura del database...

 con lock ottimististico? Hai qualche link, per favore?
E' una lotta con l'on error con ado purtroppo... :-(

 Qual è la differenza?
tempo fa ebbi la tua medesima curiosità però con una stringa che indicava
come
provider MSDASQL.1 e riuscii  a trovare questo stralcio di documentazione,
che
senz'altro va bene anche per il tuo quesito..
"... si noterà che la stringa di connessione include l'argomento
Provider=MSDASQL.1
Questo dice a OLEDB di usare il provider OLEDB per la versione 1 di ODBC.
Togliendo _1_ si dice semplicemente a OLEDB di usare il provider più recente
con quel nome..."
Ciao
 Valter

 con quel nome..."
Questa non la sapevo.
Grazie.   :-)
ciao
ugo

Grazie Ugo e Valter. Alla prossima...