Ah, ok. Danke jetzt habe ich es kapiert...
Beiträge von Sonderbaar
-
-
So ein Fehler wird nicht zwangsweise von Nicht-Objekten geworfen. Es kann auch sein, dass das Objekt gültig ist und man Methoden aufrufen kann aber einige einfach fehlschlagen.
Da ist es besser ein ObjEvent zu registrieren welche eine COM-Meldung auswirft und AutoIt nicht crasht sondern in die Fehlerfunktion springt.
HÄH?
-
Ich muss leider nochmal stören...
irgendwie habe ich noch ein Problem mit einer Schleife...
offenbar bricht das Script bei einem Dateinamen ab, der den Aufbau: Textdatei für Maschine aus Dokument 'ABCDEFG...'.txt hat
Mal davon abgesehen, dass man den Ersteller eigentlich dafür erschlagen müsste...
möchte ich gerne, dass das Script, die Datei die den Fehler generiert, in eine Textdatei schreibt und dann einfach die nächste Datei nimmt, statt sich gleich komplett zu verabschieden.
Vor lauter Verzweiflung habe ich den if @error doppelt reingemacht... die MsgBox zum Fehler die ich erhalte lautet:
AutoIt Error
Line 3126 (File C:\scripte\besitzer.exe"):
Error: The Requested action with this object has failed.
Spoiler anzeigen
AutoIt
Alles anzeigen#Include <File.au3> #Include <Array.au3> #include <_GetFilesFolder_Rekursiv.au3> #include <MySQL.au3> #include <TrayConstants.au3> hotKeySet("{ESC}", "Terminate") $pfad = $CmdLine[1] $folder = $CmdLine[2] $file = FileOpen("C:\scripte\Fehlerdatei.txt", $FO_APPEND) TrayTip("Array einlesen", "Ich lese das Array ein", 5) $test = _GetFilesFolder_Rekursiv($pfad & $folder, '*', "0") $SQL = _MySQLConnect("user","password","table_name","IP") TrayTip("Ich führe den Rest aus", "Jetzt hole ich mir den Rest", 10) For $i = 1 to $test[0] $insert_datensatz_anlegen = "INSERT INTO fs_owner (dateipfad, groesse, owner, modified, created, accessed) VALUES ('" & StringRegExpReplace($test[$i], '\\', '\\\\') & "','" & _GetExtProperty($test[$i], 1) & "','" & StringRegExpReplace(_GetExtProperty($test[$i], 8), '\\', '\\\\', 8) & "','" & StringRegExpReplace(_GetExtProperty($test[$i], 3), '(\d{2}).(\d{2}).(\d{4}) (\d{2}):(\d{2})', '$3-$2-$1 $4:$5') & "','" & StringRegExpReplace(_GetExtProperty($test[$i], 4), '(\d{2}).(\d{2}).(\d{4}) (\d{2}):(\d{2})', '$3-$2-$1 $4:$5') & "','" & StringRegExpReplace(_GetExtProperty($test[$i], 5), '(\d{2}).(\d{2}).(\d{4}) (\d{2}):(\d{2})', '$3-$2-$1 $4:$5') & "');" If @error Then FileWriteLine($file, $test[$i]) ContinueLoop EndIf _Query($SQL,$insert_datensatz_anlegen) If @error Then FileWriteLine($file, $test[$i]) ContinueLoop EndIf Next FileClose($file) Func Terminate() Exit 0 EndFunc ;~ =============================================================================== ; Function Name: GetExtProperty($sPath,$iProp) ; Description: Returns an extended property of a given file. ; Parameter(s): $sPath - The path to the file you are attempting to retrieve an extended property from. ; $iProp - The numerical value for the property you want returned. If $iProp is is set ; to -1 then all properties will be returned in a 1 dimensional array in their corresponding order. ; The properties are as follows: ; Name = 0 ; Size = 1 ; Type = 2 ; DateModified = 3 ; DateCreated = 4 ; DateAccessed = 5 ; Attributes = 6 ; Status = 7 ; Owner = 8 ; Author = 9 ; Title = 10 ; Subject = 11 ; Category = 12 ; Pages = 13 ; Comments = 14 ; Copyright = 15 ; Artist = 16 ; AlbumTitle = 17 ; Year = 18 ; TrackNumber = 19 ; Genre = 20 ; Duration = 21 ; BitRate = 22 ; Protected = 23 ; CameraModel = 24 ; DatePictureTaken = 25 ; Dimensions = 26 ; Width = 27 ; Height = 28 ; Company = 30 ; Description = 31 ; FileVersion = 32 ; ProductName = 33 ; ProductVersion = 34 ; Requirement(s): File specified in $spath must exist. ; Return Value(s): On Success - The extended file property, or if $iProp = -1 then an array with all properties ; On Failure - 0, @Error - 1 (If file does not exist) ; Author(s): Simucal (Simucal@gmail.com) ; Note(s): ; ;=============================================================================== Func _GetExtProperty($sPath, $iProp) Local $iExist, $sFile, $sDir, $oShellApp, $oDir, $oFile, $aProperty, $sProperty $iExist = FileExists($sPath) If $iExist = 0 Then SetError(1) Return 0 Else $sFile = StringTrimLeft($sPath, StringInStr($sPath, "\", 0, -1)) $sDir = StringTrimRight($sPath, (StringLen($sPath) - StringInStr($sPath, "\", 0, -1))) $oShellApp = ObjCreate ("shell.application") $oDir = $oShellApp.NameSpace ($sDir) $oFile = $oDir.Parsename ($sFile) If $iProp = -1 Then Local $aProperty[35] For $i = 0 To 34 $aProperty[$i] = $oDir.GetDetailsOf ($oFile, $i) Next Return $aProperty Else $sProperty = $oDir.GetDetailsOf ($oFile, $iProp) If $sProperty = "" Then Return 0 Else Return $sProperty EndIf EndIf EndIf EndFunc ;==>_Get
Hilfe!!!
-
streitet euch nicht die Lösung kam ja, egal von wem...
-
Nein, du hast StringRegExpReplace($test[$i], '\\', '\\') zwei Backslash durch zwei andere ersetzt
Aber:
Ersetzt den Backslash doch zu einem b... also muss es korrekt heißen:
Danke für eure Geduld!!!
-
Backslashes müssen in MySQL escaped werden.
Am einfachsten durch Dopplung: "C:\Test" -> "C:\\Test"ABER... ich habe doch durch den RegEx quasi "Escaped" oder nicht? (Zeile 17 in meinem Script)
Dopplung geht ja nicht, da der String ja durch die Funktion _GetFilesFolder_Rekursiv schon kommt...
Ich bin verwirrt.
-
Hallo liebe Autoitler...
folgender Code soll eine Verzeichnisübersicht geben und diese in eine MYSQL-Tabelle der Version 3.51 reinpumpen.
für den mysql-connect müsstet ihr nur die Zugangsdaten ändern und die Tabelle bei euch anlegen mit ID_NR (Autoincrement), dateipfad und groesse_in_bytes
Datentypen sind: Int, Varchar, Int
Ziel ist es den Pfad C:\ in die Spalte dateipfad zu bekommen... leider ist es so, dass beim schreiben in die DB der "\" Backslash einfach weg gelassen wird...
Auch ein StringRegExpReplace schafft dem ganzen keine Abhilfe...
Meine Frage jetzt: Geht es nur mit der MYSQL-Version nicht? Oder habe ich irgendwo einen anderen Fehler? Meines erachtens muss ich den StringRegExpReplace garnicht nutzen, da im Array der Pfad ja korrekt angezeigt wird... war aber ein Strohhalm an den ich mich geklammert hatte...
Spoiler anzeigen
C
Alles anzeigen#Include <File.au3> #Include <Array.au3> #include <_GetFilesFolder_Rekursiv.au3> #include <MySQL.au3> hotKeySet("{ESC}", "Terminate") $pfad = "C:\" $folder = "app" $test = _GetFilesFolder_Rekursiv($pfad & $folder, '*', "0") $SQL = _MySQLConnect("user","password","table_name","IP") ;~ $test2 = StringRegExpReplace("C:\todo\bla\", '\\', '\\') ;~ ConsoleWrite($test2) For $i = 1 to $test[0] $insert_datensatz_anlegen = "INSERT INTO fs_owner (ID_NR, dateipfad, groesse_in_bytes) VALUES ('', '" & StringRegExpReplace($test[$i], '\\', '\\') & "','" & _GetExtProperty($test[$i], 1) & "');" _Query($SQL,$insert_datensatz_anlegen) Next Func Terminate() Exit 0 EndFunc ;~ =============================================================================== ; Function Name: GetExtProperty($sPath,$iProp) ; Description: Returns an extended property of a given file. ; Parameter(s): $sPath - The path to the file you are attempting to retrieve an extended property from. ; $iProp - The numerical value for the property you want returned. If $iProp is is set ; to -1 then all properties will be returned in a 1 dimensional array in their corresponding order. ; The properties are as follows: ; Name = 0 ; Size = 1 ; Type = 2 ; DateModified = 3 ; DateCreated = 4 ; DateAccessed = 5 ; Attributes = 6 ; Status = 7 ; Owner = 8 ; Author = 9 ; Title = 10 ; Subject = 11 ; Category = 12 ; Pages = 13 ; Comments = 14 ; Copyright = 15 ; Artist = 16 ; AlbumTitle = 17 ; Year = 18 ; TrackNumber = 19 ; Genre = 20 ; Duration = 21 ; BitRate = 22 ; Protected = 23 ; CameraModel = 24 ; DatePictureTaken = 25 ; Dimensions = 26 ; Width = 27 ; Height = 28 ; Company = 30 ; Description = 31 ; FileVersion = 32 ; ProductName = 33 ; ProductVersion = 34 ; Requirement(s): File specified in $spath must exist. ; Return Value(s): On Success - The extended file property, or if $iProp = -1 then an array with all properties ; On Failure - 0, @Error - 1 (If file does not exist) ; Author(s): Simucal (Simucal@gmail.com) ; Note(s): ; ;=============================================================================== Func _GetExtProperty($sPath, $iProp) Local $iExist, $sFile, $sDir, $oShellApp, $oDir, $oFile, $aProperty, $sProperty $iExist = FileExists($sPath) If $iExist = 0 Then SetError(1) Return 0 Else $sFile = StringTrimLeft($sPath, StringInStr($sPath, "\", 0, -1)) $sDir = StringTrimRight($sPath, (StringLen($sPath) - StringInStr($sPath, "\", 0, -1))) $oShellApp = ObjCreate ("shell.application") $oDir = $oShellApp.NameSpace ($sDir) $oFile = $oDir.Parsename ($sFile) If $iProp = -1 Then Local $aProperty[35] For $i = 0 To 34 $aProperty[$i] = $oDir.GetDetailsOf ($oFile, $i) Next Return $aProperty Else $sProperty = $oDir.GetDetailsOf ($oFile, $iProp) If $sProperty = "" Then Return 0 Else Return $sProperty EndIf EndIf EndIf EndFunc ;==>_Get
-
Du hast Glück weil ich gerade etwas Zeit übrig hatte.
Da du dich unnötig kompliziert ausgedrückt hast, hab ich nicht wirklich verstanden was du wolltest,
aber ich denke mein Script sollte in die richtige Richtung gehen.
An deine Bedürfnisse anpassen darfst du es selber.
Ja danke zumindest wird die Combobox aus dem Array heraus bedient... ist quasi der zweite Teil meiner Frage
Echt wars so kompliziert? Ich versuche eigentlich immer alles so haarklein wie möglich zu formulieren, dass es (hoffentlich) jeder versteht...
Ganz unverständlich wars ja nicht, denn Alpines hat den ersten Teil geliefert... Danke dafür!
-
Hallo Freunde,
ich hätte da gerne mal wieder ne Hilfe von euch...
In einer Textdatei haben ich folgenden Inhalt.
ID|ANLEITUNG|PFAD
0001|1234|
0002|5678|
0001|9010|
0002|4234|
0003|2342|
0004|6546|
Mein Script packt sich die Datei, tüdelt das ganze zunächst in ein Array. Dann bearbeite ich mit einem Split dieses Array und verfrachte es wieder in ein neues Array.
Spoiler anzeigen
C
Alles anzeigen#include <file.au3> #include <array.au> Local $Array, $array3d[113][4] _FileReadToArray(@ScriptDir & "\Anleitung.txt", $Array) For $i = 1 to UBound($Array)-1 $aDimension = StringSplit($Array[$i], "|") Consolewrite($aDimension[1] & @TAB & $aDimension[2] & @TAB & $aDimension[3] & @CRLF) ;~ _ArrayDisplay($aDimension) $array3d[$i-1][0] = $aDimension[1] $array3d[$i-1][1] = $aDimension[2] $array3d[$i-1][2] = $aDimension[3] Next _ArrayDisplay($array3d) $artikel_gui = GUICreate("IDs", 500, 400, 183, 115, BitOR($GUI_SS_DEFAULT_GUI, $WS_MAXIMIZEBOX, $WS_SIZEBOX), $WS_EX_WINDOWEDGE) GUISetFont(10, 400, 0, 'Arial') $eingabe_gui = GUICreate("Bitte wählen Sie die ID", 500, 400, 183, 115, BitOR($GUI_SS_DEFAULT_GUI, $WS_MAXIMIZEBOX, $WS_SIZEBOX), $WS_EX_WINDOWEDGE) GUISetFont(10, 400, 0, 'Arial') $combo_kostenstelle = GUICtrlCreateCombo("Hier ID wählen", 120, 80, 281, 25, default) For $t = 1 to UBound($array3d)-1 GUICtrlSetData($combo_kostenstelle, $array3d[$t][0], "0000") Next GUISetState(@SW_SHOW) While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE GuiDelete($artikel_gui) ExitLoop EndSwitch WEnd EndFunc
Soweit so gut... jetzt möchte ich aber gerne, dass die Werte mit der gleichen ID quasi in eine Zeile zusammen gepackt werden. (wie auf dem Bild zu sehen)
Muss ich im zweiten Array, nach den Werten aus dem ersten Array suchen? Oder wie bewerkstellige ich das am besten??? Gibts Vorschläge die das ganze saubere Lösen könnten?
Ziel soll nachher sein, dass ich in einer Combox die jeweilige ID auswähle (ich kriege es auch nicht hin, die ID-Werte aus dem Array da anzuzeigen) und dann die bis zu 4 Anleitungen, die dann in der jeweiligen Spalte hinter der ID stehen, in der GUI zur Anzeigen bringen kann.
Helft einem blöden bitte, was schlauer zu werden -
Ich werd mir Dolibarr gern mal ansehen, aber da das Ziel ebend nicht ist, ein vollwertiges ERP zu schreiben da er weiterhin alles via Papier machen möchte
Ich denke er wird dann irgendwann in seinem Papierwust untergehen... Digitalisieren wäre schon der richtige weg. Immerhin schreibt er seine Rechnungen oder was auch immer ja schließlich auch schon auf dem Computer (digital) und nicht mehr mit der Schreibmaschiene Mal abgesehen davon, was ist wenn er mal was suchen muss? Wie ist da die Ablage in den Ordnern?
Aktuell sprechen wir denke ich von ein paar "Kunden" und eben ein paar "Dokumenten". Was aber wenn er wirklich den Durchbruch schafft und es mehr wird??? Bestelldokumente, Lieferantendokumente, Auftragsbestätigungen, diverse Kundendokumente (Angebote, eigene Auftragsbestätigungen, Rechnungen an den Kunden und und und) Klar hängt jetzt auch ein wenig davon ab, mit was er sich selbstständig gemacht hat und was ihm nachher auch wichtig ist...
Hinzu kommt dann noch die DSGVO und wie Bugfix auch schon geschrieben hat die Aufbewahrungspflicht.
UND denkt mal an die Umwelt heutzutage wird alles gemailt, teilweise sogar noch gefaxt. Oder ist sein Plan: Ausdrucken des Dokumentes, dann wieder einscannen und danach verschicken? Oder druckt es aus, druckt es parallel als PDF und verschickt es dann? Fragen über Fragen...Ich möchte dir jetzt auch nix verkaufen oder gar aufdrängen, aber drüber nachdenken, was meine Vorschreiber auch schon geschrieben haben, solltet ihr beiden schon, erspart dir nachher auch "ein wenig" Programmierarbeit
-
Erstellen kann man ausfüllbare PDF Vorlagen sehr schnell und man kann die Felder einer PDF Datei selber bestimmen, damit es mit AutoIt besser angesprochen werden kann.
Nutzt du dafür OpenSource (wenn ja was) oder den Platzhirsch???
-
Was wohl geht, ist folgendes:
#AutoIt3Wrapper_Run_Debug_Mode=Y ;(Y/N) Run Script with console debugging. Default=N
Das tut auch was es soll... Danke!
-
Hallo zusammen,
kann man irgendwo einstellen, dass im Scite angezeigt wird, an welcher Stelle er sich gerade befindet? (Ähnlich wie bei VBA unter Excel, wenn man z.B. mit F8 Schritt für Schritt das Script durchgeht, wird die ganze Zeile des auszuführenden Codes gelb markiert)
Geht das mit Scite auch irgendwie?
-
Zwei mögliche Varianten:
Erste Möglichkeit OHNE Autoit...
Automatisches Komprimieren und Reparieren einer Datenbank beim Schließen
Sie können die Datenbankoption Beim Schließen komprimieren auswählen, wenn eine Datenbank automatisch komprimiert und repariert werden soll, wenn diese geschlossen wird.
Hinweis : Das Festlegen dieser Einstellung wirkt sich nur auf die Datenbank aus, die aktuell geöffnet ist. Sie müssen diese Option für jede Datenbank separat festlegen, die automatisch komprimiert und repariert werden soll.
-
Klicken Sie auf der Registerkarte Datei auf Optionen.
-
Klicken Sie im Dialogfeld Access-Optionen auf Aktuelle Datenbank.
-
Aktivieren Sie unter Anwendungsoptionen das Kontrollkästchen Beim Schließen komprimieren.
Zweite Möglichkeit quasi mit Autoit, nämlich mit Hilfe einer ShellExecute (ungetestet, nicht die von MS empfohlene Variante sondern die Kombi mit ShellExecute)...
Geben Sie z. B. Folgendes ein: "C: \Programme\Microsoft Office\Office14\msaccess.exe"
Geben Sie nach dem schließenden Anführungszeichen ein Leerzeichen ein, und geben Sie dann den vollständigen Pfad zu der Datenbank ein, die Sie komprimieren und reparieren möchten. Wenn der Pfad Leerzeichen enthält, schließen Sie den Pfad in Anführungszeichen ein. Geben Sie ein weiteres Leerzeichen ein, und geben Sie dann /compact ein.
Geben Sie z. B. Folgendes ein: "C:\Mein Ordner\Meine Datenbank.accdb" /compact
-
-
Tja schwierig ohne die "interne Webanwendung"
-
Da wir hier im Unternehmen schon Barcodes einsetzen um BDE-Zeiten zu stempeln (Rüstzeiten, Fertigungszeiten), diese Barcodes aber aus ChristalReports heraus erstellt werden, wollte ich eine Alternative erarbeiten...
-
Ja der Beitrag hat mir weiter geholfen! Vielen Dank!
-
Hallo zusammen,
sicherlich gibts sowas bestimmt schonmal irgendwo... da gibts nen Beitrag von Alina bezüglich Barcodes, aber irgendwie betrifft die Barcode-Demo, samt barcode.au3 nur EAN 13, ich brauche aber Barcode 39 als Ausgabe. (Alinas Beitrag)
Also es kommt eine X-beliebige Eingabe also Bsp: A123456, dann sollte der hier im Anhang zu findende Barcode erstellt werden...
Habe auch erstmal versucht in einer GUI die Schriftart einzupflegen (Schriftart ist im Fonts-Ordner von Windows auch installiert), funktioniert aber mit der üblichen, ich ändere einfach von Arial auf was anderes, nicht...
Spoiler anzeigen
AutoIt
Alles anzeigen#include <array.au3> #include <MySQL.au3> #include <ListViewConstants.au3> #include <GuiListView.au3> #include <GUIConstantsEx.au3> #include <ButtonConstants.au3> #include <GUIListBox.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> #include <GuiStatusBar.au3> #include <MsgBoxConstants.au3> #include <EditConstants.au3> #include <TabConstants.au3> $form = GUICreate("Was machst du wieder für Mist?", 200, 150, 183, 115) $ueberschrift_db_auswahl = GUICtrlCreateLabel("Hier hätte ich gerne Barcode 39", 24, 40, 150, 30, $SS_CENTER) GUICtrlSetFont($form, 10, 400, 0, "Bar-Code 39") GUISetState(@SW_SHOW) While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit EndSwitch WEnd
Danke im voraus für konstruktive Beiträge
-
Hier hast du übrigens eine vergleichbare Frage hestellt...
Wie kannst du das alles nachhalten?
-
Das kann ich leider nicht, weil es sich um eine Firmeninterne Internetseite handelt.
Da wir nicht Hellsehen können, wird es schwierig sein dir so zu helfen... sicherlich wäre es hilfreich uns wenigstens eine HTML-Datei der Seite bereitzustellen