Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations strongm on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

Access 2000 to 2002 (Shell command)

Status
Not open for further replies.

knuckle05

Programmer
Dec 17, 2001
247
CA
Hi All,

I have just migrated an existing system to Access 2002. In my script, I Shell out to an EXE file which runs an update process.

In my old version, the code after the SHELL command would not run until the EXE file had finished, but now it seems that the code tuns immediately after running the SHELL command. This cause a numebr of headaches.

How could I get the handle of the application or window and the loop until this window is closed?

Or more simply put, is there a way to run an external process in modal mode? Any help would be appreciated.

 
'This code substitutes "Execmd" for "Shell"....See example at bottom


'Paste this at the module level


Public PAGE_HEADER_SUPCODE As String 'PRODUCER CODE FROM PAGE HEADER VIA EXTRACT PROCEEDURE
Public PLANTCODE As String 'PRODUCER CODE FROM PAGE HEADER VIA FILE CREATED BY EXTRACT PROCEEDURE
Public PLANTNAME As String 'PRODUCER NAME FROM PAGE HEADER VIA FILE CREATED BY EXTRACT PROCEEDURE
Public PLANTTYPE As String 'PRODUCT TYPE FROM PAGE HEADER VIA FILE CREATED BY EXTRACT PROCEEDURE
Public TBLX As String 'ALTERENATE PRODUCER CODE FROM USER (MUST LIVE IN TABLE A TO BE VALID)
Public X As Single 'array1 marker
Public StrTable_Name(20) As String 'ARRAY1 FROM PADOT.CFG FILE
Public TBL As String 'array1 variable for padot.cfg file table names
Public WEDT As String 'week ending date variable from input box in sub CONFIRM_WE_DATE
Public LASTX As Single 'the last table in array1
Public T As Single 'timer value (NOT USED)
Public WEDT_EMAIL As String 'WEEK ENDING DATE FROM 00 PAGE HEADER TABLE FOR E_MAIL FILE NAME
Public DELAY As Long ' NOT USED
Public FINDFILE As String 'find file for zip to confirm zip files have been written
Public TITLE As String
Public OLDTBLX As String
Option Explicit

Private Type STARTUPINFO
cb As Long
lpReserved As String
lpDesktop As String
lpTitle As String
dwX As Long
dwY As Long
dwXSize As Long
dwYSize As Long
dwXCountChars As Long
dwYCountChars As Long
dwFillAttribute As Long
dwFlags As Long
wShowWindow As Integer
cbReserved2 As Integer
lpReserved2 As Long
hStdInput As Long
hStdOutput As Long
hStdError As Long
End Type

Private Type PROCESS_INFORMATION
hProcess As Long
hThread As Long
dwProcessID As Long
dwThreadID As Long
End Type

Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal _
hHandle As Long, ByVal dwMilliseconds As Long) As Long

Private Declare Function CreateProcessA Lib "kernel32" (ByVal _
lpApplicationName As Long, ByVal lpCommandLine As String, ByVal _
lpProcessAttributes As Long, ByVal lpThreadAttributes As Long, _
ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, _
ByVal lpEnvironment As Long, ByVal lpCurrentDirectory As Long, _
lpStartupInfo As STARTUPINFO, lpProcessInformation As _
PROCESS_INFORMATION) As Long

Private Declare Function CloseHandle Lib "kernel32" (ByVal _
hObject As Long) As Long

Private Const NORMAL_PRIORITY_CLASS = &H20&
Private Const INFINITE = -1&


Option Compare Database


Public Sub ExecCmd(cmdline$)
Dim proc As PROCESS_INFORMATION
Dim start As STARTUPINFO
Dim ReturnValue As Integer

' Initialize the STARTUPINFO structure:
start.cb = Len(start)

' Start the shelled application:
ReturnValue = CreateProcessA(0&, cmdline$, 0&, 0&, 1&, _
NORMAL_PRIORITY_CLASS, 0&, 0&, start, proc)

' Wait for the shelled application to finish:
Do
ReturnValue = WaitForSingleObject(proc.hProcess, 0)
DoEvents
Loop Until ReturnValue <> 258

ReturnValue = CloseHandle(proc.hProcess)
End Sub

'-------------------------------------------------------------------------------------------------------

Sub example()
'Example of replacing &quot;Shell&quot; with &quot;Execmd&quot;...You won't need to paste this sub/function, just the first 2

'then use this syntax in place of Shell &quot;Your shell string here&quot;

'you would use...

ExecCmd &quot;Your shell string here&quot;

End Sub





'-------------------------------------------------------------------------

 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top