OK ...
Falls du nochmal hilfe benötigst, schreib einfach ...
Gruß gmmg
OK ...
Falls du nochmal hilfe benötigst, schreib einfach ...
Gruß gmmg
Danke
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 =)
Hmm,
muss doch zu fassen sein das Problem..
Ich gehe ja davon aus, dass die Felder auch auslesbare Daten sind, wie z.B. Text usw.:
Hast mal probiert Office neu zu installen?
hallo MadCatz ...
hast du denn mal eine exe daraus erstellt und die dann getestet?
meine exe mit datenbank hat ja bei dir auch funktioniert ...
Was hast du denn Überhaupt für ein Betriebssystem? Ich habe Win7 Professional X64.
im englischen Forum gibts noch den Hinweis, dass man folgenden code am anfang des scriptes einfügen soll!
[autoit]
#region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_UseX64=n
#endregion ;**** Directives created by AutoIt3Wrapper_GUI ****
und hier noch ein weiteres Thema dazu [ gelöst ] Verbindung zu Access 2010 DB nicht möglich
2007 Office System Driver: Data Connectivity Components
http://www.microsoft.com/en-us/download/details.aspx?displaylang=en&id=23734
gruß gmmg
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
=)
GMMG
DU bist ein Genie
Sowohl treiber als auch der Befehl in Kombination haben das Problem beseitigt
=)
Danke danke danke!
super wenn es jetzt geht
Gruß gmmg
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)
ID | Stick | Box
1 35 12
2 2 34
3 3 56
4 4 34
5 52 56
6 60 2
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]Case $Ausleihen
$iStick = Int(GUICtrlRead($Sticknummer))
$iBox = Int(GUICtrlRead($StickBox))
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]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
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"))
in
[/autoit][autoit][/autoit][autoit]$query1 = "SELECT * FROM "&$tabellenname&" WHERE Stick = '" &$iStick&"'"
$strData1 = int(_ReadOneFld($query1, $datenbankpfad, $Spalte,"Sticknummer"))
ändere.
[/autoit][autoit][/autoit][autoit][/autoit]so einfach ist das aber leider nicht
kannst du nicht einfach ein (Select ID FROM "&$tabellenname&" WHERE Stick = '" &$iStick&"'" AND Box = '" &$iBox&"'" ) machen?
[autoit]
$datenbankpfad = "d:\Test.accdb"
$tabellenname = "Tabellentest"
$Spalte0 = "ID"
$Spalte1 = "Stick"
$Spalte2 = "Box"
$query = "SELECT * FROM " & $tabellenname & " WHERE Box = '12' AND Stick = '3'"
$strData1 = _ReadOneFld($query, $datenbankpfad,$Spalte0)
ConsoleWrite($query& @CRLF &$strData1)
MsgBox(0,"",$query & @CRLF & "Ergebnis: " & $strData1)
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)
With $adoRs
If .RecordCount Then
While Not .EOF
$_output = $_output & .Fields($_field).Value
.MoveNext
WEnd
EndIf
EndWith
$adoCon.Close
Return $_output
EndFunc
so in etwa ...
gruß gmmg
Ich Vogel =(
Danke nochmals gmmg
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"))
hallo,
hast du dir mein script richtig angesehen?
in deinem _ReadOneFld sind 4 parameter angegeben, sollten aber nur 3 sein!
auf welche spalte bezieht sich deine variable $Spalte2? das ist mit sicherheit nicht die ID!
$Spalte0 = "ID"
$Spalte1 = "Stick"
$Spalte2 = "Box"
$query = "SELECT * FROM " & $tabellenname & " WHERE Box = '12' AND Stick = '3'"
$strData1 = _ReadOneFld($query, $datenbankpfad,$Spalte0)
poste bitte nochmal dein komplettes script!
gruß gmmg
Der Vierte Parameter bezog sich auf eine Fehlermeldung, die ich in deine Funktion eingefügt hatte, habe ich jetzt allerdings wieder entfernt.
Ich dachte ich muss das hier schreiben:
[autoit]
$query1 = "SELECT ID FROM "&$tabellenname&" WHERE Stick = '"&$iStick&"'"
$strData1 = Int(_ReadOneFld($query1, $datenbankpfad, $Spalte1))
Wichtigster Teil des Tools:
Funktion:
Func _ReadOneFld($_access,$_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($_access,$adoCon)
With $adoRs
If .RecordCount Then
While Not .EOF
$_output = $_output&.Fields($_field).Value&@CRLF
.MoveNext
WEnd
EndIf
EndWith
$adoCon.Close
Return $_output
EndFunc
Programm:
[autoit];~ --Voreinstellungen--------------------------------------------------------------------------------------------------------------------------------------------------------
GUICtrlSetState ($Rueckgabe,$GUI_Disable)
GUICtrlSetState ($Ausleihen,$GUI_Disable)
GUICtrlSetState ($Techniker,$GUI_FOCUS)
$Pfad_Techniker = @ScriptDir&"\Daten\Techniker.ini"
$datenbankpfad = @ScriptDir&"\Test.accdb"
$Ausgeliehen_Stick = @ScriptDir&"\Daten\Ausgeliehene_Sticks.ini"
$Rueckgabe_Stick = @ScriptDir&"\Daten\Rueckgabe_Sticks.ini"
$tabellenname = "Stickübersicht"
$Spalte1 = "Box"
$Spalte2 = "Stick"
$Spalte = "ID"
ComboBox_fill($Pfad_Techniker,"Techniker",$Techniker,"neuen Techniker")
;~ --Lend Box and Sticks---------------------------------------------------------------------------------------------------------------------------------
Case $Ausleihen2
$iStick = int(GUICtrlRead($Sticknummer2))
$iBox = int(GUICtrlRead($StickBox2))
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 $iBox <> "" Then
$query1 = "SELECT Stick FROM "&$tabellenname&" WHERE Stick = '"&$iStick&"'"
$strData1 = Int(_ReadOneFld($query1, $datenbankpfad, $Spalte2))
$query2 = "SELECT Box FROM "&$tabellenname&" WHERE Box = '" &$iBox&"'"
$strData2 = int(_ReadOneFld($query2, $datenbankpfad, $Spalte1))
If $iBox = $strData2 Then
ConsoleWrite($query1&@CRLF&$strData1)
MsgBox(0,"",$query1&@CRLF& "Ergebnis: " &$strData1)
ConsoleWrite($query2&@CRLF&$strData2)
MsgBox(0,"",$query2&@CRLF& "Ergebnis: " &$strData2)
IniWrite($Ausgeliehen_Stick,$iBox,"0","-")
$Array1 = IniReadSection($Ausgeliehen_Stick, $iBox)
$LastIndex1 = $Array1[0][0]
IniWrite($Ausgeliehen_Stick,$iBox,$LastIndex1,$iStick)
IniDelete($Ausgeliehen_Stick,$iBox,"0")
ElseIf $iStick <> $strData1 Then
MsgBox(0,"","Diese Sticknummer exestiert nicht.")
ElseIf $iBox <> $strData2 Then
MsgBox(0,"","Diese StickBox exestiert nicht.")
EndIf
EndIf
GMMG ich hab das überlesen in deinem Post:
[autoit]$query = "SELECT * FROM " & $tabellenname & " WHERE Box = '12' AND Stick = '3'"
$strData1 = _ReadOneFld($query, $datenbankpfad,$Spalte0)
ich werd das jetzt mal ausprobieren.
Sorry, dass ich es nicht gesehen habe
Also, nochmal es Funktioniert =)
Ich danke die gmmg, das du soviel Geduld mit mir hast =)
Ich denke, dass es jetzt das letzte mal war, dass ich irgendetwas zu den Datenbanken fragen muss =)