Hallo zusammen
Ich möche eine Programmverwaltung erstellen. Ich habe auf einem Netzwerkshare alle Programme die ich immer benötige.
Da es inzwischen ziemlich viele sind möchte ich ein Programm schreiben welches mir alle Ordner rekursiv ausliest und dann in eine Access Datenbank schreibt. Dank der Funktion von BugFix ist das auslesen kein Problem. Mein Problem ist im Moment das Schreiben in die Access Datenbank.
Ich möchte den Pfad in Acces Datenbank schreiben, um später das Verzeichnis aufzurufen.
Hier mal mein Script
Spoiler anzeigen
#cs ----------------------------------------------------------------------------
[/autoit] [autoit][/autoit] [autoit]AutoIt Version: 3.3.6.0
Author: Storyteller
Script Function:
Programmverwaltung von instdisk.
Das Progamm ist zur übersicht übder die Programme
auf dem Server gedacht.
Im Hintergrund läuft eine MS Access Datenbank.
#ce ----------------------------------------------------------------------------
[/autoit] [autoit][/autoit] [autoit]#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <Access.au3>
#include <_Loginbox.au3>
#include <Array.au3>
#Region ### START Koda GUI section ### Form=
$Programmverwaltung = GUICreate("Programmverwaltung instdisk", 451, 264, 194, 113)
$g_beschreibung = GUICtrlCreateGroup("Beschreibung", 8, 80, 433, 137)
$e_beschreibung = GUICtrlCreateEdit("", 16, 100, 417, 105, $ES_READONLY)
GUICtrlSetData(-1, "")
GUICtrlCreateGroup("", -99, -99, 1, 1)
$bt_dir = GUICtrlCreateButton("Verzeichnis öffnen", 8, 224, 137, 33, $WS_GROUP)
$bt_update = GUICtrlCreateButton("Update", 300, 224, 137, 33, $WS_GROUP)
$l_title = GUICtrlCreateLabel("Programmverwaltung", 8, 8, 171, 24)
GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif")
$Group1 = GUICtrlCreateGroup("Programmauswahl", 8, 32, 433, 49)
$c_type = GUICtrlCreateCombo("Typ", 16, 52, 200, 25)
$c_prog = GUICtrlCreateCombo("Programm", 233, 52, 200, 25)
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
;~ Case $bt_dir
;~ Call ("_OpenDir")
Case $bt_update
Call ("_Update")
EndSwitch
WEnd
;==============================================================================
; Name:_Update
; Description:Liest rekursiv alle Ordner im Verzeochnis X:\
;aus und speichert sie in die MS Access Datenbank
;==============================================================================
Func _Update()
; Hier kommt eine Login Box
;Auflisten der Verzeichnisse
$ret = _GetFilesFolder_Rekursiv('C:\Test\','', 1, 1)
If IsArray($ret) Then
_ArrayDisplay($ret, 'Rekursiv alle Ordner')
Else
MsgBox(0, 'Fehler', $ret & @CRLF)
ConsoleWrite($ret & @CRLF)
EndIf
$aCount = 0
For$j = 0 to 100 Step 1
_accessAddRecord('C:\Test\prog_db.mdb','Test',$ret[$aCount],'path')
$aCount =$aCount +1
Next
EndFunc ;==>_Update
;==================================================================================================
; Function Name: _GetFilesFolder_Rekursiv($sPath [, $sExt='*' [, $iDir=-1 [, $iRetType=0]]])
; Description: Rekursive Auflistung von Dateien und/oder Ordnern
; Parameter(s):$sPath der Basispfad für die Auflistung ('.' -aktueller Pfad, '..' -Parentpfad)
; $sExt Erweiterung für Dateiauswahl '*' oder -1 für alle (Standard)
; $iDir -1 Dateien+Ordner(Standard), 0 nur Dateien, 1 nur Ordner
; optional: $iRetType 0 gibt Array, 1 gibt String zurück (Einträge @LF-getrennt)
; Return Value(s): Array (Standard) od. String mit den gefundenen Pfaden der Dateien und/oder Ordner
; Array[0] enthält die Anzahl der gefundenen Dateien/Ordner
; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
;==================================================================================================
Func _GetFilesFolder_Rekursiv($sPath, $sExt='*', $iDir=-1, $iRetType=0)
Global $oFSO = ObjCreate('Scripting.FileSystemObject')
Global $strFiles = ''
If ($iRetType < 0) Or ($iRetType > 1) Then $iRetType = 0
If $sExt = -1 Then $sExt = '*'
If ($iDir < -1) Or ($iDir > 1) Then $iDir = -1
_ShowSubFolders($oFSO.GetFolder($sPath),$sExt,$iDir)
If $iRetType = 0 Then
Local $aOut
$aOut = StringSplit(StringTrimRight($strFiles,1), @LF)
If $aOut[1] = '' Then
ReDim $aOut[1]
$aOut[0] = 0
EndIf
Return $aOut
Else
Return StringTrimRight($strFiles,1)
EndIf
EndFunc
Func _ShowSubFolders($Folder, $Ext='*', $Dir=-1)
If ($Dir = -1) Or ($Dir = 0) Then
For $file In $Folder.files
If $Ext <> '*' Then
If StringRight($file.Name, StringLen($Ext)) = $Ext Then _
$strFiles &= $file.Path & @LF
Else
$strFiles &= $file.Path & @LF
EndIf
Next
EndIf
For $Subfolder In $Folder.SubFolders
If ($Dir = -1) Or ($Dir = 1) Then $strFiles &= $Subfolder.Path & '\' & @LF
_ShowSubFolders($Subfolder, $Ext, $Dir)
Next
EndFunc
Ich habe Access 2007 und Windows 7 32-bit
Ich habe noch die Access-Datenbank und eine kleines ordner verzeichnis zum testen angefüght.
Danke für eure Hilfe
Storyteller
Edit: Fehlende Dateien angehängt, Errorcode angefüght
Spoiler anzeigen
>"C:\Program Files\AutoIt3\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.exe" /run /prod /ErrorStdOut /in "C:\div\autoit\__Programmverwaltung\main.au3" /autoit3dir "C:\Program Files\AutoIt3" /UserParams
+>17:11:00 Starting AutoIt3Wrapper v.2.0.1.24 Environment(Language:0407 Keyboard:00000807 OS:WIN_7/ CPU:X64 OS:X86)
>Running AU3Check (1.54.19.0) from:C:\Program Files\AutoIt3
C:\div\autoit\__Programmverwaltung\main.au3(117,50) : WARNING: $strFiles possibly not declared/created yet
$strFiles &= $file.Path & @LF
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
C:\div\autoit\__Programmverwaltung\main.au3 - 0 error(s), 1 warning(s)
->17:11:00 AU3Check ended.rc:1
>Running:(3.3.6.0):C:\Program Files\AutoIt3\autoit3.exe "C:\div\autoit\__Programmverwaltung\main.au3"
0C:\div\autoit\__Programmverwaltung\main.au3 (71) : ==> Subscript used with non-Array variable.:
_accessAddRecord('C:\Test\prog_db.mdb','Test',$ret[$aCount],'path')
_accessAddRecord('C:\Test\prog_db.mdb','Test',$ret^ ERROR
->17:11:02 AutoIT3.exe ended.rc:1
>Exit code: 1 Time: 3.168
Zuer genaueren Beschreibung: Es wird nicht in die Datenbank geschrieben und ich seh gerade keinen Fehler