Fehlermeldung auf anderen Pcs

  • hi!

    ich hab ein skript geschrieben das auf eine access datenbank zugreift und es funktioniert einwandfrei. aba auch nur auf meinen pc -.-. ich hab auf dem fremden rechner natürlich access drauf doch die exe gibt mir immer die fehlermeldung:

    The requested action with this object has failed

    ich hab schon diverse andere skripts geschrieben die auf anderen rechner einwandfrei laufen jedoch haben die nicht auf access zugegriffen. hat vielleicht jemand ne idee was die fehlermeldung auslöst? gibts da ein include das ich nicht eingebunden hab?

    lg Mök

    Einmal editiert, zuletzt von Mök (26. Januar 2009 um 11:29)

  • hier is der code, und ich hab herausgefunden das es anscheinent ein problem mit den rechten am pc ist. user können das programm nicht ausführen da bei der verbindung zur datenbank die rechte fehlen. als admin hats geklappt...

    jedoch! ich geb doch nicht allen hier admin rechte xD da muss es ne lösung geben das das auch als user verwendbar is

    Spoiler anzeigen
    [autoit]


    #include <GUIConstants.au3>
    dim $MSG ; Gibt an ob Gespeichert werden soll oder nicht
    dim $Speichern ; die variable wo die Speicherbotton-ID is
    dim $DICHTPR ; das is die Combobox
    Dim $PDW ; PDW wird verwendet um den gewählten Prüfdruck aus der Combobox in die Datenbank zu schreiben.
    $FLDNAME= "DICHTPR" ; Feldname des zu bearbeitenden Feldes für die SQL-Unterfunktion
    $EM_GETSEL = 0x00B0 ; ist anzugeben bei auslesen aus GUI_Steuerelementen
    $EsKannNurEinenGeben = "Prüfdruck"
    If WinExists($EsKannNurEinenGeben) Then Exit ; Kümmert sich drum das Prüfdrück nur einmal läuft
    AutoItWinSetTitle($EsKannNurEinenGeben)
    HotKeySet("{Space}", "Vergleich") ; Start mit Space
    HotKeySet("^q", "_Exit") ; ende mit STRG+q
    ;----------------------------------------------------------------------3NS-Auslese--------------------------------------------------------------------------------------
    Dim $array[4] ; Array mit ins. 4 Werten, speichert die Position des GasFensters, Nur 0 und 1 wird gebraucht, bekommen aber 4 Werte..
    Dim $handle ; Das Fensterhandle vom Sourcecode des GasFensters
    Dim $textii ; Stringvari able, in der der komplette Sourcecode des GasFensters steht
    Dim $stringpos ; Anfänglich lediglich zum referenzieren der Stelle im Sourcecode, wo die Obj_ID dann steht
    Dim $title ; Name des aktuellen Fensters
    Dim $nameofsource="WiengasDWF[" ; Schließt das Queltextfenster mit dem Titel
    Dim $pos ; Mousepositition
    dim $i
    ;----------------------------------------------------------------Verzeichnis der Datenbank------------------------------------------------------------------------------
    $DBNAME="v:\Accdat03\Rohrform2003\Rohrfehl2003.mdb" ; Verzeichniss wo die datenbank liegt
    ;$DBNAME="C:\Dokumente und Einstellungen\netlc9\Desktop\test1.mdb" ; Testdatenbank mit 1 tabelle //WIENGAS_UT_FACILITY_WG// und 2 feldern //SAPKEY_HAL//DICHTPR//
    ;-------------------------------------------------------------------------Programm--------------------------------------------------------------------------------------
    While 1
    Sleep(1) ;Hauptteil des Programmes. wartet auf Hotkey
    Wend
    ; Hauptfunktion
    func Vergleich()
    $stringpos=_GetNS()
    ClipPut ($stringpos)

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

    ;Sucht aus der Tabelle WIENGAS_UT_FACILITY_WG den prüfdruck mit dem 3NS-*
    $SQL2="SELECT WIENGAS_UT_FACILITY_WG.DICHTPR FROM WIENGAS_UT_FACILITY_WG WHERE WIENGAS_UT_FACILITY_WG.SAPKEY_HAL LIKE '%" &$stringpos& "%'"
    ;Msgbox (0,"test",$SQL2)
    $STRDATA = _Search($SQL2, $DBNAME, $FLDNAME) ; öffnet das Unterprogramm/die Funktion für die Suche nach dem oben beschriebenen Werten
    If $STRDATA = "|" Then
    CreatGUI() ; Öffnet die GUI
    Save() ; Öffnet die Eingabe Speicherfunktion
    GUIDelete()
    EndIf

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

    If $STRDATA <> "|" Then ; Im falle dass es einen Wert im Feld DICHTPR für den 3NS schon gibt passiet nix

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

    EndIf
    endfunc

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

    ;3NS wird aus dem Webgisfenser ausgelesen
    func _GetNS()
    $title=WinGetTitle("") ; Name des aktuellen Fensters

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

    AutoItSetOption("WinTitleMatchMode",2)
    if stringinstr($title,"Al-Hauptabsperrelement") then ; hat das Fenster den richtigen Namen?
    BlockInput(1)
    $array=WinGetPos("") ;Position des Gas fensters
    MouseMove($array[0]+20,$array[1]+50,0) ;Verschieben des Mauszeigers in der x und y Koordinate um 100
    MouseClick("right") ;Betätigen des rechten Mausklicks
    Send("{Q}") ;Öffnen des Quelltextes
    WinWaitActive($nameofsource) ;Warten bis der Quelltext geöffnet ist
    $handle = WinGetHandle("", "") ;dem SourceCodeFenster einen Handle zuweisen
    WinSetState($handle,"",@SW_HIDE) ;SourceCodeFenster verstecke
    WinSetState($handle,"",@SW_MINIMIZE) ;SourceCodeFenster minimieren
    WinSetState($handle,"",@SW_SHOW) ;SourceCodeFenster anzeigen
    $textii=WinGettext($handle) ;Auslesen des SourceCodes

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

    $stringpos=StringInStr($textii,"VBscript:opener.Hy_SAP_Exec(&quot;") ;Herauslesen wo die Object ID anfängt

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

    $stringpos=$stringpos + stringlen("VBscript:opener.Hy_SAP_Exec(&quot;") ;Zu dem herausgelesenen die Länge des zu überprüfenden Strings dazuzählen
    ;Jetzt wissen wir die genaue Position
    $stringpos = Stringmid($textii,$stringpos,11) ;Jeder 3NS ist genau 11 Zeichen lang und hier holen wir sie uns heraus

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

    WinKill($nameofsource) ;schließen des SourceCodeFensters
    BlockInput(0)

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

    endif
    Return $stringpos
    EndFunc

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

    ;Erschafft eine Gui
    func CreatGUI ()
    GUIDelete()
    GUICreate("Prüfdruck",270,115) ; Erstellet eine GUI mit
    GUISetFont (11)
    GUICtrlCreateLabel ( "Bitte Prüfdruck eingeben:", 20, 10 )
    $ANZEIGE = GUICtrlCreateInput ( "", 20, 40, 100, 24) ; einer InputZeile wo der 3NS angegeben wird,
    $DICHTPR = GUICtrlCreateCombo("Prüfdruck", 125, 40, 125) ; eine Combobox mit den Vorgegeben Werten für den Prüfdruck und
    $SPEICHERN = GUICtrlCreateButton ("Speichern", 20, 75, 75, 25) ; einen Button der die Einbage in der Datenbank abspeichert.
    GUISetState (@SW_SHOW)
    GUICtrlSetState($ANZEIGE, $GUI_DISABLE) ; Sperrt das Steuerelement um Usereingaben zu blockieren
    GUICtrlSetData($ANZEIGE, $stringpos) ; schreibt den 3NS in die Inputzeile
    $PDVORGABE = "35 mbar|40 mbar|50 mbar|60 mbar|70 mbar|80 mbar|90 mbar|100 mbar|110 mbar|120 mbar|130 mbar|140 mbar|150 mbar|160 mbar" ; Prüfdruckvorgabe für der Combobox
    $PDVORGABE = $PDVORGABE &"|170 mbar|180 mbar|190 mbar|200 mbar|210 mbar|220 mbar|1000 mbar|2 bar|3 bar|4 bar|5 bar|6 bar|7 bar|7,5 bar|8 bar|9 bar|10 bar|11 bar|12 bar|34 bar|Skizze fehlt|Keine Angabe" ; Prüfdruckvorgabe für der Combobox

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

    GUISetFont (11)
    GUICtrlSetData($DICHTPR, $PDVORGABE) ; schreibt die Prüfdruckvorgaben in die Kombobox
    GUICtrlSetState($DICHTPR,$GUI_FOCUS)
    Endfunc

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

    ; speichert die Prüfdruckeingabe
    Func Save()
    $i=1
    While $i=1
    HotKeySet("{ENTER}","_Enter")
    $MSG = GUIGetMsg() ; Wartet das etwas passiert
    Select
    Case $MSG = $SPEICHERN ; in dem Fall das Speichern gedrückt wird startet diese Case-Anweisung
    HotKeySet("{ENTER}")

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

    $PDW=GUICtrlRead ( $DICHTPR ) ; holt den gewählten Prüfdruck aus der Combobox
    If $PDW="Prüfdruck" Then
    endif

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

    ; hier geht man sicher das nicht eine andere eingabe außer den vorgegebenen gespeichert wird (OK etwas übertrieben! aber es funktioniert)
    If $PDW="35 mbar" or $PDW="40 mbar" or $PDW="50 mbar" or $PDW="60 mbar" or $PDW="70 mbar" or $PDW="80 mbar" or $PDW="90 mbar" or $PDW="100 mbar" or $PDW="110 mbar" or $PDW="120 mbar" or $PDW="130 mbar" or $PDW="140 mbar" or $PDW="150 mbar" or $PDW="160 mbar" or $PDW="170 mbar" or $PDW="180 mbar" or $PDW="190 mbar" or $PDW="200 mbar" or $PDW="210 mbar" or $PDW="220 mbar" or $PDW="1000 mbar" or $PDW="2 bar" or $PDW="3 bar" or $PDW="4 bar" or $PDW="5 bar" or $PDW="6 bar" or $PDW="7 bar" or $PDW="7,5 bar" or $PDW="8 bar" or $PDW="9 bar" or $PDW="10 bar" or $PDW="11 bar" or $PDW="12 bar"or $PDW="34 bar" or $PDW="Skizze fehlt" or $PDW="Keine Angabe" Then
    ;Speichert in der Tabelle WIENGAS_UT_FACILITY_WG den neunen ausgewählten Wert $PDW in das Feld DICHTPR mit dem 3NS*
    $SQL2="SELECT WIENGAS_UT_FACILITY_WG.DICHTPR FROM WIENGAS_UT_FACILITY_WG WHERE WIENGAS_UT_FACILITY_WG.SAPKEY_HAL LIKE '%" &$stringpos& "%'"
    $STRDATA = _Write($SQL2, $DBNAME, $FLDNAME) ; Funktion die zurück in die datenbank schreibt
    $i=0 ; Nach der Eingabe wird das Fenster wieder versteckt
    EndIf
    Case Else
    EndSelect
    If $MSG = $GUI_EVENT_CLOSE Then ExitLoop
    Wend
    endfunc

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

    func _Exit()
    Exit ; Schließt die Anwendung mit STRG+q
    endfunc
    func _Enter()
    $msg= $speichern ; Gibt den Tastendruck weiter ans Programm
    endfunc
    ;Datenbankfunktionen
    ;Suchfunktion für Vergleich ob Prüfdruck schon eingetragen ist
    Func _Search($_sql, $_dbname, $_field)
    Dim $_output
    $adoCon = ObjCreate ("ADODB.Connection")
    $adoCon.Open ("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & $_dbname)
    $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
    ;Zurückschreiben in die Datenbank
    Func _Write($_sql, $_dbname, $_field)
    Dim $_output
    $adoCon = ObjCreate ("ADODB.Connection")
    $adoCon.Open ("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & $_dbname)
    $adoRs = ObjCreate ("ADODB.Recordset")
    $adoRs.CursorType = 1
    $adoRs.LockType = 3
    $adoRs.Open ($_sql, $adoCon)

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

    With $adoRs
    If .RecordCount Then
    .Fields($_field) = $PDW
    .Update
    EndIf
    EndWith
    $adoCon.Close
    Return $_output
    EndFunc

    [/autoit]

    Einmal editiert, zuletzt von Mök (13. Januar 2009 um 09:10)

  • Moin,


    Vielleicht liegt das Problem woanders!
    Die User haben mind. Lesen Recht auf V:\accdat03\\Rohrform2003 ?

    Falls die User Änderungen einpflegen, benötigen diese Ändern Recht!

    ;-))

    Stefan

  • ok .. is ma peinlich... hab den fehler gefunden... wie ich den code geschrieben hab war die tabelle die ich anspreche ne normale tabelle in der datenbank... jedoch hat jemand die tabelle umgeändert und ne tabellenverknüpfung auf den oracel server erstellt mit selben namen und selben daten. da nur admins rechte haben auf die zuzugreifen hat es mir bei jedem user die fehlermeldung ausgespuckt und bei admins hats ausgesehn das alles beim alten is...

    sorry das ich ech wegen so was generft hab xD

    is net meine woche -.-

    danke euch

    lg Mök