Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: samurai am Juli 27, 2012, 09:24:28

Titel: VBA Prozeduren einsetzen aber wo ?
Beitrag von: samurai am Juli 27, 2012, 09:24:28
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.
Titel: Re: VBA Prozeduren einsetzen aber wo ?
Beitrag von: bahasu am Juli 27, 2012, 09:38:20
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
Titel: Re: VBA Prozeduren einsetzen aber wo ?
Beitrag von: samurai am Juli 27, 2012, 09:39:06
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
Titel: Re: VBA Prozeduren einsetzen aber wo ?
Beitrag von: samurai am Juli 27, 2012, 09:42:05
Hallo Harald, habe das jetzt eingefügt. Was ist eine Löschroutine ? Ich glaub ich habe so etwas nicht.
Titel: Re: VBA Prozeduren einsetzen aber wo ?
Beitrag von: bahasu am Juli 27, 2012, 09:46:57
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
Titel: Re: VBA Prozeduren einsetzen aber wo ?
Beitrag von: MzKlMu am Juli 27, 2012, 09:52:51
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.
Titel: Re: VBA Prozeduren einsetzen aber wo ?
Beitrag von: samurai am Juli 27, 2012, 10:17:20
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.
Titel: Re: VBA Prozeduren einsetzen aber wo ?
Beitrag von: MzKlMu am Juli 27, 2012, 10:27:44
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 ?
Titel: Re: VBA Prozeduren einsetzen aber wo ?
Beitrag von: samurai am Juli 27, 2012, 10:33:07
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




Titel: Re: VBA Prozeduren einsetzen aber wo ?
Beitrag von: MzKlMu am Juli 27, 2012, 10:38:31
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?
Titel: Re: VBA Prozeduren einsetzen aber wo ?
Beitrag von: oma am Juli 27, 2012, 10:47:18
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
Titel: Re: VBA Prozeduren einsetzen aber wo ?
Beitrag von: samurai am Juli 27, 2012, 10:48:43
@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
Titel: Re: VBA Prozeduren einsetzen aber wo ?
Beitrag von: bahasu am Juli 27, 2012, 10:52:03
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]
Titel: Re: VBA Prozeduren einsetzen aber wo ?
Beitrag von: samurai am Juli 27, 2012, 10:52:19
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.
Titel: Re: VBA Prozeduren einsetzen aber wo ?
Beitrag von: MzKlMu am Juli 27, 2012, 11:00:28
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.
Titel: Re: VBA Prozeduren einsetzen aber wo ?
Beitrag von: samurai am Juli 27, 2012, 11:19:04
Zitat von: MzKlMu am Juli 27, 2012, 11:00:28
Hallo,
Du hast meine Frage nicht beantwortet:
ZitatWas steht denn in der Zeile "Beim Klicken" des Löschen Buttons?

Private Sub löschen_Click()

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

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.

Das eine Datenbank aus mehreren Tabellen mit den dazugehörigen Beziehungen besteht ist mir ja auch bereits klar. Das sollte eigentlich auch nur ein Beispiel sein, um mein Problem zu lösen was das löschen eines Datensatzes betrifft.
Ich habe auf jedenfall schon mal gelernt das man keine Datesätze löschen soll. Das ist doch schon mal was.
Ich werde diese Datenbank jetzt noch einmal überarbeiten mit allen Tabellen und Beziehungen. Werde mich dann noch mal melden wenn ich am verzweifeln bin.
Der Tip mit dem Doppleklick war gut und funktioniert zumindest auf meiner BeispielDB.
Danke für Eure Hilfe.
Samurai, der jetzt erst mal einen Termin war nehmen muss.
Titel: Re: VBA Prozeduren einsetzen aber wo ?
Beitrag von: oma am Juli 27, 2012, 11:51:40
Hallo

@Harald: das du nun eine Lösung mit den uralten und nicht mehr zu empfehlenden Methode: - DoCmd.DoMenuItem -  vorstellst ist ja nicht so optimal  ;D.....

Gruß Oma
Titel: Re: VBA Prozeduren einsetzen aber wo ?
Beitrag von: bahasu am Juli 27, 2012, 12:21:21
Hallo Oma,

zutiefts zerknirscht muss ich zugeben, dass ich mit dem Assi von a2003 einen Button erstellt habe und nicht auf die alten Formulierungen geachtet habe. Asche auf mein Haupt. ;D

Da ich lieber mit dem alten a2003 als mit a2007 arbeite, kannst Du mich gern als Opa bezeichnen.  :D

Harald
Titel: Re: VBA Prozeduren einsetzen aber wo ?
Beitrag von: oma am Juli 27, 2012, 12:24:31
Hallo Opa,

naja, dann passen wir ja wenigstens zusammen..... ;)

Gruß Oma
Titel: Re: VBA Prozeduren einsetzen aber wo ?
Beitrag von: 69bruno am August 15, 2012, 16:46:52
 ;) Nur so nebenbei, abseits der Diskussionen der Gurus hier im Forum.....

Du hattest am Anfang gefragt, wo Du das reinschreiben sollst.......

VBA ist objektabhängig. Wenn Du in einem Formular auf ein Steuerelement, sprich deinen Löschbutton einen Doppelklick machst, kommst Du automatisch in die Eigenschaften des Objekts. Dort das gewünschte Ereignis aussuchen und dort die Prozedur oder ein Makro hinterlegen.
;)

