Dude Posted October 16, 2017 Posted October 16, 2017 Hello, i have this script. If i run it as .au3 i get Exit Code: -1073741819. If i compile this script and run it as .exe it runs without error?! It will exit at this point: _FileReadDbf expandcollapse popup#include <Excel.au3> #include <File.au3> #include <Date.au3> #include <Array.au3> #include <MsgBoxConstants.au3> ;$lw="s:" $lw = "d:" Global $x = 1 FileDelete($lw & "\Arbeit\KV_Genehmigungen\KV-Genehmigungen_3M.ini") $kopieren1 = FileCopy($lw & "\COSINOS\Daten\OC\DbAckermann\rezept.dbf", @TempDir & "\rezept.dbf", 1) If $kopieren1 <> 1 Then MsgBox(262192, "Fehler", "Die Datei REZEPT.DBF konnte nicht kopiert werden! Bitte an die EDV wenden.", 0) Exit EndIf $aData = _FileReadDBF(@TempDir & "\rezept.dbf", 1, False) ;2 = OEM zu ANSI msgbox(0,"test","test") _ArraySort($aData, 0, 0, 0, 3) ;Sortieren KV Datum Absteigend 41 - 1 vorne = Absteigend $Anzahl_Rezepte = UBound($aData) Do $Kundennummer = StringStripWS($aData[$x][0], 8) ; 8 entfernt alle Leerzeichen $Rezeptnummer = StringStripWS($aData[$x][1], 8) ; 8 entfernt alle Leerzeichen $Name = StringStripWS($aData[$x][2], 3) ; 3 entfernt nur vorne und hinten $Versart = StringStripWS($aData[$x][3], 3) ; 3 entfernt nur vorne und hinten $Kasse = StringStripWS($aData[$x][20], 3) ; 3 entfernt nur vorne und hinten $KVDatum = StringStripWS($aData[$x][45], 3) ; 3 entfernt nur vorne und hinten $KVGDatum = StringStripWS($aData[$x][46], 3) ;3 entfernt nur vorne und hinten $Lieferdatum = StringStripWS($aData[$x][40], 3) $VNummer = StringStripWS($aData[$x][31], 3) $Aktenzeichen = StringStripWS($aData[$x][84], 3) $KVDatumFormat_Jahr = StringLeft($KVGDatum, 4) $KVDatumFormat_Monat = StringMid($KVGDatum, 5, 2) $KVDatumFormat_Tag = StringRight($KVGDatum, 2) $KVDatumkomplett = $KVDatumFormat_Jahr & "/" & $KVDatumFormat_Monat & "/" & $KVDatumFormat_Tag If $Kundennummer = "107580" Or $Kundennummer = "123440" Then $Testkunde = 1 Else $Testkunde = 0 EndIf If $KVDatum <> 0 And $KVGDatum <> 0 And $Testkunde = 0 Then If $KVDatumFormat_Jahr = @YEAR Or $KVDatumFormat_Jahr = @YEAR - 1 Then ; Nur das aktuelle Jahr und + 1 $Datumsunterschied = _DateDiff('M', $KVDatumkomplett, _NowCalc()) ;################# Test ########## Global $LVA = StringInStr($Kasse, "LVA") Global $Arbeitsamt = StringInStr($Kasse, "Arbeitsamt") Global $Bahn_See = StringInStr($Kasse, "Bahn See") Global $BG = StringInStr($Kasse, "BG", 1) Global $Unfallkasse = StringInStr($Kasse, "Unfallkasse") Global $OVST = StringInStr($Kasse, "OVST") ;if $BG <> 0 Or $Unfallkasse <> 0 Or $OVST <> 0 OR $Versart = "ASKonfektion" Or $Versart = "Berufsschuhe" Or $Versart = "Arbeitsschuhe" Or $LVA <> 0 Or $Arbeitsamt <> 0 Or $Bahn_See <> 0 Then ; $zeitspanne = 3 ;3 Monate ;Else $zeitspanne = 3 ;3 Monate ;EndIf ;################### If $Datumsunterschied >= $zeitspanne And $Lieferdatum = 0 Then IniWrite($lw & "\Arbeit\KV_Genehmigungen\KV-Genehmigungen_3M.ini", $Kundennummer & "_" & $Rezeptnummer, "Kundennummer", $Kundennummer) IniWrite($lw & "\Arbeit\KV_Genehmigungen\KV-Genehmigungen_3M.ini", $Kundennummer & "_" & $Rezeptnummer, "Rezeptnummer", $Rezeptnummer) IniWrite($lw & "\Arbeit\KV_Genehmigungen\KV-Genehmigungen_3M.ini", $Kundennummer & "_" & $Rezeptnummer, "Name", $Name) IniWrite($lw & "\Arbeit\KV_Genehmigungen\KV-Genehmigungen_3M.ini", $Kundennummer & "_" & $Rezeptnummer, "Versorgungsart", $Versart) IniWrite($lw & "\Arbeit\KV_Genehmigungen\KV-Genehmigungen_3M.ini", $Kundennummer & "_" & $Rezeptnummer, "Kasse", $Kasse) IniWrite($lw & "\Arbeit\KV_Genehmigungen\KV-Genehmigungen_3M.ini", $Kundennummer & "_" & $Rezeptnummer, "KVDatum", $KVDatum) if $VNummer = "" OR $VNummer = "0" OR $BG <> 0 OR $LVA <> 0 OR $Arbeitsamt <> 0 OR $Bahn_See <> 0 OR $Unfallkasse <> 0 OR $OVST <> 0 Then IniWrite($lw & "\Arbeit\KV_Genehmigungen\KV-Genehmigungen_3M.ini", $Kundennummer & "_" & $Rezeptnummer, "Versichertennummer", $Aktenzeichen) Else IniWrite($lw & "\Arbeit\KV_Genehmigungen\KV-Genehmigungen_3M.ini", $Kundennummer & "_" & $Rezeptnummer, "Versichertennummer", $VNummer) EndIf ;~ EndIf EndIf EndIf EndIf $x = $x + 1 Until $x = $Anzahl_Rezepte Exit Func _FileReadDBF($sFileName, $nFlags = 0, $lDeleted = True) Local $hFile = FileOpen($sFileName, 16) Local $pReadBuffer = DllStructCreate("byte[32]") ; Header size DllStructSetData($pReadBuffer, 1, FileRead($hFile, 32)) $pDBFHeader = DllStructCreate("byte;byte;byte;byte;int;short;short;byte[20]", DllStructGetPtr($pReadBuffer)) ; Header struct $nRecords = DllStructGetData($pDBFHeader, 5) ; Get number of records $nDataPos = DllStructGetData($pDBFHeader, 6) ; Get data start position $nRecordSize = DllStructGetData($pDBFHeader, 7) ; Get record size (included deleted flag) $nFields = Floor($nDataPos / 32) - 1 $nDataGap = $nDataPos - ($nFields + 1) * 32 Local $aData[$nRecords + 1][$nFields] Local $sRecordStruct = "byte;" ; Struct string, based on fields size and type, first byte - deleted mark For $i = 0 To $nFields - 1 DllStructSetData($pReadBuffer, 1, FileRead($hFile, 32)) $pField = DllStructCreate("char[11];byte;int;byte;byte[15]", DllStructGetPtr($pReadBuffer)) ; Field structure $aData[0][$i] = DllStructGetData($pField, 1) ; Name of field ; Create struct based on field size and type (now unfinished, treat all types as string) Switch DllStructGetData($pField, 2) Case Asc("C") Or Asc("D") ;or Else $sRecordStruct &= "char[" & DllStructGetData($pField, 4) & "];" EndSwitch Next $sRecordStruct = StringTrimRight($sRecordStruct, 1) ; Trim last ";" FileRead($hFile, $nDataGap) ; Skip ending marker, it's size may vary $pReadBuffer = DllStructCreate("byte[" & $nRecordSize & "]") ; New buffer, now based on record size Local $nRow = 1, $cDeleted For $i = 1 To $nRecords DllStructSetData($pReadBuffer, 1, FileRead($hFile, DllStructGetSize($pReadBuffer))) $pRecord = DllStructCreate($sRecordStruct, DllStructGetPtr($pReadBuffer)) $cDeleted = Chr(DllStructGetData($pRecord, 1)) If $lDeleted Or $cDeleted <> '*' Then For $j = 0 To $nFields - 1 $aData[$nRow][$j] = DllStructGetData($pRecord, $j + 2) If BitAND($nFlags, 1) Then $aData[$nRow][$j] = _Ascii2Ansi($aData[$nRow][$j]) If BitAND($nFlags, 2) Then $aData[$nRow][$j] = StringStripWS($aData[$nRow][$j], 3) Next $nRow += 1 EndIf Next FileClose($hFile) Return $aData EndFunc ;==>_FileReadDBF Func _Ascii2Ansi($sText) Local $src = DllStructCreate("char[" & StringLen($sText) + 1 & "]") Local $dst = DllStructCreate("char[" & StringLen($sText) + 1 & "]") DllStructSetData($src, 1, $sText) DllCall("user32.dll", "int", "OemToCharA", "ptr", DllStructGetPtr($src), "ptr", DllStructGetPtr($dst)) Return DllStructGetData($dst, 1) EndFunc ;==>_Ascii2Ansi
Moderators SmOke_N Posted October 16, 2017 Moderators Posted October 16, 2017 The error is a file access error if I remember correctly. Are you running either one in admin mode? Common sense plays a role in the basics of understanding AutoIt... If you're lacking in that, do us all a favor, and step away from the computer.
Danp2 Posted October 16, 2017 Posted October 16, 2017 I believe it is actually an access violation. Latest Webdriver UDF Release Webdriver Wiki FAQs
Danp2 Posted October 16, 2017 Posted October 16, 2017 Are you compiling the script as 32-bit or 64-bit? Latest Webdriver UDF Release Webdriver Wiki FAQs
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now