Juli 14, 2020, 02:11:44

Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!


VBA Prozeduren einsetzen aber wo ?

Begonnen von samurai, Juli 27, 2012, 09:24:28

⏪ vorheriges - nächstes ⏩

samurai

Hallo, auf die Gefahr hin das ihr mich steinigt oder sonst was macht weil diese Frage evtl schon tausendfach gestellt wurde, ich aber bei der Suche nach einer Antwort völlig überfordert bin, muss ich hier jetzt mal die Frage stellen, wo denn die VBA Befehle bzw. Prozeduren rein geschrieben werden. Ich bin gerade dabei mich mit 'Access zu beschäftigen und stehe noch am Anfang.

Ich habe eine einfache Datenbank gebaut mit einer Tabelle ( Fahrer ) und einer Tabelle ( Fahrerdaten ). Die Abfrage über das Listenfeld funktioniert ja auch alles ganz schön. Ich kann neue Daten erfassen und auch Daten löschen. Das funktioniert alles über die jeweiligen Button.
Nun möchte ich, wenn ich den Button " DATENSATZ LÖSCHEN " betätige, dass eine Messagebox erscheint mit der Frage " Datensatz wirklich löschen ? " und den Button "Ja" welcher dann wirklich den Datensatz löscht, und dem Button "Abrechen" welcher dann wieder zurück zum Datensatz springt.

1. Frage wenn ich jetzt diesen Befehl habe, wo muss ich den einfügen bzw. reinschreiben.
Muss ich in der Entwurfansicht den Button löschen anklicken dann auf Ereignisprozedur gehen?
An welche stelle schreibe ich das dann?

Zur zeit sieht das so aus

Option Compare Database

Private Sub löschen_Click()

   
End Sub

Oder bin ich völlig falsch?
In den Büchern wird immer alles ganz toll beschrieben wie das Auszusehen hat, aber nicht an welche Position das geschrieben wird. Oder ist das letztendlich völlig Wurst und man scheibt das alles einfach untereinander?

Bitte helft mir. Ganz großes Danke schon mal vorab.
Samurai.

bahasu

Hallo,

die sub bitte ergänzen um:

Private Sub löschen_Click()
  Dim Antwort as string
 
  Antwort = MsgBox ("Löschen", vbYesNo)

  if Antwort = vbYes then
     MsgBox "Ja"  ' hier muß eine Löschroutine hin: hast Du das?
  else
     MsgBox "Nein"
  end if

End Sub

Harald
Servus

samurai

Hier mal die komplette Prozedur der Datenbank.


Option Compare Database

Private Sub öffnen_Click()
On Error GoTo Err_öffnen_Click


    stDocName = "tblFahrerdaten"
   

Exit_öffnen_Click:
    Exit Sub

Err_öffnen_Click:
    MsgBox Err.Description
    Resume Exit_öffnen_Click
   
End Sub
Private Sub Bericht_drucken_Click()
On Error GoTo Err_Bericht_drucken_Click

    Dim stDocName As String

    stDocName = "tblFahrerdaten"
    DoCmd.OpenReport stDocName, acNormal

Exit_Bericht_drucken_Click:
    Exit Sub

Err_Bericht_drucken_Click:
    MsgBox Err.Description
    Resume Exit_Bericht_drucken_Click
   
End Sub
Private Sub bericht_öffnen_Click()
On Error GoTo Err_bericht_öffnen_Click


    stDocName = "berFahrerdaten"
   

Exit_bericht_öffnen_Click:
    Exit Sub

Err_bericht_öffnen_Click:
    MsgBox Err.Description
    Resume Exit_bericht_öffnen_Click
   
End Sub

Private Sub cmdloeschen_Click()

End Sub


Private Sub cmdneu_Click()

End Sub

Private Sub Form_Load()



End Sub


Private Sub Form_Open(Cancel As Integer)
On Error GoTo Err_Form_Open
    DoCmd.GoToRecord , "", acNewRec

Exit_Form_Open:
    Exit Sub
