Newsgroup: it.comp.appl.access
Titolo: PROBLEMI CON ACCESS COLLEGATO AD SQL SERVER

Salve a tutti ho un quesito da porre e spero che qualcuno di voi possa aiutarmi. 
Ho un applicativo Access composto di circa 120 tabelle altrettante query e circa altrettante Maschere. 
Per motivi di affidabilità dei dati ho eseguito 
l'upsize su un server sql. 
Ho notato un sensibile peggioramento delle prestazioni ( i refresh ed i requery sono sensibilmente più lenti). 
Quindi ora ho un file access con query, report,maschere e moduli residenti e tabelle collegate , su una cartella condivisa e la base di dati  su un server SQL. 
Ora mi si sono presentati 2 problemi. 
Il primo al quale ho rimediato con una soluzione "artigianale" e per il quale vi chiedo una soluzione più consona consiste nel fatto che ho alcune query da codice VBA (che usano funzioni tipo DSUM,DLAST,DMAX etc etc con condizione where che fa riferimento a valori contenuti in campi di maschera) che non funzionano!!!! 
Per rimediare ho "accroccato" una soluzione per ottenere lo stesso risultato che consiste nel creare delle vere e proprie query con l'editor di ACCESS, nelle quali ho imposto la condizione WHERE (del tipo [Forms]![Lavori]![idLavoro] ), e poi in VBA farmi restituire il risultato desiderato con un DLOOKUP riferito alla Query. 
Sicuramente è un problema di sintassi  che però non sono riuscito a risolvere. 
di seguito alcuni dei codici non funzionanti 
 
Me!ggProrogaTotali = Nz(DSum("[Tblproroghe]![ggConcessi]", "[Tblproroghe]", "[Tblproroghe]![IdLavoro]=" & [Forms]![LAVORI]![IdLavoro])) 
 
sospensionitot = Nz(DSum("dataripresa-dataSospensione", "[TblsospensioniRiprese]", " [TblsospensioniRiprese]![IdLavoro]=" & [Forms]![LAVORI]![IdLavoro])) 
 
dataUltimaRipresa = Nz(DMax("dataRipresa", "tblSospensioniRiprese", " [TblsospensioniRiprese]![IdLavoro]=" & [Forms]![LAVORI]![IdLavoro] & " and NsospensioneRipresa=" & NultimaSosp), "") 
 
 
n.b. i codici sono tutti su un sola stringa 
 
il Secondo problema per il quale il vostro aiuto è determinante è dato dal fatto che sulla mia postazione il tutto funziona , ma da un altro PC ( altro utente) lanciando il collegamento al file access, questo non riesce a connettersi al DB Sql. 
Ovviamente ho creato l'utente nella scheda sicurezza del database ma non funziona. Dove sbaglio? 
 
Spero possiate aiutarmi. 
Grazie per l'attenzione. 
Alessandro


Vi informo che il secondo problema sono riuscito a risolverlo... eliminando gli account creati e ricreandoli nuovamente sia come utenti del Database sia come utenti di accesso del Server.
 
Per il primo quesito resto in attesa di qualche consiglio.
Grazie

Lo sai che usando le Funzioni che hai esposto non fai lavorare il Server, ma fai elaborazioni in LOCALE, vanificando SQLServer...?
 
Magari queste cose è bene tu le possa approfondire...
 
@Alex


Grazie dell'interessamnto @Alex, in effetti nutrivo dei dubbi !!non è che potresti dirmi come riscrivere una di quelle istruzioni per far lavorare il server invece del motore di access?
Grazie mille.
Alessandro

Il giorno venerdì 15 aprile 2016 20:30:15 UTC+2, @Alex ha scritto:

Completo la mia risposta.
Correggimi se sbaglio.
Potrei creare una query in SQL-Management e copiarmi il codice SQL.
Creare una query pass-trough in Access collegarla al DB su SQl server e incollarci il codice precedentemente copiato, ma...... mi rimane il dubbio su come imporgli la condizione WHERE riferita agli oggetti in maschera. 
Come posso fare?
Grazie

Frena....
 
Leggi questo:
http://mirror.masterdrive.it/alessandrobaraldi/DettaglioFaq.asp%3FIdFAQ=281.html
 
 
Non puoi improvvisare e buttare li la prima cosa che ti viene in mente, queste cose prima si studiano sulla carta, poi si applicano i concetti.
 
@Alex


Grazie per la risposta.Sei stato molto gentile.
Studio e ti faccio sapere.
Alessandro.

Cia @Alex ho letto (un paio di volte) il tuo documento ed ho capito bene alcune cose e un pò meno altre.
 
1) Una cosa su cui ho dei dubbi è la costruzione della stringa di connessione....
Ho creato con lo strumento di windows il file dsn che contiene quanto segue
 
[ODBC]
DRIVER=SQL Server
UID=a.ricci
LANGUAGE=Italiano
DATABASE=DipXProve
WSID=ED-SCON-1271
APP=Microsoft Office 2010
Trusted_Connection=Yes
SERVER=SQL-INTRANET-08\SVRVMPRODSQL2K8
Description=SERVER SQL Prove
 
quindi da quanto ho capito dovrei scrivere:
"ODBC;DRIVER=SQLServer;UID=a.ricci;Trusted_Connection=Yes;DATABASE=DipXProve;WSID=ED-SCON-1271;SERVER=SQL-INTRANET-08\SVRVMPRODSQL2K8"
 
2) Seppur credo di aver capito che le migliori performance si ottengono con le query P-T  non ho capito  come si implementino. 
Ho capito che possono essere costruite sia con l'interfaccia (non grafica) "Query" di Access, sia scrivendole nel codice VBA. 
Nel mio caso ad esempio ho un FORM principale che ha come origine dati una Query con 7 tabelle e 209 campi. Siccome l'apertura di tale form da quando ho spostato le tabelle su SQL Server è rallentata vistosamente mi chiedo quale sia la soluzione migliore per migliorare le performance.
 
Avrei altre domande, ma attendo la tua risposta, magari mi fugherai i dubbi che ho.
Grazie
Alessandro
 
 
 
 

Il documento non è mio... ho ospitato nel mio vecchio sito un ottimo documento di un amico.
 
Prova a rileggere quello che hai scritto... non dici molto su cui fissare dei concetti...!
 
Penso ti manchino un po di basi, che forse ti consentirebbero di fare qualche prova e qualche ragionamento più strutturato.
La connessione di norma si può fare DSN_LESS e personalmente la preferisco.
 
Le Query PT sono strumenti, sono Query con la Proprietà CONNECT valorizzata come le Tabelle Linkate, ma, possono eseguire Query senza farle elaboare a JET oppure delle StoredProcedure...
 
Tutta questa è teoria di base di come accedere ad un RDBMS... e di solito è meglio studiarla sui libri e fare prove... proprio per ingranare tecnicamente.
 
@Alex