Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: Carl am April 25, 2018, 14:05:10

Titel: CurrentDb.Execute mit Zahl
Beitrag von: Carl am April 25, 2018, 14:05:10
Hallo

ich suche einen Button, der den Datensatz aus einem Endlosformular heraus löscht. Ich habs so gemacht. Ich verstehe nicht, was die Zahl "128" bedeutet.


Private Sub Befehl143_Click()
Dim strsql As String
     strsql = "DELETE * FROM tblworkorder WHERE ID =" & Me!ID
     CurrentDb.Execute strsql, 128
     Me.Requery
End Sub


Was könnte das bedeuten? Carl
Titel: Re: CurrentDb.Execute mit Zahl
Beitrag von: MzKlMu am April 25, 2018, 14:09:51
Hallo,
die Zahl 128 ist die Zahl für den Parameter "dbFailOnError".
Der Parameter sorgt für Fehlermeldungen wenn mit der Abfrage was schief läuft.
Nicht mit der Syntax sondern wenn die Abfrage datenbezogen einen Fehler liefern würde.
CurrentDb.Execute strsql, dbFailOnError
ist als das Gleiche.
Titel: Re: CurrentDb.Execute mit Zahl
Beitrag von: DF6GL am April 25, 2018, 14:17:06
Hallo,

wobei solches einfacher ginge:

Private Sub btnDelRec_Click()
Runcommand accmdDeleteRecord
End Sub


In allen Fällen ist dahingehend Obacht geboten, als dass der bei einem Endlosform markierte (der DS , der den Fokus besitzt)   gelöscht wird.
Titel: Re: CurrentDb.Execute mit Zahl
Beitrag von: Carl am April 25, 2018, 14:26:18
Ah, danke. Auch bei meiner Lösung von oben?
Titel: Re: CurrentDb.Execute mit Zahl
Beitrag von: DF6GL am April 25, 2018, 14:29:54
Hallo,

ich sage "allen Fällen",  was Deine Version mit einschließt.
Titel: Re: CurrentDb.Execute mit Zahl
Beitrag von: Carl am April 25, 2018, 14:38:37
Ich habe noch eine andere Frage:

beim Anlegen eines Datensatzes erstelle ich einen zugehörigen Ordner, dessen Pfad aus einem Pfad und einem Feld [[WOOrdnername]] ermittelt wird.

MkDir "S:\katalog\" & Me!WOOrdnername

Mit dem o.g. Button möchte ich aber auch diesen Ordner wieder mit löschen. Soll man dazu auch einen strg dimensionieren oder besser einfach einen direkten delete-Befehl machen?

Carl
Titel: Re: CurrentDb.Execute mit Zahl
Beitrag von: MzKlMu am April 25, 2018, 15:02:34
Hallo,
den Ordner löschen hat ja mit SQL nichts zu tun, das erfordert VBA so wie Du MkDir verwendest.
Löschen ist glaube ich Del, bin aber nicht sicher.
Titel: Re: CurrentDb.Execute mit Zahl
Beitrag von: DF6GL am April 25, 2018, 15:05:18
Hallo,

das ist eine Frage des Programmierstils  und hat mit der Funktionalität nichts zu tun.
Übersichtlicher ist es aber, eine (oder mehrere) String-Variable(n) zu deklarieren und den Pfad bzw. Dateinamen zusammenzusetzen.


btw:  Ein gleichzeitiges Löschen des Pfades und der darin enthaltenen Dateien gelingt nicht den VBA-Befehlen (Rmdir, Kill), dafür ist z. B. das FileScripting-Objekt erforderlich.
Titel: Re: CurrentDb.Execute mit Zahl
Beitrag von: Carl am April 25, 2018, 15:25:43
Also kann man mit VBA gar keine Verzeichnisse mitsamt des Inhalts (ohne nachfragen) löschen?

Wie würdet Ihr denn den Ordner

"S:\katalog\" & Me!WOOrdnername"

löschen, wobei alle nachfragen unterbunden werden sollen?
Titel: Re: CurrentDb.Execute mit Zahl
Beitrag von: Beaker s.a. am April 25, 2018, 16:14:17
Zitatdafür ist z. B. das FileScripting-Objekt erforderlich.
Nicht gelesen ?
Titel: Re: CurrentDb.Execute mit Zahl
Beitrag von: ebs17 am April 25, 2018, 19:02:49
Komplette Verzeichnisbäume löschen (https://msdn.microsoft.com/de-de/library/bb979106.aspx)
Titel: Re: CurrentDb.Execute mit Zahl
Beitrag von: Joss am April 25, 2018, 19:57:12
Noch ein Link zum DBWiki.

VBA Tipp: Alle Dateien und Unterverzeichnisse in einem Verzeichnis löschen (http://dbwiki.net/wiki/VBA_Tipp:_Alle_Dateien_und_Unterverzeichnisse_in_einem_Verzeichnis_l%C3%B6schen)

Gruß
Josef
Titel: Re: CurrentDb.Execute mit Zahl
Beitrag von: Carl am April 25, 2018, 20:49:38
okay, danke. Ich setz mich dran. Ist ganzschön aufwendig, weil man rekursive Schleifen vom Löschen von Dateien und Unterverzeichnissen einbauen muss.

Wäre es nicht einfacher, einfach den windows-Befehl zum Löschen eines Verzeichnisses aufzurufen? Als "entf" des angebenen Pfades mit dem Entsprechenden Windows-Dialoges? Geht sowas?
Titel: Re: CurrentDb.Execute mit Zahl
Beitrag von: DF6GL am April 26, 2018, 09:33:40
Hallo,


kopier den folgenden Code in ein Standardmodul:

Public Function delDir(strPath As String)
Dim fso As Object
   On Error GoTo delDir_Error
If Right(strPath, 1) = "\" Then strPath = Left(strPath, Len(strPath) - 1)
Set fso = CreateObject("Scripting.FileSystemObject")
fso.DeleteFolder (strPath)
Set fso = Nothing

MyExit:
Exit Function

delDir_Error:

    MsgBox "Error " & Err.Number & " (" & Err.Description & ")"
    Resume MyExit
End Function


und ruf die Funktion dort auf, wo das Löschen angesagt ist:

Dim strverz as String
strVerz= "C:\Temp"
.
delDir(strVerz)
.
.
Titel: Re: CurrentDb.Execute mit Zahl
Beitrag von: Carl am April 26, 2018, 13:39:03
Wahnsinn, danke, das isses. :-)

Carl