Buongiorno a tutti, sto convertendo la mia applicazione Access in una Access FE ed SQL SERVER BE
leggendo in giro ho capito (credo) che una connessione tramite ADODB è più veloce di una connessione DAO in quanto le operazioni non passano ma dal JET di Access ma si collegano direttamente al SQL, quindi in teoria se io faccio la creazione di una vista o di una tabella tramite connesione ADO dovrei essere più veloce che fare un query Passthrough tramite DAO?
Partendo da questo presupposto sto modificando i miei codici VBA esempio:
questo codice
Dim db As DAO.Database
Set db = CurrentDb
db.Connect = "ODBC;Driver=ODBC Driver 11 for SQL Server; Server=tcp:*********,49172; Database=**********; Uid=admin; Pwd=admin;"
db.Execute "IF EXISTS (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'TabValoriListino" & TempVars![TempUser] & "') " & _
"DROP TABLE TabValoriListino" & TempVars![TempUser] & " CREATE TABLE TabValoriListino" & TempVars![TempUser] & "([id] [int] IDENTITY(1,1) NOT NULL, [Id Listino] [int] NULL DEFAULT ((0)), [Matricola] [int] NULL, [Voce] [int] NULL, [Valore Voce] [float] NULL, [VoceIRFCL] [int] NULL DEFAULT ((0)), [VoceAZCL] [int] NULL DEFAULT ((0)), [VoceIRFAG] [int] NULL DEFAULT ((0)), [VoceAZAG] [int] NULL DEFAULT ((0)), [VoceIRFPA] [int] NULL DEFAULT ((0)), [VoceAZPA] [int] NULL DEFAULT ((0)), [VoceAZEN] [int] NULL DEFAULT ((0)), [VoceSAB] [int] NULL DEFAULT ((0)), [SSMA_TimeStamp] [timestamp] NOT NULL, " & _
"CONSTRAINT [TabValoriListino" & TempVars![TempUser] & "$PrimaryKey] PRIMARY KEY CLUSTERED ([ID] Asc)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY]", dbSQLPassthrough
l ho modificato così
Dim cn As ADODB.Connection
Set cn = New ADODB.Connection
cn.Open (Provider=sqloledb;Data Source=tcp:********,49172;Initial Catalog=**********; User Id=admin;Password=admin;)
cn.Execute "IF EXISTS (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'TabValoriListino" & TempVars![TempUser] & "') " & _
"DROP TABLE TabValoriListino" & TempVars![TempUser] & " CREATE TABLE TabValoriListino" & TempVars![TempUser] & "([id] [int] IDENTITY(1,1) NOT NULL, [Id Listino] [int] NULL DEFAULT ((0)), [Matricola] [int] NULL, [Voce] [int] NULL, [Valore Voce] [float] NULL, [VoceIRFCL] [int] NULL DEFAULT ((0)), [VoceAZCL] [int] NULL DEFAULT ((0)), [VoceIRFAG] [int] NULL DEFAULT ((0)), [VoceAZAG] [int] NULL DEFAULT ((0)), [VoceIRFPA] [int] NULL DEFAULT ((0)), [VoceAZPA] [int] NULL DEFAULT ((0)), [VoceAZEN] [int] NULL DEFAULT ((0)), [VoceSAB] [int] NULL DEFAULT ((0)), [SSMA_TimeStamp] [timestamp] NOT NULL, " & _
"CONSTRAINT [TabValoriListino" & TempVars![TempUser] & "$PrimaryKey] PRIMARY KEY CLUSTERED ([ID] Asc)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY]"
In teoria pur facendo lo stesso lavoro il secondo codice dovrebbe essere più perfomante del primo giusto?
le mie domende sono:
1) è veramente cosi?
Io le ho testate entrambe e mi sembrano uguali come velocità, ovviamente essendo un test la tabella è vuota
2)volevo capire se nel momento in cui popolerò la tabella con migliaia di record la differenza si vedrà e quindi ne vale la pena modificare le altre query Passthrough?
3) immagino che il fatto che sia l sql server che access oggi siano nelle stesso computer sfalzi i risultati o sbaglio?
4) ho fatto qualche errore nella stringa di connessione e magari ne esiste una piu veloce?
5) devo aggiungere delle proprierà ad
Open o a
Execute?
quindi alla fine volevo capire sono nella strada giusto o il gioco non vale la candela?
Grazie