1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. BugFix

Beiträge von BugFix

  • Firebird Query Result eingrenzen?

    • BugFix
    • 29. August 2015 um 10:44

    Verwende doch zum Abfragen ADODB. Nutze ich immer für Firebird. Hier ein Bsp. von mir, kannst es für dich anpassen.

    AutoIt
    #include<array.au3>
    
    
    #region - Allgemeine Deklaration
    Global $oMyError = ObjEvent("AutoIt.Error","MyErrFunc")    ; Initialisieren COM error handler
    #endregion
    
    
    #region - Database Deklaration (im Bsp. Firebird)
    ; Datenbank:
    Global $data_source   = "C:/Daten/Muster.GDB"
    
    
    ; Verbindungsstring:
    Global $strConnection = "DRIVER=Firebird/InterBase(r) driver; UID=SYSDBA; PWD=masterkey; DBNAME=" & $data_source & ";"
    
    
    ; SQL-String zum Auslesen aller Usertabellen mit Angabe aller Felder und Typ:
    Global $sql_str = "SELECT RDB$RELATION_NAME, RDB$FIELD_NAME, RDB$FIELD_SOURCE " & _
    				  "FROM   RDB$RELATION_FIELDS " & _
    				  "WHERE  RDB$RELATION_NAME NOT CONTAINING ' " & _
    				  "ORDER  BY RDB$RELATION_NAME, RDB$FIELD_NAME;"
    
    
    		$sql_str = "Select NM_KVNR from Kunden where kundennr = 10008;"
    
    
    Global $array
    #endregion - Database
    
    
    #region - Beispielsprogramm
    ; DB-Verbindungsobjekt wird erstellt:
    $oConn = _oSQLDB_Connect($strConnection)
    If @error Then Exit MsgBox(0, 'Datenbank', 'keine Verbindung')
    
    
    ; Ausführung eines SQL-Statements mit Methode Execute ==> liefert Recordset zurück:
    $oRecSet = _oSQLDB_Execute($oConn, $sql_str)
    If @error Then
    	MsgBox(0, 'Execute', 'Fehler Beim Ausführen des SQL-Statements')
    	_close()
    EndIf
    
    
    ; Recordset in Array wandeln:
    $array = $oRecSet.GetRows
    If Not IsArray($array) Then
    	MsgBox(0, 'Array', 'kein Ergebnis')
    	_close()
    EndIf
    
    
    MsgBox(0, 'KV-Nr', $array[0][0])
    ;~ _ArrayDisplay($array, 'Alle User Tabellen')  ;[i][0]=Tabelle, [i][1]=Feld, [i][2]=Typ-Länge
    _close()
    
    
    Func _close()
    	If IsObj($oRecSet) Then _oRecSet_Close($oRecSet)
    	If IsObj($oConn) Then _oSQLDB_Close($oConn)
    	Exit
    EndFunc
    #endregion - Beispielsprogramm
    
    
    #region - Functions
    ;===============================================================================
    ; Function Name:   _oSQLDB_Connect($connStr)
    ; Description::    erstellt eine Objektreferenz auf die im $connStr angegebene Datenbank
    ; Parameter(s):    $connStr  Connection-String enthält die Verbindungsparameter
    ; Return Value(s): Erfolg   Referenz des ADODB-Objektes
    ;                  Fehler   1, @error 1
    ;===============================================================================
    Func _oSQLDB_Connect($connStr)
    	Local $objConnection = ObjCreate("ADODB.Connection")
    	If Not IsObj($objConnection) Then Return SetError(1,0,1)
    	$objConnection.Open($connStr)
    	Return $objConnection
    EndFunc  ;==>_oSQLDB_Connect
    
    
    ;===============================================================================
    ; Function Name:   _oSQLDB_Execute($oConn, $strCommand, $Options=-1)
    ; Description::    führt Kommandostring (SQL-Sequenz) aus
    ; Parameter(s):    $oConn      Referenz des Connection-Objektes
    ;                  $strCommand Kommandostring
    ;     optional     $Options    CommandTypeEnum   (http://msdn.microsoft.com/en-us/library/ms675946(VS.85).aspx) oder
    ;                              ExecuteOptionEnum (http://msdn.microsoft.com/en-us/library/ms676517(VS.85).aspx)
    ; Return Value(s): Eine Recordset Objekt-Referenz, ein Stream oder Nichts
    ;===============================================================================
    Func _oSQLDB_Execute($oConn, $strCommand, $Options=-1)
    	Local $recAffected
    	Return $oConn.Execute($strCommand, $recAffected, $Options)
    EndFunc  ;==>_oSQLDB_Execute
    
    
    ;===============================================================================
    ; Function Name:   _oRecSet_Close($oRecSet)
    ; Description::    Beendet ein RecordsetObjekt
    ; Parameter(s):    $oRecSet  Referenz des Objektes
    ;===============================================================================
    Func _oRecSet_Close($oRecSet)
    	$oRecSet.Close
    EndFunc  ;==>_oRecSet_Close
    
    
    ;===============================================================================
    ; Function Name:   _oSQLDB_Close($oConn)
    ; Description::    Beendet die Verbindung
    ; Parameter(s):    $oConn  Referenz des Connection-Objektes
    ;===============================================================================
    Func _oSQLDB_Close($oConn)
    	$oConn.Close
    EndFunc  ;==>_oSQLDB_Close
    
    
    Func MyErrFunc()
      Msgbox(0,"AutoItCOM Test","Ein COM-Fehler ist aufgetreten !"  & @CRLF  & @CRLF & _
                 "err.description is: "    & @TAB & $oMyError.description    & @CRLF & _
                 "err.windescription:"     & @TAB & $oMyError.windescription & @CRLF & _
                 "err.number is: "         & @TAB & hex($oMyError.number,8)  & @CRLF & _
                 "err.lastdllerror is: "   & @TAB & $oMyError.lastdllerror   & @CRLF & _
                 "err.scriptline is: "     & @TAB & $oMyError.scriptline     & @CRLF & _
                 "err.source is: "         & @TAB & $oMyError.source         & @CRLF & _
                 "err.helpfile is: "       & @TAB & $oMyError.helpfile       & @CRLF & _
                 "err.helpcontext is: "    & @TAB & $oMyError.helpcontext )
        Local $err = $oMyError.number
        If $err = 0 Then $err = -1
        Local $g_eventerror = $err
    Endfunc
    #endregion - Functions
    Alles anzeigen
  • Keys aus Ini löschen und verbliebene Key Nummern anpassen

    • BugFix
    • 28. August 2015 um 22:26

    Ist doch kein Hexenwerk ;)

    AutoIt
    ; nach dem Löschen des Wertes einfach neu Lesen und Key neu nummerieren
    Global $ReadSec = IniReadSection($INI, 'SECTION_NAME')
    Global $strWrite = ''
    
    
    For $i = 1 To UBound($ReadSec) -1
    	$strWrite &= $i & '=' & $ReadSec[$i][1] & @LF
    Next
    IniWriteSection($INI, 'SECTION_NAME', $strWrite)
  • Problem mit _GUICtrlListView_SetItemSelected()

    • BugFix
    • 27. August 2015 um 18:04

    Ja, da fällt einem der "gut gemeinte" Datentyp Variant vor die Füße. Als ich mit AutoIt anfing, fand ich den Datentyp ganz praktisch. Aber je länger ich damit arbeite, desto weniger gefällt mir das. Z.B. wegen solcher Erlebnisse, die man dann durch mühseliges Error-Handling ausfindig macht.
    Andere Skriptsprachen verwenden zwar auch Variant-Typen, aber da meckert der Interpreter wenigstens sofort, wenn trotzdem eine Umwandlung erforderlich ist.

  • String nach String auslesen

    • BugFix
    • 27. August 2015 um 11:52

    Dann arbeitet man mit regulären Ausdrücken:

    AutoIt
    $text = _
    '....' & @LF & _
    '....' & @LF & _
    '....' & @LF & _
    'Kosten: XXX' & @LF & _
    'Versanddatum der Berechnung: 01.07.2015' & @LF & _
    '....' & @LF & _
    'Verpackung: XXX' & @LF & _
    '....' & @LF & _
    '....' & @LF & _
    'Bitte beachten Sie, dass bei kundeneigener Verpackung unbedingt die genauen Abmessungen verfügbar sein müssen, da sich eventuell ein Volumengewicht berechnet, das höher ist als das tatsächliche Gewicht. Bei Importen kann die angegebene Frachtrate Wechselkursschwankungen unterliegen. Der Treibstoffzuschlag wird monatlich festgelegt und kann –insbesondere wenn die Sendung erst zu einem späteren Zeitpunkt verschickt wird– differieren.' & @LF & _
    'Die Laufzeit beträgt XXX Werktage (Zustellung am 03.07.2015 18:00) sofern es keine Zollverzögerungen oder Unregelmäßigkeiten die außerhalb des Einflussbereiches von XXX liegen gibt.' & @LF
    
    
    $datum_Versand = (StringRegExp($text, "(?<=Versanddatum der Berechnung:)\s*(\d{2}\.\d{2}\.\d{4})", 3))[0]
    ConsoleWrite("@@ Debug line" & @TAB & @ScriptLineNumber & "   var: $datum_Versand --> " & $datum_Versand & @LF)
    
    
    $datum_Zustellung = (StringRegExp($text, "(?<=\(Zustellung am)\s*(\d{2}\.\d{2}\.\d{4})", 3))[0]
    ConsoleWrite("@@ Debug line" & @TAB & @ScriptLineNumber & "   var: $datum_Zustellung --> " & $datum_Zustellung & @LF)
    Alles anzeigen


    Edit:
    Als Flag für StringRegExp kann man hier auch 1 verwenden, aber bei dieser Abfrage ist das Rückgabe-Array für beide Flags identisch und somit ist es unerheblich, welches Flag genutzt wird.

  • String nach String auslesen

    • BugFix
    • 27. August 2015 um 11:21

    Das ist das Problem, wenn der Fall nur halbherzig geschildert wird.
    Bevor ich dir eine Lösung präsentiere, zwei Fragen:
    - Ist das das einzige Datum im gesamten Text und hat es immer die Form TT.MM.JJJJ ?
    - wenn es mehrere Datumswerte gibt: Ist der Text vor dem gesuchten Datum immer identisch?

  • String nach String auslesen

    • BugFix
    • 27. August 2015 um 10:55

    Viele Wege führen nach Rom. Statt StringSplit kannst du auch mit Trim arbeiten. Das StringStripWS dient dann dazu evtl. Leerzeichen vor und hinter dem gewünschten Text zu entfernen.

    AutoIt
    $sOutput15 = "Versanddatum der Berechnung: XX.XX.XXXX"
    $result = StringStripWS(StringTrimLeft($sOutput15, StringInStr($sOutput15, ":")), 1+2)
    ConsoleWrite("@@ Debug line" & @TAB & @ScriptLineNumber & "   var: $result --> " & $result & @LF)

    Bei der Nutzung von StringSplit mußt du das Ergebnis nicht zwingend in einer Variablen auffangen, wenn SICHER ist, dass der Splitparameter enthalten ist.
    Dann kannst du auf den Arrayeintrag direkt verweisen:

    AutoIt
    $str = "Versanddatum der Berechnung: XX.XX.XXXX"
    ConsoleWrite( (StringSplit($str, ":"))[2] & @CRLF)
  • Arbeitstage in einem Datumsbereich ermitteln (Bundeslandspezifisch)

    • BugFix
    • 26. August 2015 um 11:42
    Zitat von Bioshade

    Kopierte Version aus dem Spoiler gibt mir den Fehler nicht - allerdings behauptet sie steif und fest, vom 26.08.2015 bis zum 28.08.2015 wären bundesweite Feiertage... warum bin ich dann an die Arbeit gefahren?

    ?? Die Funktion hat als Rückgabewert die Anzahl der Arbeitstage. Und wenn ich z.B. aufrufe mit: $anzahl = _GetWorkingDaysInRange('26.08.2015', '28.08.2015', 11) erhalte ich 3. Und das ist korrekt - 3 Arbeitstage.
    Also frage ich mich, was du wo und wie aufrufst. ?(

  • Arbeitstage in einem Datumsbereich ermitteln (Bundeslandspezifisch)

    • BugFix
    • 26. August 2015 um 10:49

    @Bioshade Dann mach ich mir grad keinen Reim drauf... :whistling:

    Ich habe aber gerade einen anderen Fehler entdeckt (seltsam dass niemand drauf gestoßen ist). In der geposteten Version hatte ich vergessen den Parameter $iCountWorkDays weiterzureichen. 8|
    Da ich die Feiertagsfunktion bereits etwas überarbeitet habe, werde ich das mal zu einer neuen Version aktualisieren und posten.

  • Arbeitstage in einem Datumsbereich ermitteln (Bundeslandspezifisch)

    • BugFix
    • 26. August 2015 um 10:07
    Zitat von Bioshade

    Da fehlt wohl noch etwas error-handling:

    Wenn eine Globale Variable einer Standard-UDF als nicht deklariert angezeigt wird ist das wohl eher ein Include-Problem. Was in der Arbeitstage-UDF aber nicht passieren kann, da im Kopf die Includes enthalten sind. Vielleicht ein C&P-Problem?

  • Formular Check - roter Rahmen um Controls

    • BugFix
    • 25. August 2015 um 14:39
    Zitat von CRouch

    Keine, rote Schrift

    Man, wo ist deine Kreativität? Da schreibst du rein: DARF NICHT LEER SEIN!  :whistling:

  • Formular Check - roter Rahmen um Controls

    • BugFix
    • 25. August 2015 um 13:32

    Ich verwende für sowas keinen roten Rahmen, sondern setze bei fehlerhafter Überprüfung die Schrift auf rot. Das fällt auch sofort ins Auge und ist eindeutig.

  • OnePlus 2

    • BugFix
    • 25. August 2015 um 13:29

    Ich verstehe diesen Hype um ein Produkt, dass bisher nirgendwo vergleichbar getestet werden konnte überhaupt nicht.
    Nur weil die Herstellerfirma erzählt (oder über Fake-User erzählen läßt), dass das das schönste und beste Produkt der Welt ist, wollt ihr euer sauer erspartes Geld da hinterher werfen? Ohne jede Garantie, die ihr bei anderen Produkten habt?
    Sorry - aber was bitte hat euer Hirn so umnebelt? Bitte kommt zurück auf den Boden der Realität. Ich habe bisher 3 Leute kennengelernt, die dachten sie kaufen bei efox super-truper-Schnäppchen und nach ein paar Wochen fiel ihnen der Dreck auseinander.
    WARUM glaubt ihr denn, das es dieses so tolle Produkt hier nicht im Handel gibt? - Genau, weil es dann den Bestimmungen des deutschen Marktes unterliegen würde und Garantieleistungen gesetzlich vorgeschrieben wären. Theoretisch gilt das auch jetzt - aber viel Spaß beim Geltendmachen von Ansprüchen in Fern-Ost. :rofl:

  • GUI resizen und Button neu erstellen

    • BugFix
    • 18. August 2015 um 10:27

    Ich hatte vor Jahren mal begonnen, eine Resizing-Funktion zu schreiben, die mit diesen Problemen Schluss macht. Aber das klappte auch nicht 100%. Durch rechnerische Korrekturen verschoben sich die Positionen nach mehrfachem Resizing.
    Ich habe auf meiner Projektliste eine kpl. andere Positionierung für AutoIt zu entwickeln, relative Positionierung wie z. B. mit Tkinter. Mal sehen, wann ich das fertig kriege.

  • An die Netzwerk-Gurus und Virtuelle Maschinen Auskenner

    • BugFix
    • 12. August 2015 um 22:22
    Zitat von Einexage

    wie machst du das, dass bei dir die CS-Struktur wartungsintensiv wird

    Kann sein, dass das auf einem Bug von Win2k-Server beruht: Egal welcher PC, in steter Regelmäßigkeit waren die Userprofile unbrauchbar. Zu diesem Zeitpunkt hatten wir auch erst 4 User im Netz, da bin ich kurzerhand umgestiegen auf die AG-Version.

  • An die Netzwerk-Gurus und Virtuelle Maschinen Auskenner

    • BugFix
    • 12. August 2015 um 21:56

    @Einexage


    Also 90% deiner (berechtigten) Einwände sind dadurch schon beerdigt, dass es in unserem Netz keinerlei Internetanbindung gab und gibt (hatte ich vergessen zu erwähnen, da es für mich schon sebstverständlich ist). Für Internet gibt es einzelne Rechner, die gemeinsam einen Router nutzen. Unser Intranet hat keinerlei physische Verbindung zu diesen Rechnern.

    Wenn es so einfach wäre mit einer neuen WaWi-Software, hätte ich das meinem Chef schon als unausweichlich unterbreitet. Nur hängt da wesentlich mehr dran.
    Ich erkläre mal kurz:
    In unserem Marktsegment kann man nicht mit Standard-WaWi-Software arbeiten, es gibt nicht das klassische Einkauf-Verkauf Prinzip. Kunde (Rechnungszahler) ist selten identisch mit Kunde (Leistungsempfänger). Um das in einer Software abzubilden bedarf es schon einiger Eingriffe. Als ich mich 2001 nach einer Software umsah, die überhaupt mit diesen Anforderungen umgehen kann gab es weniger als eine Handvoll. Alle großen Softwareanbieter hatten zum einen Einstiegspreise jenseits von gut und böse (>20k) und wollten dann für die erforderlichen Anpassungen fast nochmal denselben Preis. Zum halben Preis bekam ich dann eine Software, die alles bot, was ich wollte:
    - freie Reportkonfiguration mit Programmiermöglichkeit
    - integriertes SQL-Userinterface
    - freie Konfigurierbarkeit der Tabellen
    Das Softwarehaus dachte zwar auch, dass es mit der Reporterstellung und den Anpassungen extra verdienen kann - aber das war mit vorhandenen Programmierkenntnissen kein Hexenwerk.
    Unsere Firma ist QM-zertifiziert. Sämtliche Abläufe, die im QM-Handbuch beschrieben sind, basieren letztlich auf der Art und Weise, wie Daten im Unternehmen entstehen und diese Daten von der Software verarbeitet wird.
    Und das läßt sich nicht so ohne Weiteres auf eine neue Softwareumgebung anwenden. Sämtliche Prozesse müssten neu überarbeitet werden. Wer einmal aktiv am QM teilgenommen hat, weiß was das für eine arbeits- und kostenintensive Angelegenheit ist.
    Ein weiterer, nicht unerheblicher Punkt ist die Datenkontinuität. Ich habe bisher noch nie gehört, dass ein Umstieg auf ein anderes System fehlerfrei vonstatten ging. Einmal habe ich sowas schon selbst mitgemacht und kann mich gut an die Überstunden erinnern um im neuen System den Zugriff auf die alten Daten realisieren zu können.

    Nochmal zusammengefasst:
    Mit Windows 2000 Server zu arbeiten ist auch mir kein Lebensbedürfnis. Da wir in einem reinen Intranet arbeiten bereiten mir die Sicherheitslücken keine Sorgen.
    Eine Lösung mit neuer WaWi-Software ist vergleichbar, als ob ein Unternehmen von einem Tag auf den anderen mit Datenverarbeitung beginnen muss. Neue Abläufe, neue Bedienoberflächen - somit auch neue Fehlerquellen. Die finanzielle Seite darf man auch nicht unberücksichtigt lassen.
    Ich komme nicht umhin, das alte System am Leben zu halten. Zumal es von der Funktionalität neueren Systemen teilweise noch immer überlegen ist.

    Aber klär mich auf: Wo liegen die Einschränkungen bei Arbeitsgruppen? Ich hatte anfangs mit Client-Server-Struktur gearbeitet, war aber nicht zufrieden damit. Das war viel zu wartungsintensiv für eine Firma, in der kein Admin vor Ort ist. Ich schaue da einmal im Monat vorbei (die EDV betreue ich nur nebenbei), und im Arbeitsgruppenmodus habe ich keine Probleme.

  • An die Netzwerk-Gurus und Virtuelle Maschinen Auskenner

    • BugFix
    • 12. August 2015 um 20:02

    Hi,
    ich brauche mal fachmännischen Rat aus dem Netzwerkbereich.
    Wir haben z. Zt. folgende Struktur:
    - Server m. OS Win2000-Server
    - Auf dem Server läuft die Firebird-SQL-DB mit einer Warenwirtschaftssoftware
    - 10 Windows-PC die über Arbeitsgruppe auf den Server/ die Software zugreifen

    Nun wird Hardware älter und muß getauscht werden. Letztes Jahr konnte ich noch neue Komponenten beschaffen, für die auch nocht Win2K Treiber erhältlich waren. Das wird künftig wohl nicht mehr möglich sein. Also brauche ich ein neues Konzept. Windows 2000 Server muß bestehen bleiben, da die Software auf neueren Windows-Serverversionen nicht lauffähig ist.
    Mein Gedanke, den ich bitte auf Durchführbarkeit geprüft haben möchte:
    - Neuer PC mit modernem Server-OS
    - Installation einer VM
    - In der VM: Win 2000 Server installieren und dann die Warenwirtschaftssoftware
    Fragen dazu:
    - Ist der Zugriff auf die Software innerhalb des Virtuellen Systems von 10 Arbeits-PC problemlos möglich?
    - Worauf muss ich bei der Auswahl der VM achten, gibt es VM's, die für das Konzept ungeeignet wären?
    - Kann ich weiterhin mein Arbeitsgruppen-Konzept beibehalten oder muß ich auf Client-Server-Struktur wechseln (für die paar Anwender eigentlich overdressed)?

    Danke für eure Ideen und Anregungen.

  • [gelöst] Probleme bei der Pfadauswahl und Funktionen

    • BugFix
    • 12. August 2015 um 18:59

    Bitte setze den Status im Startpost auf 'Gelöst' ;)

  • [gelöst]vmrun über autoIT ausführen

    • BugFix
    • 12. August 2015 um 18:58

    Bitte setze den Status im Startpost auf 'Gelöst' ;)

  • [gelöst]vmrun über autoIT ausführen

    • BugFix
    • 12. August 2015 um 17:55
    Zitat von BalloS

    Aber wenn ich das richtig lese, dann hilft es einem, falls Fehler auftreten. In meinem Fall läuft das Script ja "fehlerfrei" durch.

    Sicher?
    Hast du den Return geprüft?

    Zitat von AutoIt-Hilfe

    Return Value

    Success: the PID of the process that was launched.
    Failure: 0 and sets the @error flag to non-zero.

    Eventuell musst du tatsächlich für die Ausführung des Befehls im *.exe - Verzeichnis sein.
    Run ( "program" [, "workingdir" [, show_flag [, opt_flag]]] )
    Gib dort mal dein Verzeichnis mit an.

  • Oracle VM - kein Internetzugang [GELÖST]

    • BugFix
    • 12. August 2015 um 16:32

    Leider hilft das nicht weiter, da diese Menüs nicht mehr in der Form existieren (der Beitrag ist von 2011). Aber Danke für die Mühe.

    EDIT:
    Die Anleitung war nur zu ungenau. Der Knackpunkt ist: Shut down XP guest. Genauer sollte es heißen: Ausschalten per ACPI.
    Jetzt hat man im Netzwerkmenü der VM auch Zugriff auf die entscheidende Position: Adapter Type
    Nun klappt es! :thumbup:

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™