Err_Form_Open:
    MsgBox Error$
    Resume Exit_Form_Open
End Sub

Private Sub Mitarbeiterliste_AfterUpdate()

End Sub

Private Sub lstMitarbeiterliste_AfterUpdate()

End Sub

samurai

Hallo Harald, habe das jetzt eingefügt. Was ist eine Löschroutine ? Ich glaub ich habe so etwas nicht.

bahasu

Hallo,

anbei ein Vereinfachungsvorschlag:

Im Formular nutzt Du das Ereignis "Vor Löschbestätigung":
Private Sub Form_BeforeDelConfirm(Cancel As Integer, Response As Integer)
   Dim Antwort As String
   
   Antwort = MsgBox("Löschen ?", vbYesNo)
   Cancel = Not Antwort = vbYes
End Sub

Dann sollte vor dem Löschen die Frage "Löschen ?" angezeigt werden.
Wenn "Nein" angeklickt wurde, ist Antwort nicht Ja, also wird cancel auf true gesetzt, d.h. es wird nicht gelöscht, ansonsten wird gelöscht.

Ist Dir damit geholfen?

Harald
Servus

MzKlMu

Hallo,
oder ganz einfach so:
Private Sub Löschen_Click()
   If MsgBox("Soll der Datensatz wirklich gelöscht werden ?", vbYesNo) = vbYes Then
       DoCmd.RunCommand acCmdDeleteRecord
   End If
End Sub


Und da Du Anfänger bist, warum soll ein Datensatz gelöscht werden?
In einer DB werden im Regelfall nur falsche Daten gelöscht.
Gruß
Klaus

samurai

Warum sollen Daten gelöscht werden. Weil z.B. einige der Fahrer nicht mehr vorhanden sind, wegen Rente oder Tod etc.
Da dies nur einie Datenbank für ein sehr kleinen Personenkreis ist und diese Daten nicht unbedingt gespeichert werden müssten.

Aber die Frage ist berechtigt und ich muss zugeben das ich mir darüber nicht wirklich gedanken gemacht habe. Da das Datenvolumen ja nicht immens groß ist, sollte ich mir das mit dem löschen noch einmal überlegen. Evtl. kommt auch eine msgbox mit dem Hinweis "Wollen sie wirklich die Daten überschreiben? "  in Frage.

Das Problem ist eigentlich ganz einfach. Mein Vorgestzter und einige andere sind immer sehr schnell mit dem schreiben und und klicken, dann ist ein Datensatz mal eben schnell gelöscht oder Daten sind überschrieben.
Samurai.

MzKlMu

Hallo,
ZitatWarum sollen Daten gelöscht werden. Weil z.B. einige der Fahrer nicht mehr vorhanden sind, wegen Rente oder Tod etc.
In diesen Fällen solltest Du das Löschen unterlassen. Wenn es Tabellen mit Beziehungen gibt, ist es auch so ohne weiteres möglich Datensätze zu löschen.
Führe in der Tabelle ein Feld mit dem Namen Status und ein Datumsfeld.
Dort schreibst Du dann rein Rente und das Datum dazu.

Genau genommen sind hier weitere Tabellen erforderlich z.B. für die möglichen Status.

Was hast Du denn bis jetzt für Tabellen mit welchen Feldern und Beziehungen.
Es stellt sich auch die Frage, wie unterscheiden sich die beiden Tabellen Fahrer und Fahrerdaten ?
Gruß
Klaus

samurai

Also ich habe jetzt alles ausprobiert ich bekomme keine MSG Box angezeigt, noch werden die Datensätze gelöscht.
Ich komme da irgendwie nicht weiter was das löschen betrifft bzw. das Anzeigen der MsgBox.
Verstehe ich das jetzt richtig, dass die Befehle im Prinziep unter Privat Sub bzw. über End Sub geschrieben werden ?
könnte es evtl daran liegen das ich mit Access 2007 arbeite und hier Makros verwendet werden ? Damit kann ich nun überhaupt nix anfangen. Kann man Makros deaktivieren?
Samurai





