Newsgroup: it.comp.appl.access
Titolo: Cueripastrù: quello che non ho capito

Abbandonata su vostro suggerimento l'idea di usare ADP, mi sono rivolto al 
buon vecchio ODBC per usare SQLserver come BE.
Sono solito costruirmi le query da codice e lanciarle con runsql o usarle 
per aprire un recordset. Non ho però capito come si fa a farlo con una query 
pass-through. In effetti quello che non ho capito è cos'è una query 
pass-through a livello di codice e come funziona in pratica.
Quello che mi è venuto in mente di fare è creare una query  pass-through a 
mano e poi cambiargli l'SQL da codice ed infine aprire il recordser su di 
essa. Oppure creare una querydef e poi ammazzarla (ma come si fa a 
specioficare che la querydef sia pass-through?). Ma mi sembrano 
macchinosette entrambe le soluzioni.
Chi mi illumina?
Saluti.
Luciano

"Luciano (DOC)"

Ti consiglio di leggere attentamente questa (esaustiva ma agile) 
documentazione:
http://www.alessandrobaraldi.it/DettaglioFaq.asp?IdFAQ=281
Trovi le risposte ai tuoi dubbi, soprattutto sul "quando" e non solo il 
"come" usare qry Pass Th.
Saluti. 


Ciao luciano anche io di recente mi sono imbattuto nelle cueripasstru
e ho provato a generare una stored e lanciarla dalla query
uso questa funzione:
Function ExecuteSPT(sqltext As String)
' Purpose: Esegue una temporanea query pass-through.
' Accepts: sqltext: Stringa SQL da eseguire.
' connectstring: Connection string, deve seguire il predicato "ODBC;".
' Returns: nothing.
Dim stConnect As String
Dim mydb As DAO.Database, myq As DAO.QueryDef
Set mydb = DBEngine.Workspaces(0).Databases(0)
'stConnect = "ODBC;DRIVER=SQL Server;SERVER=" & stServer &
";DATABASE=" & stDatabase & ";UID=" & stUsername & ";PWD=" &
stPassword
stConnect = "ODBC;DRIVER=SQL
Server;SERVER=xxx;DATABASE=xxx;UID=DbAdmin;PWD=xxx"
' Create a temporary QueryDef object that is not saved.
DoCmd.DeleteObject acQuery, "PrimaStored"
Set myq = mydb.CreateQueryDef("PrimaStored")
' Set the ReturnsRecords property to False in order to use the
' Execute method.
myq.ReturnsRecords = False
myq.Connect = stConnect
myq.sql = sqltext
' se è una stored procedure di comando
'myq.Execute
myq.Close
End Function
da qui poi posso trattare la query come se fosse una query normale.

 da qui poi posso trattare la query come se fosse una query normale.
Mica ho capito....
Leggendo il codice mi sembra che crei una querydef cui setti l'SQL e poi la 
esegui, che è più o meno quello che faccio anche io. Perchè dici che hai 
creato una stored?
Saluti.
Luciano 

 Luciano
Luciano scusa, forse manca un pezzo. Ho creato una stored sul sql
server che richiamo attraverso la funzione:
Call ExecuteSPT("execute primastored " & "'" & Me.CercaNome & "'")
la stored ha una sintassi sql in questo caso semplice che accetta un
parametro testuale,
ma puoi modificarci il testo con l'sql che ti serve cambiandolo
dinamicamente alla query pass throug.
Sostanzialmente la query a questo punto, una volta definita la
connessione, può accettare tutto l'sql che vuoi!
tipo
Call ExecuteSPT("select cognome from tbl_soggetti where ...'")
Questa sarebbe la stored:
CREATE PROCEDURE PrimaStored
(
@Cognome Varchar(100)
)
AS
BEGIN
    SELECT 1 Cognome, Nome
    FROM Tbl_Soggetti
where Cognome = @Cognome
order By cognome
END
GO


Perchè non fai un esempiuccio per AccessGroup.it???
-- 
-- 
MAssimiliano Amendola
www.accessgroup.it
Cisa - Conferenza Italiana Sviluppatori Access

 - Mostra testo citato
lo hai chiesto a me o a luciano?

 lo hai chiesto a me o a luciano?
Ovvio che  a te, un articolo con relativa DEMO
-- 
-- 
MAssimiliano Amendola
www.accessgroup.it