Ich hoffe, das war dir schon klar geworden, neben der ganzen "wie mache ich es am schönsten" Diskussion. Wenn nicht, freue ich mich, wenn ich Dir helfen konnte.
Titel: Re: VBA Prozeduren einsetzen aber wo ?
Beitrag von: MzKlMu am August 15, 2012, 16:53:13
Hallo,
Zitatneben der ganzen "wie mache ich es am schönsten" Diskussion.
Da ging es nicht um Schönheit, da ging es um eine richtige Lösung im Sinne einer Datenbank.
Titel: Re: VBA Prozeduren einsetzen aber wo ?
Beitrag von: 69bruno am August 15, 2012, 16:59:17
Da habe ich ja auch gar nichts gegen, habe genug Hilfe hier erhalten, aber bevor ich jemandem erkläre, wie er es machen soll, sollte ich doch auch die Frage beantworten, wo er es machen soll.  :-\

Oder ???

:)

Bitte jetzt nicht die Goldwaage auspacken. Ich wollte den Inhalt der Diskussion nicht bewerten.

Ok, also streiche "schönsten" setze "besten"
Titel: Re: VBA Prozeduren einsetzen aber wo ?
Beitrag von: database am August 15, 2012, 18:59:57
Hi,

ZitatVBA ist objektabhängig

8) "aber bevor ich jemandem erkläre, wie er es machen soll, sollte ich doch auch die Frage beantworten, wo er es machen soll.."

Erklärst du mir dann auch bitte mal die Sache mit der 'Objektabhängigkeit' - mir ist das bis heute nicht bekannt.

Entschuldige bitte - aber auch der auf die 'Objektabhängikeitserklärung' folgende Text ist ziemlich dürftig um jemanden zu erklären was er mit dem VBA-Code für ein Klick-Ereignis tun soll,
die Empfehlung ein Makro zu verwenden ... gewagt  :'(
Titel: Re: VBA Prozeduren einsetzen aber wo ?
Beitrag von: 69bruno am August 16, 2012, 15:03:35
 ::) Die Erklärung der Objektabhängigkeit machen wir mal bei einem Kaffee oder einem Bier ausserhalb des Forums  ;D

Das mit dem Makro war keine Empfehlung.... ich habe nur versucht darzustellen, dass entweder der VBA-Code oder der Aufruf eines Makros bei dem dazugehörigen Objekt in den Eigenschaften unter den Ereignissen platziert werden kann.....

Ich bin kein Access Guru, ich verstehe die Frage des "wo schreibe ich den Code rein..." so, dass er den Weg zum Codefenster eines Objektes (Steuerelementes) nicht kennt.

Wenn ich ihn falsch verstanden habe, dann Asche auf mein Haupt und überhaupt.

Wenn ich ihn richtig vertsanden habe, soll er bitte mal auf ein Steuerelement doppelklicken und unter den Ereignissen einen Code oder Makro hinterlegen.

Natürlich kommt er in die Codeansicht auch anders, aber auf diesem Weg ist er direkt da, wo er schreiben will.  :-\
Titel: Re: VBA Prozeduren einsetzen aber wo ?
Beitrag von: DF6GL am August 16, 2012, 19:03:38
Hallo,

muss da auch mal einhaken..   :o

"soll er bitte mal auf ein Steuerelement doppelklicken und unter den Ereignissen einen Code oder Makro hinterlegen"


ist schlichtweg falsch/irreführend..


In der Eigenschaften-Zeile eines bestimmten (Objekt-) Ereignisses darf nur zum Einen der Name eines Makros, zum Zweiten der Aufruf einer Public-Funktion (=ftkMeineFunktion() ) oder zum Dritten der Text [Ereignisprozedur] zu stehen kommen..

Im Fall von "[Ereignisprozedur]" kann über die am rechten Rand der Eigenschaftenzeile stehenden 3 Pünktchen der VBA-Editor aufgerufen werden, wobei der Cursor dann automatisch in der dafür vorbereiteten Ereignisprozedur (Prozedurgerüst) steht.



Weitere Infos:

http://www.dbwiki.net/wiki/Access_Anf%C3%A4nger:_Wo_schreibe_ich_den_VBA-Code_hin%3F
Titel: Re: VBA Prozeduren einsetzen aber wo ?
Beitrag von: 69bruno am August 17, 2012, 11:48:32
Erstaunlich, wie viele sich drum kümmern können, wenn man darauf hinweist.

Aber ist mir jetzt auch egal, ich werde hier nicht weiter diskutieren.
Titel: Re: VBA Prozeduren einsetzen aber wo ?
Beitrag von: Beaker s.a. am August 17, 2012, 17:23:20
Dann geh' doch in die DDR.
Titel: Re: VBA Prozeduren einsetzen aber wo ?
Beitrag von: database am August 18, 2012, 09:41:01
@Beaker
:D ::) 8)

Zitat...ich werde hier nicht weiter diskutieren
Eine entsprechende Erwartungshaltung war auch nicht erkennbar  ;D
Titel: Re: VBA Prozeduren einsetzen aber wo ?
Beitrag von: oma am August 18, 2012, 11:05:07
Hallo. hallo

nun lasst es aber mal gut sein !!

Gruß Oma
Titel: Re: VBA Prozeduren einsetzen aber wo ?
Beitrag von: database am August 18, 2012, 13:59:54
... weil wahr isss  :D ;)
Titel: Re: VBA Prozeduren einsetzen aber wo ?
Beitrag von: 69bruno am August 20, 2012, 08:03:08
 :'(