Stuart McLachlan
stuart at lexacorp.com.pg
Wed Jan 25 22:47:22 CST 2006
On 25 Jan 2006 at 23:08, John Colby wrote: > > I am getting a bunch of different answers from build "pass through queries" > to "open ADO record sets" (with painfully little detail). > > If I were to do a pass through query, what in the heck is a pass through > query? These are the kinds of answers that I find frustrating, because they > just don't provide enough substance to do anything with. If I knew what a > pass through query was, then I would not even be having this conversation. > How do I build one? > >From Access Help: <quote> In the Database window, click Queries under Objects, and then click New on the Database window toolbar. In the New Query dialog box, click Design View, and then click OK. Without adding tables or queries, click Close in the Show Table dialog box. On the Query menu, point to SQL Specific, and then click Pass-Through. On the toolbar, click Properties to display the query property sheet. In the query property sheet, set the ODBCConnectStr property to specify information on the database to which you want to connect. You can type the connection information, or click Build , and then enter information about the server you're connecting to. When you are prompted to save the password in the connection string, select Yes if you want the password and logon stored in the connection string information. </quote> > What does it look like? In the query window, when you open it or when you edit it? :-) It looks like any othe SQL query in the QueryDefs collection The SQL would just be "sp_MyStoredProcedure 1" assuming 1 was the value of the parameter you want to pass. > How do I feed it parameters? Ah-ha, that's the tricky bit - you need to rewrite the querydef before executing it. > How do I reference it in a form or combo? Here's an example if you are using DAO: Function GetDataDAO() As Boolean Dim qry As DAO.QueryDef Dim rs As DAO.Recordset Set qry = CurrentDb.QueryDefs("myQuery") Set qry.SQL = "select * from mytable where id = " & cboIDSelector Set rs = CurrentDb.OpenRecordset("myQuery") ... End Function > If I am going to use a recordset, I at least understand this idea, but can I > (for example) build a function that returns an ADO recordset, then set the > rowsource of the form / combo to "=MyADORs()"? Do I need to set a "form > global" recordset object, get that set, then poke that RS object into the > form/combo's property? > If you are using ADO, you don't need to use a passthrough query, you use an ADODB.Command: Function GetDataADO() As Boolean Dim cmd As ADODB.Command Dim prm As ADODB.Parameter Dim rs As ADODB.Recordset cmd.CommandType = adCmdStoredProc cmd.CommandText = "sp_MyStoredProcedure" '.... Set prm = cmd.CreateParameter("myParam", adInteger, adParamInput, 4, cboIDSelector) cmd.Parameters.Append prm Set rs = cmd.Execute .... End Function -- Stuart