MzKlMu

Hallo,
ZitatVerstehe ich das jetzt richtig, dass die Befehle im Prinziep unter Privat Sub bzw. über End Sub geschrieben werden ?
Ja, genau ist in meinem Code ja zweifelsfrei zu erkennen.

Was steht denn in der Zeile "Beim Klicken" des Löschen Buttons?
Gruß
Klaus

oma

Hallo,

da man auf verschiedene Weise einen DS löschen kann (auch ohne Löschbutton) , ist der Vorschlag von Harald in #4 schon der bessere Weg.

Gruß Oma
nichts ist fertig!

samurai

@MzKlMu

O.K. Sieht folgender Maßen aus: eine Tabelle mit folgenden Spalten. Name, Vorname, Telefonnr., Dienstleiter, Tournr. .
Also eine Tabelle welche den Namen Fahrer hat. In dieser Tabelle sind eben die Fahrerdaten hinterlegt. Im Formular wird ein Listenfeld angezeigt welches die Daten, Name und Vorname anzeigt.
Daneben sind dann die Felder mit den weiteren Informationen wie Name, Vorname, Dienstleister Telefonnr. ,Tour. angelegt. Hier kann man nun ( oder so sollte es sein ) die neuen Fahrer eingeben und speichern, oder Fahrer suchen lassen. Das problem dabei ist, wenn ich jetzt einen Fahrer aus dem Listenfeld auswähle, diesen dann löschen möchte, soll ein Hinweis erscheinen ( msg Box ) " Wirklich löschen ? " oder ähnliches. Und das funktioniert eben nicht.  Es gibt 3 Button: suchen, neu, löschen.
Bei suchen geht alles wunderbar ich gebe den Namen ein und er erscheint rechts in den Feldern. Bei neu auch alles gut, ich erhalte ein leeres Feld und kann auch die Daten eingeben und diese werden dann nach neustart angezeigt. Beim löschen geschieht irgendwie gar nichts. Ich wähle mir einen Namen aus, klicke auf löschen, aber nichts geschieht. Auch nach dem Neustart von Access steht der Name nach wie vor in der Datenbank.
Also es ist eine Tabelle. Das andere kommt später, erst einmal möchte ich mit der kleinen Form beginnen.
Samurai

bahasu

Hi,

vielleicht hilft das Beispiel im Anhang.
Dort ist eine a2003-Datei und ein Word-Dokument mit einer Kurzanleitung.

Harald

[Anhang gelöscht durch Administrator]
Servus

samurai

Private Sub löschen_Click()

   If MsgBox("Soll der Datensatz wirklich gelöscht werden ?", vbYesNo) = vbYes Then
       DoCmd.RunCommand acCmdDeleteRecord
   End If
 
End Sub

Das habe ich jetzt so eingefügt.

MzKlMu

Hallo,
Du hast meine Frage nicht beantwortet:
ZitatWas steht denn in der Zeile "Beim Klicken" des Löschen Buttons?


ZitatAlso es ist eine Tabelle. Das andere kommt später, erst einmal möchte ich mit der kleinen Form beginnen

Das dürfte der falsche Weg sein. Erst sollten das Datenmodell mit allen Tabellen und Beziehungen vollständig erstellt sein, dann kann man erst mit den Formularen beginnen.
Zitateine Tabelle mit folgenden Spalten. Name, Vorname, Telefonnr., Dienstleiter, Tournr. .
Da ein Fahrer ja wahrscheinlich mehrere Touren haben kann, hat die Tournummer in der Fahrertabelle nichts zu suchen. Und auch beim Dienstlieter habe ich so meine Zweifel. Zumindest sollte es eine Tabelle geben mit allen Dienstleitern. In die Fahrertabelle kommt dann nur ein Fremdschlüssel zum Dienstleiter.

Du solltest Dich dringend mit den Grundlagen zur Erstellung einer relationalen Datenbank beschäftigen.
Gruß
Klaus