Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Shell Befehlt funktioniert nicht mehr nach Umstieg auf ACCESS 2016

Begonnen von sonja, Januar 20, 2018, 19:14:15

⏪ vorheriges - nächstes ⏩

sonja

Ich verwende seit vielen Jahren in meiner Access 2007 Datenbank einen Shell-Befehl. Auch nach Umstieg auf Windwos 10 funktionierte er noch. Nun habe ich die Datenbank in Access 2016 geöffnet und der Befehl wird nicht mehr ausgeführt.

Call Shell("S:\edi4all\edi4all.exe " & strpath, 1)

Programmaufrufe über Shell ohne Argumente an anderen Stellen funktionieren.

Die Variable ist als String deklariert, als Variant funktioniert es auch nicht. Ich kann mir das überhaupt nicht erklären und wäre sehr dankbar für einen Tipp.

Lachtaube

Was steht denn konkret in strpath?

Wird denn das Programm aus dem VBA-Direktbereich ohne Parameterangabe gestartet?Shell "S:\edi4all\edi4all.exe", 1
Grüße von der (⌒▽⌒)

sonja

Der Programmstart ohne Parameter funktioniert
Der Parameter beinhaltet einen Dateipfad, z.B. S:\Rechnungen\R18_00017.txt


Lachtaube

... und im Dateipfad sind keine Leerzeichen und die Datei existiert auch? Im Zweifeldsfall würde ich das Argument einmal zwischen " setzen.
   Shell "S:\edi4all\edi4all.exe " & Chr$(34) & strpath & Chr$(34), 1
Grüße von der (⌒▽⌒)

steffen0815

Hallo,
Zitatder Befehl wird nicht mehr ausgeführt
Das kann ich mir schwer vorstellen. Entweder wird er ausgeführt oder es gibt eine Fehlermeldung.
Hast du die LZF unterdrückt?
Wie lautet der vollständige Code?
Gruß Steffen

sonja

.. hat leider nichts geändert.
Die Datei existiert und es sind keine Leerzeichen im Namen. Genau der gleiche Code funktioniert in Access 2007 problemlos.
Kann es sein, dass Verweise fehlen? "Microsoft Shell .." habe ich aktiviert
Laufzeitfehler werden angezeigt, ich habe nichts deaktiviert



Wenn ich folgenden Befehl in das Direktfenster eingebe, funktioniert er in Access 2007 und und Access 2016 nicht



call shell ("S:\edi4all\edi4all.exe S:\Rechnungen\R18_00322.txt",1)






Public Sub EDIRechnung(Nummer As String)


Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim strEDIName As String, strpath As String


gNummer = Nummer    'globale Variable




    If MsgBox("EDIRechnung für " & gNummer & " wird erstellt", vbOKCancel) = vbCancel Then
        Exit Sub
    End If
   
        'Pfad zur Speicherung der Textdatei
        strpath = "S:\Rechnungen\" & Replace(gNummer, "/", "_") & ".txt"
               
        'Export
        DoCmd.OutputTo acOutputReport, "RechnungEDI_b", acFormatTXT, strpath
       
        'Parameter für Name der EDI-Datei
        strEDIName = Replace(gNummer, "/", "_")
        'EDI-Datei wird erzeugt
       
        Call Shell("S:\edi4all\edi4all.exe " & strpath, 1)
                 
        'Zeitverzögerung
       
        Call modALLG.Pause(1)
       
        'EDI-Versand für die Datei wird angestoßen
        Call Shell("S:\edi4all\edidmp.exe versand " & strEDIName, 1)
       
        'Name der EDI-Datei wird gespeichert für automatischen EDI-Upload
        Set db = CurrentDb
        Set rs = db.OpenRecordset("tmpEDI")
       
        rs.AddNew
        rs!rech_id = "put " & Chr(34) & "S:\edi4all\sendung\O??_" & Replace(gNummer, "/", "_") & ".edi" & Chr(34)
        rs.Update
       
        rs.Close
       


gNummer = ""


End Sub

