Ricollegandomi a questo http://forum.masterdrive.it/access-7...e-query-68436/ ( che mi è stato molto utile )
sto cercando di popolare una maschera con una Query PassTrough da eseguirsi su SQLServer2008

Sostanzialmente ho trovato 3 modi:

1°)
Generare una query PassThrough salvata e appoggiare la origine dati della maschera a questa.
Potro poi modificare la stringa di query parametrizzandola
------ Pregi e difetti
- Posso eseguire le Stored
- Frammenta il DB con le continue modifiche al testo sql


2°)
Generare una query PassTrought temporanea
su questa generare un RecordSet
su questo appoggiare la maschera
------ Pregi e difetti
-Posso eseguire le Stored
-Non frammenta il DB perche è query Temporanea
-Ha il grosso problema che se tento a maschera aperta di modificare l'ordinamento oppure di filtrare con i pulsanti di Access mi va in errore
Private Sub Form_Open(Cancel As Integer)

Dim ssq As String
ssq = "SELECT TaId, TaNom, TaInd, CASE WHEN TaId < 10 THEN 5 ELSE 15 END AS gg FROM dbo.Tabe"

Dim cnn As String
cnn = "ODBC;DRIVER=SQL Server;SERVER=NomeSer;UID=NomeUt;PWD=ValorePs;DATABASE=NomeDB"

Dim qry As DAO.QueryDef
Set qry = DBEngine.Workspaces(0).Databases(0).CreateQueryDef("")

    qry.ReturnsRecords = True
    qry.Connect = cnn
    qry.SQL = ssq
    
Dim rst As DAO.Recordset
Set rst = qry.OpenRecordset(dbOpenDynaset)
    
Set Me.Recordset = rst

End Sub

3°)
Generare un classico RecordSet connesso al DB SQLServer
su questo appoggiare la maschera
------ Pregi e difetti
-NON posso eseguire le Stored ( Temo che non si possa definire PassTrough )
-Non frammenta il DB
-Ha il grosso problema che se tento a maschera aperta di modificare l'ordinamento oppure di filtrare con i pulsanti du Access mi va in errore
Private Sub Form_Open(Cancel As Integer)

Dim ssq As String
ssq = "SELECT TaId, TaNom, TaInd, IIf(TaId<10,5,15) AS gg FROM Tabe"

Dim cnn As String
cnn = "ODBC;DRIVER=SQL Server;SERVER=NomeSer;UID=NomeUt;PWD=ValorePs;DATABASE=NomeDB"

Dim dba As DAO.Database
Set dba = DBEngine.Workspaces(0).OpenDatabase("", dbDriverNoPrompt, True, cnn)
    
Dim rst As DAO.Recordset
Set rst = dba.OpenRecordset(ssq, dbOpenDynaset)
    
Set Me.Recordset = rst
   
End Sub


Sto sbagliando qualcosa ?
Fra i 3 metodi cosa scegliereste ?
Esistono sistemi migliori ?
Mi sa che il grosso problema che rilevo sull'ordinamento è solo un mio grossolano errore, come posso perfezionarlo ??


Grazie


.