Rocky Smolin at Beach Access Software
rockysmolin at bchacc.com
Fri Jan 25 13:55:06 CST 2008
Slick. Rocky -----Original Message----- From: accessd-bounces at databaseadvisors.com [mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Jim Dettman Sent: Friday, January 25, 2008 11:45 AM To: 'Access Developers discussion and problem solving' Subject: Re: [AccessD] Retrieve command line arguments Rocky, <<So this would allow you to pass multiple parameters in through the command line?>> Yes. Jim. -----Original Message----- From: accessd-bounces at databaseadvisors.com [mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Rocky Smolin at Beach Access Software Sent: Friday, January 25, 2008 2:02 PM To: 'Access Developers discussion and problem solving' Subject: Re: [AccessD] Retrieve command line arguments So this would allow you to pass multiple parameters in through the command line? Rocky -----Original Message----- From: accessd-bounces at databaseadvisors.com [mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Jim Dettman Sent: Friday, January 25, 2008 10:30 AM To: 'Access Developers discussion and problem solving' Subject: Re: [AccessD] Retrieve command line arguments Rocky, Below is code to grab the value you pass in with /cmd on the command line. Call GetCommandLine() in your startup form. You can optionally pass an argument on the number of parameters you expect to see. If you don't, it assumes up to 10. The procedure assumes a space or tab delimits an argument unless it's within quotes. Once you've done that, then anytime in the app call GetCommandLineArg() with the argument number to get it's value. Here's an example of that: ' Main processing loop for app ' Check command line passed: ' P1 - Job/Customer: ' 'ALL' - Process all defined jobs (Customers). ' '<job number>' as per table tbl_Init ' ' P2 - Document Type: ' 'ALL' - Process all document types. ' '<EDI Doc Number>' - Process only for this doc type Const RoutineName = "AppMain" Const Version = "1.0" Dim varJob As Variant Dim varDocType As Variant Dim intJobFound As Integer Dim rsJobs As ADODB.Recordset Dim intRet As Integer 10 On Error GoTo Error_AppMain 20 Call GetCommandLine(2) 30 varJob = GetCommandLineArg(0) 40 varDocType = GetCommandLineArg(1) 50 intJobFound = False 60 OpenADORecordset rsJobs, "Select * from tbl_Init order by ODBC" Note that I have not posted the UnexpectedError procedure, so you need to change the error handling a bit. HTH, Jim. ' Used within this module Private gvarCmdArgArray() As Variant Public Sub GetCommandLine(Optional intMaxArgs As Integer) Const RoutineName = "GetCommandLine" Const Version = "3.0" 'Declare variables. Dim strChr As String Dim strCmdLine As String Dim strCmdLnLen As Integer Dim intInArg As Integer Dim intI As Integer Dim intNumArgs As Integer Dim intInQuotes As Integer 'See if intMaxArgs was provided. 10 If IsMissing(intMaxArgs) Then intMaxArgs = 10 'Make array of the correct size. 20 ReDim gvarCmdArgArray(intMaxArgs - 1) 30 intNumArgs = 0 40 intInArg = False 50 intInQuotes = False 'Get command line arguments. 60 strCmdLine = Command() 70 strCmdLnLen = Len(strCmdLine) 'Go thru command line one character at a time. 80 For intI = 1 To strCmdLnLen 90 strChr = Mid(strCmdLine, intI, 1) 'Test for space or tab. 100 If (intInQuotes = False And strChr <> " " And strChr <> vbTab And strChr <> Chr$(34)) Or (intInQuotes = True And strChr <> Chr$(34)) Then 'Neither space, tab, or quote. 'Test if already in argument. 110 If Not intInArg Then 'New argument begins. 'Test for too many arguments. 120 If intNumArgs = intMaxArgs Then Exit For 130 intNumArgs = intNumArgs + 1 140 intInArg = True 150 End If 'Add character to current argument. 160 gvarCmdArgArray(intNumArgs - 1) = gvarCmdArgArray(intNumArgs - 1) + strChr 170 Else 'Found a space, tab or quote. 'Set intInArg flag to False. 180 intInArg = False 190 If strChr = Chr$(34) Then 200 intInQuotes = True 210 Else 220 intInQuotes = False 230 End If 240 End If 250 Next intI ' Don't want to do this as some arguments may be optional. 'Resize array just enough to hold arguments. 'ReDim Preserve gvarCmdArgArray(intNumArgs - 1) 260 For intI = 0 To intNumArgs - 1 270 gvarCmdArgArray(intI) = Trim(gvarCmdArgArray(intI)) 280 Next intI End Sub Public Function GetCommandLineArg(intArgNumber) As Variant ' Returns an argument from the command line ' Null is returned on Error or non-existant argument Const RoutineName = "GetCommandLineArg" Const Version = "2.0" 10 On Error GoTo GetCommandLineArgError 20 If intArgNumber > UBound(gvarCmdArgArray()) Then 30 GetCommandLineArg = Null 40 Else 50 GetCommandLineArg = gvarCmdArgArray(intArgNumber) 60 End If GetCommandLineArgExit: 70 On Error Resume Next 80 Exit Function GetCommandLineArgError: 90 UnexpectedError ModuleName, RoutineName, Version, Err.Number, Err.Description, Err.Source, VBA.Erl 100 GetCommandLineArg = Null 110 Resume GetCommandLineArgExit End Function -----Original Message----- From: accessd-bounces at databaseadvisors.com [mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Rocky Smolin at Beach Access Software Sent: Friday, January 25, 2008 9:53 AM To: 'Access Developers discussion and problem solving' Subject: [AccessD] Retrieve command line arguments Dear List: I want to run a function in an application (emails out reports) automatically. I see that one way to do this is to use the /x switch on startup to run a macro which will run a module which could have Application.Quit at the end of it. But I can't seem to get this to work. And besides, I'm under the impression that macros are not PC anymore. Anyway, if I can 'see' the startup switches on the command line that calls access and starts the app, I suppose I could intercept al the startup housekeeping, run the reports, send the emails and exit. Is there a way to see what the command was that started an app , IOW retrieve the command line arguments ? Or is there a better way to do this? The automated email sender has to be part of the larger app - originally it was split off for development purposes, but now, it's part of the design that it should be integrated into the application. MTIA Rocky -- AccessD mailing list AccessD at databaseadvisors.com http://databaseadvisors.com/mailman/listinfo/accessd Website: http://www.databaseadvisors.com -- AccessD mailing list AccessD at databaseadvisors.com http://databaseadvisors.com/mailman/listinfo/accessd Website: http://www.databaseadvisors.com No virus found in this incoming message. Checked by AVG Free Edition. Version: 7.5.516 / Virus Database: 269.19.11/1242 - Release Date: 1/24/2008 8:32 PM -- AccessD mailing list AccessD at databaseadvisors.com http://databaseadvisors.com/mailman/listinfo/accessd Website: http://www.databaseadvisors.com -- AccessD mailing list AccessD at databaseadvisors.com http://databaseadvisors.com/mailman/listinfo/accessd Website: http://www.databaseadvisors.com No virus found in this incoming message. Checked by AVG Free Edition. Version: 7.5.516 / Virus Database: 269.19.11/1242 - Release Date: 1/24/2008 8:32 PM