DF6GL

Hallo,

siehe  https://support.office.com/en-us/article/shell-function-ff2e4b1b-712d-4e34-aea6-6832eadd3c63

und lies dort die "Note" ...
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

Lachtaube

Mit anderen Worten, ist es anzunehmen, dass Dein Prozess wie erwartet asynchron startet, die naiv veranschlagte Pausenzeit aber nicht ausreicht.

Für Deinen Zweck dürfte auch eher ein Verfahren wie Programm starten, warten, ExitCode bestimmen angemessen sein.
Grüße von der (⌒▽⌒)

sonja

Ich befürchte, das ist nicht das Problem. In diesem Fall müsste doch der Aufruf im Direktfenster funktionieren, oder?

Lachtaube

Ja. Und wenn er nicht funktioniert, muss auch eine Fehlermeldung erscheinen. Du kannst Shell ja auch als Funktion aufrufen und Dir das Ergebnis (die ProzessId) im Direktbereich ausgeben lassen. Sie sollte > 0 sein.

Weiterhin könnte es möglich sein, dass der Sandkastenmodus aktiv ist und die Ausführung verhindert, was ich allerdings von VBA so nicht kenne (vielleicht hat sich aber in neuerem Access-Versionen eine Änderung eingeschlichen?).

Und teste den Aufruf auch einmal mit einer lokalen Datei in einem C:-Verzeichnis.
Grüße von der (⌒▽⌒)

DF6GL

Hallo,

noch ein paar Tips:

Optionen/Sicherheitseinstellungen überprüfen und einstellen  (Vertrauensürdige Speicherorte, Netzwerkdateien zulassen, Makros zulassen, ActiveX zulassen, usw.)


Windows-Zugriffsrechte für die Netzwerkverzeichnisse prüfen.


Zum Sandkastenmodus:

https://support.office.com/de-de/article/einf%C3%BChrung-in-die-sicherheit-von-access-2010-cae6d764-0318-4622-955f-68d9f186d6ca#__toc265079117




Als Nebentest:   Access-Applikation als Administrator ausführen.
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

sonja

Ich habe leider eine Zei lang gebraucht, um alle Tipps abzuarbeiten.
Den Sandkostenmodus konnte ich in der Registry nicht finden, weil das Verzeichnis
\Software\Microsoft\Office\14.0\Access Connectivity Engine\Engines
bei mir nicht exisitert
sondern nur 12.0 und 16.0 - beide ohne das Unterverzeichnis Access Connectivity Engine

Wenn ich Shell als Funktion aufrufe bekomme ich ein Ergebnis >0, aber es passiert leider nichts

Der Aufruf mit einer lokalen Datei auf C: funktioniert auch nicht

Ich bin als Administrator angemeldet.

Die Sicherheitseinstellungen habe ich geprüft.

:'(

DF6GL

Hallo,

noch'n Versuch:

kopiere die exe- und die Datendatei in ein lokales Verzeichnis (z. B. c:\Temp) und passe die Pfade an.


(Oder vielleicht besser noch:  in das DB-Verzeichnis kopieren)

Was passiert dann damit?
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

sonja

auf C: hat es auch nicht geklappt

Der Pfad S: ist auch das Datenbankverzeichnis

Kann es sein, dass der Export meines Berichts als txt-Datei unter ACCESS 2016 irgendwie verändert ist? Ich habe beide Exporte (Access 2007 und 2016 ausgedruckt und verglichen und keinen Unterscheid sehen können)

Lachtaube

Öffne mal ein Kommandozeilenfester, wechsle in das Verzeichnis mit dem Export und versuche, die Umwandlung manuell vorzunehmen. Wenn das funktioniert, solltest Du in Access sicherstellen, dass das aktuelle Verzeichnis auch jenes ist, welche den Export beherbergt.

   ChDrive "S"
   ChDir "S:\Dein\Verzeichnis\Pad
   Shell ...
Und stelle auch einmal die Zeitverzögerung höher ein.
Grüße von der (⌒▽⌒)