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. MadCatz

Beiträge von MadCatz

  • Access (.accdb) Datenbank auslesen etc.

    • MadCatz
    • 14. Mai 2014 um 12:03

    Das mit der Select ID from klappt leider nicht, dann bekomme ich den hinweis, das die Sticknummer nicht exestieren würde

    [autoit]

    $query1 = "SELECT ID FROM "&$tabellenname&" WHERE Stick = '" &$iStick&"'"
    $strData1 = int(_ReadOneFld($query1, $datenbankpfad, $Spalte2,"Sticknummer"))

    [/autoit][autoit][/autoit][autoit][/autoit]
  • Tastenschlag und Button betätigungsproblem

    • MadCatz
    • 14. Mai 2014 um 11:36

    Das war genau das was ich brauche :)


    Vielen Dank =)

  • Tastenschlag und Button betätigungsproblem

    • MadCatz
    • 14. Mai 2014 um 09:35

    Hallo Leute ich stehe vor folgenden Problem.

    Ich kann in einer erstellten GUI über den Button

    [autoit]

    OK

    [/autoit]

    die Aktion bestätigen oder auch über die Enter-Taste.

    Das klappt auch wunderbar, aber wenn ich den Button

    [autoit]

    OK

    [/autoit]

    mit enter bestätige, wird dies als doppelte Bestätigung angenommen. Was muss ich änder damit dies nicht mehr so ist?

    [autoit]


    $sTechniker = GUICtrlRead($Techniker)
    $sKennwort = GUICtrlRead($Kennwort)

    [/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit]

    If _IsPressed("0D") Then
    If $sKennwort = "" And $sTechniker = "" Then
    $Enter = 0
    $Msg1 = MsgBox(0+48,"","Zum Fortfahren Techniker auswählen und Kennwort eingeben.")
    Sleep(100)
    $Enter=1
    ElseIf $sKennwort = "" Then
    $Enter = 0
    MsgBox(0+48,"","Zum Fortfahren Kennwort eingeben.")
    Sleep(100)
    $Enter = 1
    ElseIf $sTechniker = "" Then
    $Enter = 0
    MsgBox(0+48,"","Zum Fortfahren Techniker auswählen.")
    Sleep(100)
    $Enter = 1
    EndIf
    If $sKennwort <> "" And $sTechniker <> "" Then
    $Search = _ArraySearch($Array,$sTechniker)
    $Search2 = _ArraySearch($Array, $sKennwort,$Search,$Search)
    If $Search <> $Search2 Then
    $Enter = 0
    MsgBox(0+16,"Authentifizierungsfehler", "Kennwort stimmt nicht mit Techniker überein. Bitte erneut eingeben.")
    GUICtrlSetData($Kennwort,"")
    Sleep(100)
    $Enter = 1
    EndIf
    If $Search = $Search2 Then
    GUICtrlSetState($Sticknummer,$GUI_Enable)
    GUICtrlSetState($StickBox,$GUI_Enable)
    GUICtrlSetState($Kennwort,$GUI_Disable)
    GUICtrlSetState($Techniker,$GUI_Disable)
    GUICtrlSetState($OK,$GUI_Hide)
    GUICtrlSetState($Rueckgabe,$GUI_Enable)
    GUICtrlSetState($Ausleihen,$GUI_Enable)
    GUICtrlSetState($Beenden,$GUI_Show)
    GUICtrlSetState($Sticknummer, $GUI_FOCUS)
    EndIf
    EndIf
    EndIf

    [/autoit][autoit][/autoit][autoit]

    Case $OK
    $sTechniker = GUICtrlRead($Techniker)
    $sKennwort = GUICtrlRead($Kennwort)
    If $sKennwort = "" And $sTechniker = "" Then
    MsgBox(0+48,"","Zum Fortfahren Techniker auswählen und Kennwort eingeben.")
    Sleep(100)
    ElseIf $sKennwort = "" Then
    MsgBox(0+48,"","Zum Fortfahren Kennwort eingeben.")
    Sleep(100)
    ElseIf $sTechniker = "" Then
    MsgBox(0+48,"","Zum Fortfahren Techniker auswählen.")
    Sleep(100)
    EndIf

    [/autoit][autoit][/autoit][autoit]

    If $sKennwort <> "" And $sTechniker <> "" Then
    $Search = _ArraySearch($Array,$sTechniker)
    $Search2 = _ArraySearch($Array, $sKennwort,$Search,$Search)
    If $Search <> $Search2 Then
    MsgBox(0+16,"Authentifizierungsfehler", "Kennwort stimmt nicht mit Techniker überein. Bitte erneut eingeben.")
    Sleep(100)
    GUICtrlSetData($Kennwort,"")
    Else
    GUICtrlSetState($Sticknummer,$GUI_Enable)
    GUICtrlSetState($StickBox,$GUI_Enable)
    GUICtrlSetState($Kennwort,$GUI_Disable)
    GUICtrlSetState($Techniker,$GUI_Disable)
    GUICtrlSetState($OK,$GUI_Hide)
    GUICtrlSetState($Rueckgabe,$GUI_Enable)
    GUICtrlSetState($Ausleihen,$GUI_Enable)
    GUICtrlSetState($Beenden,$GUI_Show)
    GUICtrlSetState($Sticknummer, $GUI_FOCUS)
    EndIf
    EndIf

    [/autoit][autoit][/autoit][autoit][/autoit]
  • Access (.accdb) Datenbank auslesen etc.

    • MadCatz
    • 13. Mai 2014 um 15:29

    Ich Vogel =(

    Danke nochmals gmmg

  • Access (.accdb) Datenbank auslesen etc.

    • MadCatz
    • 13. Mai 2014 um 07:48

    Morgen Leute =) ,

    so, erstmal die Datenbankabfrage funktioniert soweit, allerdings habe ich in meiner Datenbank folgendes, sodass die momentane Datenbankabfrage nicht mehr komplett ihre Funktion erfüllt. Dies liegt daran, dass in der Spalte "Box" einige Werte doppelt vorkommen, sowie es in der späteren Datenbank sein wird.

    Meine Test-Datenbank findet ihr im Anhang.

    [autoit]


    (Vereinfachtes-Schema)

    [/autoit][autoit][/autoit][autoit]

    ID | Stick | Box
    1 35 12
    2 2 34
    3 3 56
    4 4 34
    5 52 56
    6 60 2

    [/autoit]

    So nun einmal genauer:

    Ich habe eine GUI erstellt, in der ein User, neben der Box auch die Sticknummer erfassen muss, wenn beide Nummer in der Datenbank zufinden sind, so zeigt eine MsgBox an, nach Button druck an. dass es erfolgreich war.

    Allerdings soll dies nicht so funktionieren, da sonst der User sämtliche Zahlen in verschiedenster Kombi angeben kann und dann als erfolgreich abschließen kann.

    Ich weiß, dass ich dementsprechen überprüfen muss, ob beide Nummer,

    [autoit]

    z.B 52 (Stick) und 56 (Box)

    [/autoit]

    die Selbe ID besitzen.


    Das bekomme ich leider nicht hin =(

    Hier mal mein Quellcode mit der bisherigen Abfrage (ohne ID Abfrage)

    [autoit]


    $Spalte1 = "Box"
    $Spalte2 = "Stick"
    $Spalte = "ID"

    [/autoit][autoit][/autoit][autoit]

    ....

    [/autoit][autoit][/autoit][autoit]

    Case $Ausleihen
    $iStick = Int(GUICtrlRead($Sticknummer))
    $iBox = Int(GUICtrlRead($StickBox))

    [/autoit][autoit][/autoit][autoit]

    If $iStick = "" And $iBox = "" Then
    MsgBox(0+48,"","Bitte die Sticknummer und StickBox angeben.")
    ElseIf $iBox = "" Then
    MsgBox(0+48,"","Bitte die StickBox angegeben.")
    ElseIf $iStick = "" Then
    MsgBox(0+48,"","Bitte die Sticknummer angeben.")
    EndIf
    If $iStick <> "" And $iBox <> "" Then
    $query1 = "SELECT * FROM "&$tabellenname&" WHERE Stick = '" &$iStick&"'"
    $strData1 = int(_ReadOneFld($query1, $datenbankpfad, $Spalte2,"Sticknummer"))
    $query2 = "SELECT * FROM "&$tabellenname&" WHERE Box = '" &$iBox&"'"
    $strData2 = int(_ReadOneFld($query2, $datenbankpfad, $Spalte1,"Box"))
    If $iStick = $strData1 And $iBox = $strData2 Then
    ConsoleWrite($query1&@CRLF&$strData1)
    MsgBox(0,"",$query1&@CRLF& "Ergebnis: " &$strData1)
    ConsoleWrite($query2&@CRLF&$strData2)
    MsgBox(0,"",$query2&@CRLF& "Ergebnis: " &$strData2)
    ElseIf $iStick <> $strData1 Then
    MsgBox(0,"","Diese Sticknummer exestiert nicht.")
    ElseIf $iBox <> $strData2 Then
    MsgBox(0,"","Diese StickBox exestiert nicht.")
    EndIf
    EndIf

    [/autoit][autoit][/autoit][autoit]

    ....

    [/autoit][autoit][/autoit][autoit]

    Func _ReadOneFld($_sql,$_datenbankpfad,$_field,$MissingWord)
    Dim $_output
    $adoCon = ObjCreate("ADODB.Connection")
    $adoCon.Open("Provider=Microsoft.ACE.OLEDB.12.0; Data Source="&$datenbankpfad&";")
    $adoRs = ObjCreate("ADODB.Recordset")
    $adoRs.CursorType = 1
    $adoRs.LockType = 3
    $adoRs.Open($_sql,$adoCon)
    With $adoRs
    If .RecordCount Then
    While Not .EOF
    $_output = $_output&.Fields($_field).Value&@CRLF
    .MoveNext
    WEnd
    ;~ Else
    ;~ MsgBox(0+64,"Fehler","Diese "&$MissingWord&" exestiert nicht. Bitte Eingabe überprüfen.")
    EndIf
    EndWith
    $adoCon.Close
    Return $_output
    EndFunc

    [/autoit][autoit][/autoit][autoit][/autoit]

    Ich dachte ich könnte die ID abfragen, wenn ich bei

    [autoit]


    $query1 = "SELECT * FROM "&$tabellenname&" WHERE Stick = '" &$iStick&"'"
    $strData1 = int(_ReadOneFld($query1, $datenbankpfad, $Spalte2,"Sticknummer"))

    [/autoit][autoit][/autoit][autoit]

    in

    [/autoit][autoit][/autoit][autoit]

    $query1 = "SELECT * FROM "&$tabellenname&" WHERE Stick = '" &$iStick&"'"
    $strData1 = int(_ReadOneFld($query1, $datenbankpfad, $Spalte,"Sticknummer"))

    [/autoit][autoit][/autoit][autoit]

    ändere.

    [/autoit][autoit][/autoit][autoit][/autoit]

    so einfach ist das aber leider nicht :/

  • Access (.accdb) Datenbank auslesen etc.

    • MadCatz
    • 7. Mai 2014 um 08:21

    GMMG

    DU bist ein Genie :)

    Sowohl treiber als auch der Befehl in Kombination haben das Problem beseitigt :D

    =)


    Danke danke danke!

  • Access (.accdb) Datenbank auslesen etc.

    • MadCatz
    • 7. Mai 2014 um 08:11

    Hey gmmg,

    wenn ich von meinem Notebook aus die exe erstelle funktioniert das TestScript ebenfalls nicht, wenn ich die Exe allerdings auf dem Testnotebook erstelle funktioniert diese anscheinend auf jedem Rechner.

    Wir verwenden auf allen PCs hier Win7 Enterprrise 64bit.

    Das mit dem Tipp aus dem englischen Forum hatte ich auch gefunden, allerdings nicht geteste, da ich Autoit als x64 installiert habe, aber ich werde es testen :)

    Ich weiß nämlich selber nicht mehr weiter woran das liegen kann, dass es nur auf einem einzigen PCs läuft.

    Wenn ich den Treiber installiere weiß ich nicht was das für Auswirkungen hat, geschweige den ob ich das darf, sind ja alles Firmennotebooks


    Aber ich werde mal alles ausprobieren

    =)

  • Access (.accdb) Datenbank auslesen etc.

    • MadCatz
    • 6. Mai 2014 um 15:25

    Abend Leute,

    so: Dass Problem steht immer noch trotz PC austausch und hilfe von Kollegen. Das Problem hat ebenfalls ein anderer Azubi in meiner nähe.

    Das Script von ihm läuft genauso wie meins nur auf einem einzigen Notebook. Verrückt ist, dass das Notebook keinen Hardware und Software unterschied zu unseren Maschinen hat.

    Ich glaub ich werde heut noch testen, ob es auf meinem HomePC läuft und wenn nicht dann werd ich wohl aufgeben müssen.

    Ich danke euch allen für eure lange ausführliche und nette Hilfe =)

  • Access (.accdb) Datenbank auslesen etc.

    • MadCatz
    • 6. Mai 2014 um 09:52

    Danke :)

  • Access (.accdb) Datenbank auslesen etc.

    • MadCatz
    • 6. Mai 2014 um 08:48

    Guten Morgen gmmg :)


    So ich hat jetzt die schnauze voll und hab ein TestNotebook erhalten, dabei viel mir auf, dass das Script auf jedem anderen PC läuft, nur auf meinem nicht.

    Damit wäre das Problem eingegrenzt ^^


    Und meine Grundstrucktur für meine Abfrage würde dank euch stehen :)

  • Access (.accdb) Datenbank auslesen etc.

    • MadCatz
    • 6. Mai 2014 um 07:20

    gmmg

    ich habe die Autoit-Version 3.3.10.2 und SciTE Version 3.4.1


    Torni

    dann kann ja eigentlich nur etwas mit meiner Tabelle nicht stimmen, bzw. mit meinem Access 2007


    PS: Mit gmmg's Datenbank und Script aus der PN habe ich das gleiche Problem vor mir :(


    Edit:

    Kann es sein, dass der Fehler daran liegt, das die ID, in meiner Datenbank, bei 2 anfängt und nicht bei 1, wie auf dem Bild von TORNI zusehen ist ?!?

    Dateien

    Database.PNG 124,34 kB – 0 Downloads
  • Access (.accdb) Datenbank auslesen etc.

    • MadCatz
    • 5. Mai 2014 um 15:27

    Hey gmmg, ja den Fehler erhalte ich auch wenn ich deine erstellte au3 mit SciTE öffne und mit F5 starte. Wenn ich deine erstellte exe starte erhalte ich keinen Fehler.

    Ich kann leider die Datenbank nicht in mdb umwandeln, da dies nicht gewünscht ist.
    Ich hab jetzt herrausbekommen, dass der Fehler wohl an dem If..... .RecordCount liegt.
    Wie ich das Umgehen kann weis ich noch nicht.

    Jedenfalls werde ich deinen Tipp nochmal ausprobieren.
    Leerzeichen habe ich zu 99% nicht drin. ich werde es aber nochmal überprüfen.

    :)

  • Access (.accdb) Datenbank auslesen etc.

    • MadCatz
    • 5. Mai 2014 um 14:41

    So ich hab jetzt mal den Fehler mit MsgBoxen eingrentzen können.

    Der Fehler liegt hier drin, er springt nicht in das If:

    [autoit]

    If .RecordCount Then
    MsgBox(0,"5","Test")
    While Not .EOF
    $_output = $_output & .Fields($_field).Value & @CRLF
    MsgBox(0,"6",$_output)
    .MoveNext
    WEnd

    [/autoit]


    Ganzer Quellcode:


    [autoit]

    $datenbankpfad = @ScriptDir&"\Test.accdb"
    $tabellenname = "Tabellentest"
    $Spalte1 = "Stick" ;nicht ID Spalte
    $Spalte2 = "Box" ;nicht ID Spalte

    [/autoit][autoit][/autoit][autoit]

    $query = "SELECT * FROM " & $tabellenname & " WHERE Box = '14'"
    $strData1 = _ReadOneFld($query, $datenbankpfad, $Spalte1)

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    ConsoleWrite($query& @CRLF &$strData1)
    MsgBox(0,"",$query & @CRLF & "Ergebnis: " & $strData1)

    [/autoit][autoit][/autoit][autoit]

    Func _ReadOneFld($_sql, $_datenbankpfad, $_field)
    Dim $_output
    $adoCon = ObjCreate("ADODB.Connection")
    $adoCon.Open("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & $datenbankpfad & ";")
    $adoRs = ObjCreate("ADODB.Recordset")
    $adoRs.CursorType = 1
    $adoRs.LockType = 3
    $adoRs.Open($_sql, $adoCon)
    MsgBox(0,"0",$_datenbankpfad)
    MsgBox(0,"1",$_field)
    MsgBox(0,"2",$_sql)
    MsgBox(0,"3",$_output)
    With $adoRs
    MsgBox(0,"4","Test")
    If .RecordCount Then
    MsgBox(0,"5","Test")
    While Not .EOF
    $_output = $_output & .Fields($_field).Value & @CRLF
    MsgBox(0,"6",$_output)
    .MoveNext
    WEnd
    Else
    MsgBox(0,"7","Fehler")
    EndIf
    EndWith
    $adoCon.Close
    Return $_output
    EndFunc

    [/autoit]


    Vielleicht kann mir jetzt jemand genauer bei meinem Problem behilflich sein.

  • Access (.accdb) Datenbank auslesen etc.

    • MadCatz
    • 5. Mai 2014 um 12:39

    Danke gmmg :),

    wenn ich deine .exe ausführe findet er den besagten Eintrag bei '22'.

    aber wenn ich dein Script aus Autoit starte, dann steht wieder hinter Ergebnis nichts.

    entweder spinnt bei mir autoit oder sonstwas. ich installiere es mal neu

  • Access (.accdb) Datenbank auslesen etc.

    • MadCatz
    • 5. Mai 2014 um 10:59

    So die Abfrage über Access funktioniert, da zeigt er mir dann die Tabelle an.

    Beziehungsweise ndas, was ich suche

    Dateien

    Abfrage.PNG 113,65 kB – 0 Downloads
  • Access (.accdb) Datenbank auslesen etc.

    • MadCatz
    • 5. Mai 2014 um 10:07

    okay, ich weiß nicht wie ich die bafrage in Access selber mache, aber ich bekomme auch bei Ergebnis dennoch keine ID angezeigt

  • Access (.accdb) Datenbank auslesen etc.

    • MadCatz
    • 5. Mai 2014 um 09:30

    Ok ich hab mir überlegt, dass ich das Program etwas anders mache, vielleicht ist das einfacher.

    Dabei müsste ich die gesamte Accdb Tabelle in eine GUI Laden und der rest leif dann von selbst. Alles was nicht mit DB zutun hat bekomme ich nämlich mitlerweile gut hin.

    =)

    Ich denke das das einfacher wäre :)

  • Access (.accdb) Datenbank auslesen etc.

    • MadCatz
    • 5. Mai 2014 um 09:19

    Trotz deiner schnellen und guten Hilfe:

    klappt trotzdem nicht :(

  • Access (.accdb) Datenbank auslesen etc.

    • MadCatz
    • 5. Mai 2014 um 08:22

    Guten Morgen =)

    Also ich hab mir mal eine kleine Datenbank selbst erstellt, wie gmmg es mir empfohlen hat (s. Anhang).

    Quellcode:

    [autoit]

    $datenbankpfad = "C:\Users\michflos\Desktop\Test.accdb"
    $tabellenname = "Tabellentest"
    $Spalte1 = "Stick" ;nicht ID Spalte
    $Spalte2 = "Box" ;nicht ID Spalte

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    $query = "SELECT + FROM "&$tabellenname&" Where Box = '23'"
    $strData1 = _ReadOneFld($query, $datenbankpfad,$Spalte1)

    [/autoit][autoit][/autoit][autoit]

    ConsoleWrite($query& @CRLF &$strData1)
    MsgBox(0,"",$query & @CRLF & "Ergebnis: " & $strData1)

    [/autoit][autoit][/autoit][autoit]

    Func _ReadOneFld($_sql, $_datenbankpfad, $_field)
    Dim $_output
    $adoCon = ObjCreate("ADODB.Connection")
    $adoCon.Open("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & $datenbankpfad & ";")
    $adoRs = ObjCreate("ADODB.Recordset")
    $adoRs.CursorType = 1
    $adoRs.LockType = 3
    $adoRs.Open($_sql, $adoCon)

    [/autoit][autoit][/autoit][autoit]

    With $adoRs
    If .RecordCount Then
    While Not .EOF
    $_output = $_output & .Fields($_field).Value & @CRLF
    .MoveNext
    WEnd
    EndIf
    EndWith
    $adoCon.Close
    Return $_output
    EndFunc

    [/autoit]

    So wenn ich das kleine Tools starte öffnet sich die MsgBox. Hier wird allerdings nicht das angezeigt, was hinter "Ergebnis: " stehen soll ($strData1).


    Kommt es mir nur so vor oder sind Datenbanken echt heftig? (Zumindest diese in ein Programm einzubinden).


    Ich brauch mal eine Meinung von euch?

    Meint ihr ich krieg das hin, dass ich die Datenbank, eine Tabelle darin öffne und anschließend nach einer Spalte suche und diese dann mit dem eintrag in einem Inputfeld abgleiche?
    Wenn nicht kann ich das Projekt stoppen.


    Viele Grüße,
    MadCatz =)

    Dateien

    TestDB.PNG 104,71 kB – 0 Downloads
  • Access (.accdb) Datenbank auslesen etc.

    • MadCatz
    • 28. April 2014 um 09:56

    Hey gmmg, ich werde es einmal ausprobieren, wahrscheinlich morgen.

    Wenn es klappt melde ich mich =), falls es nicht klappt natürlich auch nochmal.

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™