James Barash
James at fcidms.com
Thu Jan 22 13:28:46 CST 2009
John: Here is a procedure I use in Access to call a stored procedure in SQL with parameters. It takes two integer parameters. You will need to add a Reference to the Microsoft ActiveX Data Objects library. It should give you everything you need to start. Hope it helps. James Barash Public Sub SetOrderStatus(ID As Long, Status As Integer) Dim conn As ADODB.Connection Dim cmd As ADODB.command On Error GoTo HandleErr Set conn = New ADODB.Connection conn.ConnectionString = "PROVIDER=MSDASQL;uid=<UserID>;pwd=<Password>;driver={SQL Server};server=<ServerName>;database=<DatabaseName>" ' substitute proper credentials here conn.CursorLocation = adUseClient conn.Open If conn.State <> adStateOpen Then msgbox "Error opening Connection" set conn = Nothing Exit Sub End if Set cmd = New ADODB.command With cmd Set .ActiveConnection = conn .CommandType = adCmdStoredProc .CommandText = "sp_SetOrderStatus" ' name of stored procedure .Parameters.Append cmd.CreateParameter("ID", adInteger, adParamInput, , ID) 'parameters must be defined in order .Parameters.Append cmd.CreateParameter("Status", adInteger, adParamInput, , Status) .Execute End With Set cmd = Nothing conn.Close Set conn = Nothing Exit Sub HandleErr: Select Case err.Number Case Else MsgBox "Error " & err.Number & ": " & err.Description, vbCritical, "basCustom.SetOrderStatus" End Select End Sub -----Original Message----- From: accessd-bounces at databaseadvisors.com [mailto:accessd-bounces at databaseadvisors.com] On Behalf Of jwcolby Sent: Thursday, January 22, 2009 1:42 PM To: Access Developers discussion and problem solving Subject: Re: [AccessD] Stored procedures from Access Martin, Thanks for the links. In fact I found the first, and it will no doubt be useful to me someday however... I have pretty complex (to me at least) set of stored procedures created out in SQL Server. For example I have a stored procedure that does a BCP out to export data from a table for processing by a third party called Accuzip (address validation). The data in the table is name / address information that has to be exported to files in a specific directory, on a specific server (actually a virtual machine here in my office). The virtual machine is running Accuzip, which is is watching that folder. As I place files into the watched directory, Accuzip starts processing them, and placing processed files into an "output" directory. I then have to get the files back into SQL Server. I have a matching set of stored procedures that BCP the data back in to a table in SQL Server. So what I am trying to accomplish is simply tap SQL Server on the shoulder and say "hey, execute SPXXX in database YYYY, with these parameters". This is not about getting a result set to bind to a form or control, this is about telling SQL Server to do some specific stored procedure, to perform some process. Once Accuzip processes the input files and creates the output files, I then need to tap SQL Server on the shoulder and say "hey, execute this Stored Procedure in database YYY with these parameters. The end results will be to import the files back into SQL Server. I have all of the stored procedures created, and have used them for quite some time, however it still takes significant manual labor to manually tap SQL Server on the shoulder. I want to tie the pieces together from Access. This is a very well defined process, but the database name, stored procedure names and table names can change from run to run. I kind of envisioned something like Charlotte's function that would do exactly this... tap SQL on the shoulder and tell it to do something, passing in parameters as required. Unless it is somehow required in order to accomplish this task, I have no need for pass through queries in Access, no need for linked tables to SQL Server, no need for loading data into forms or combos etc. I might someday, but not for this specific task. John W. Colby www.ColbyConsulting.com