작업 스케줄러에서 배치 파일을 통해 VBS 파일을 호출하는 중 일부 항목이 검색되었지만 실행되지 않습니다.VBS + 작업 스케줄러를 사용하여 공유 .mdb 파일에서 레코드 수 얻기
내 경우에는 VBS 파일이 작업 스케줄러에서 실행되지만 공유 데이터베이스 (.mdb)의 레코드 수를 잡아내는 논리가 올바르게 작동하지 않습니다. 이상적으로, 내 VBS 파일은 현재 하루에 얼마나 많은 유닛이 만들어 졌는지 확인하고 해당 DATE, TIME 및 TOTAL 유닛을 출력합니다. DATE 및 TIME은 고정 값이고 TOTAL은 내 레코드 카운트입니다.
* 작업 스케줄러에서 내 VBS 파일이 올바르게 작동하지 않지만 수동으로 실행하면 올바르게 작동한다는 점에 유의해야합니다. 이것은 내가 머리를 감쌀 수없는 것이다.
은 여기 내 출력 파일 (.csv) 작업 스케줄러
DATE TIME TOTAL
01/13/2017 16:30 165
01/13/2017 16:35 169
01/13/2017 16:40 173
01/13/2017 16:45 176
01/13/2017 16:50 179
에 5 분마다 실행, 어떻게 보일지의 예하지만 지금의로, 나는 단지 아래의 출력을 얻고있다.
DATE TIME TOTAL
01/13/2017 16:30 recordset is empty
01/13/2017 16:35 recordset is empty
01/13/2017 16:40 recordset is empty
01/13/2017 16:45 recordset is empty
01/13/2017 16:50 recordset is empty
작업 스케줄러는 매일 오전 7 시부 터 오후 10 시까 지이 VBS 코드를 실행합니다. 아직 단위가 생성되지 않은 경우 단위가 생성 될 때까지 TOTAL은 '레코드 세트가 비어 있음'을 표시해야합니다. 문제는 내 코드가 전체 레코드에 대해서만 '레코드 세트가 비어 있습니다'라는 파일을 생성하고 있다는 것입니다. 나는 윈도우 7
에게 64 비트에 - 설정 환경 변수
- 날짜 로직
- 기록을 DAO를 실행할 수 있도록 사용
-A 복사 붙여 넣기 코드 : 여기
는로 분리 내 VBS 코드입니다 나는 레코드 수의 논리에 잘못 가고 어디에 파일을Option Explicit
'////////////////////////////////IGNORE - COPY PASTED TO GET DAO.DBENGINE.36 RUNNING//////////////////////////
CheckOSx86x64Args()
dim JRO, SC, DAO
Rem main code begins here
Set JRO = CreateObject("JRO.JetEngine")
Set SC = CreateObject("ScriptControl")
Set DAO = CreateObject("DAO.DBEngine.36")
Sub CheckOSx86x64Args()
Dim CmdLn, Arg
With CreateObject("WScript.Shell")
If Replace(LCase(WScript.Path), LCase(.ExpandEnvironmentStrings("%windir%\")), "") = "system32" Then
CmdLn = Replace(LCase(WScript.FullName), "system32", "syswow64")
If CreateObject("Scripting.FileSystemObject").FileExists(CmdLn) Then
CmdLn = CmdLn & " """ & WScript.ScriptFullName & """"
For Each Arg In WScript.Arguments
CmdLn = CmdLn & " """ & Arg & """"
Next
.Run CmdLn, 1, True 'added " ,1, True " in hopes of waiting until whatever process is running is done. read into bwaitonreturn
WScript.Quit
End If
End If
End With
End Sub
'////////////////////////////////////////////ENVIRONMENT/////////////////////////////////////////////////////
'////////////////////////////////////////////////////////////////////////////////////////////////////////////
'On Error Resume Next
Const ForWriting = 2
Const ForAppending = 8
Dim rst, oJet, oDB 'As DAO.DBEngine, DAO.Database, DAO.Recordset
Dim fso, GetTheBase
Dim formatDate, SQLdate, csvCurrentTime 'date format
Dim counterFSO, activeWbTest, objworkbook, objLogFile
Dim origLP, destpath
Dim Total
Const QRY_NAME = "Results" 'Table to export
csvCurrentTime = Hour(now) & ":" & Minute (now)
origLP = "\\192.168.1.240\ProductionSrvr2\SIMULATION\LongPulse.mdb"
destpath = "\\192.168.1.240\ProductionSrvr2\PROGRESS_LOGS\SM"
'///////////////////////////////////////////////DATE/////////////////////////////////////////////////////////
'////////////////////////////////////////////////////////////////////////////////////////////////////////////
'check if date provided as an argument;if provided, use that data, otherwise, determine date
If WScript.Arguments.Count > 0 Then
SQLdate = WScript.Arguments.Item(0) 'Query date, MM/DD/YYYY with 0's
formatDate = Replace(SQLdate,"/","")'File extension date
Else
SQLdate = Right("0" & Month(Now()), 2)& "/" & Right("0" & Day(Now()), 2)& "/" & Year(Now()) 'Query date
'SQLdate = "01/13/2017"
formatDate = Replace(SQLdate,"/","")'File extension date
End If
'//////////////////////////////////////////////RECORDCOUNT LOGIC/////////////////////////////////////////////
'////////////////////////////////////////////////////////////////////////////////////////////////////////////
Set fso = CreateObject("Scripting.FileSystemObject")
GetTheBase = "SM_" & formatDate & ".csv" 'adding csv to the file
Set oJet = CreateObject("DAO.DBEngine.36")
Set oDB = oJet.OpenDatabase(origLP)
'Query database for 'distinct ID' from table 'Results' where the column 'Test_Date' contains the system date
Set rst = oDB.OpenRecordset("SELECT DISTINCT ID FROM " & QRY_NAME & " WHERE Test_Date LIKE '*" & SQLdate & "*' ")
If rst.EOF = True Then
Total = "recordset is empty"
Else
Total = rst.RecordCount
End If
oDB.Close
Set oDB = Nothing
Set oJet = Nothing
'//////////////////////////////////////OUTPUT TO .CSV FILE///////////////////////////////////////////////////
'////////////////////////////////////////////////////////////////////////////////////////////////////////////
'checks if .csv file already exists. If it doesn't, it creates file with headers. If it does, it skips the 'if' statement
Set counterFSO = CreateObject("Scripting.FileSystemObject")
If Not counterFSO.FileExists(GetTheBase) Then
Set objLogFile = counterFSO.CreateTextFile(GetTheBase, ForWriting)
objLogFile.Writeline chr(34) & _
"DATE" & chr(34) & "," & chr(34) & _
"TIME" & chr(34) & "," & chr(34) & _
"TOTAL" & chr(34) & ","
Set objLogFile = nothing 'prevents "permission denied" error.set objLogFile to nothing for the next .opentextfile action
End If
Set objLogFile = counterFSO.OpenTextFile(GetTheBase, ForAppending)
objLogFile.Writeline chr(34) & _
SQLdate & chr(34) & "," & chr(34) & _
csvCurrentTime & chr(34) & "," & chr(34) & _
Total & chr(34) & ","
Set objLogFile = nothing
을 .csv로 로직
- 출력을 계산 모르겠습니다. 우선 Set rst = oDB.OpenRecordset("SELECT DISTINCT ID FROM " & QRY_NAME & " WHERE Test_Date LIKE '*" & SQLdate & "*' ")
을 사용하여 Test_Date
이 내 SQLdate
(항상 현재 날짜를 나타냄)과 유사한 고유 레코드 (기준으로 ID 사용)를 선택하는 것으로 시작합니다.
내 생각 엔 문제가 더 유닛이 아직 생성되지 않았다면, 내 레코드가 완전히 비어 있어야
If rst.EOF = True Then
Total = "recordset is empty"
Else
Total = rst.RecordCount
End If
이 부분에 자리 잡고 있다는 점이다. 나는이 상황을 감지하기 위해 .EOF
을 사용하지만, 현재 코드는 단위가 생성되었을 때 실제 레코드 수를 기록하는 대신 항상 rst.EOF = True
이라고 생각합니다. 다시, VBS 파일을 작업 스케줄러 대신 수동으로 실행할 때 정확한 레코드 수를 얻을 수 있습니다. 여기
Title Comment ID Test_Date Test_Time Pmax
AU29 PL1 H160019608 01/13/2017 1:03:16 PM 351.9642
AU29 PL1 H160019917 01/13/2017 1:03:35 PM 351.9942
AU29 PL1 H160019940 01/13/2017 1:03:56 PM 356.2267
AU29 PL1 H160019940 01/13/2017 1:04:17 PM 356.2153
배치 파일은 단순히 내 .vbs 파일 (UniqueCounter.vbs)를 호출 카운트 레코드 ID 및 Test_Date를 조회 할 경우 수 (.mdb) 파일을 다음 클라우드 데이터베이스의 예 코드 :
set SM_DEST="\\192.168.1.240\ProductionSrvr2\PROGRESS_LOGS\SM"
set sim_count="\\192.168.1.240\ProductionSrvr2\PROGRESS_LOGS\BIN\UniqueCounter.vbs"
REM collect simulation data
pushd %SM_DEST%
%sim_count%
popd
누구나 내가이 문제를 해결하는 방법을 알 수 있습니까? 어떤 도움이라도 대단히 감사하겠습니다.
참고로, 귀하의 MDB 파일이 "클라우드"에 있지 않은 LAN의 네트워크 공유에 있기 때문입니다. 귀하의 질문에서 그 구절을 제거하십시오, 그것은 오해의 소지가 있습니다. – Tomalak
좋은 점, 편집 해 주셔서 감사합니다. – Joshua