Access-o-Mania

Access-Forum (Deutsch/German) => Formular => Thema gestartet von: joepaul am Januar 15, 2011, 21:46:45

Titel: Automatisch neuen Datensatz erzeugen
Beitrag von: joepaul am Januar 15, 2011, 21:46:45
In meiner Access-Datenbank befinden sich die beiden Tabellen ,,Kunden" und ,,Rechnungen", die über das Feld ,,Kundennummer" mit einer 1:n-Beziehung miteinander verknüpft sind sowie je ein entsprechendes Eingabeformular.

Ich möchte nun im Formular ,,Kunden" eine Befehlsschaltfläche erstellen, die bewirkt, dass im Formular ,,Rechnungen" ein neuer Datensatz erzeugt wird, bei dem die Kundennummer des Kunden, der beim Anklicken der Schaltfläche im Formular angezeigt wird, in den neuen Rechnungs-Datensatz eingefügt wird.

Dies ist wohl nur über eine Ereignisprozedur zu realisieren? Leider habe ich nur wenige Programmierkenntnisse.
Titel: Re: Automatisch neuen Datensatz erzeugen
Beitrag von: DF6GL am Januar 15, 2011, 21:56:55
Hallo,

ja, in der Tat...

Sub btnNeueRechnung_Click()
Docmd.Openform "frmRechnung", , , , acFormAdd, acDialog, Me!Kundennummer
End Sub

und im Form "frmRechnung"

Sub Form_Load()
If not isNull(Me.Openargs) then  Me!Kundennummer.Defaultvalue=Me.Openargs
End Sub


falls "Kundennummer" in der Tabelle vom Datentyp Zahl, Long ist als auch in beiden Forms je ein Textfeld/Kombi ist, das an das entspr. Tabellenfeld gebunden ist.
Titel: Re: Automatisch neuen Datensatz erzeugen
Beitrag von: joepaul am Januar 17, 2011, 14:33:59
Herzlichen Dank!
Habe die Codes (hoffentlich an den richtigen Stellen) eingetragen.
Bei Klicken der Schaltfläche kommt nun allerdings die Fehlermeldung

Laufzeitfehler '438'
Objekt unterstützt diese Eigenschaft oder Methode nicht"; moniert wird der Ausdruck

,,Me!Kundennummer.DefaultValue = Me.OpenArgs"

Muss vielleicht noch erwähnen, dass ich mit Access 97 arbeite.

Grüsse Joe
Titel: Re: Automatisch neuen Datensatz erzeugen
Beitrag von: DF6GL am Januar 17, 2011, 16:12:46
Hallo,

mhmm, ich weiß jetzt nicht (mehr) ob A97 "Defaultvalue" und/oder "Openargs" unterstützt...

Schau mal in der VBA-Hilfe unter "openform" nach, ob es den enstpr. Parameter gibt...


Andererseits muß es das Feld "Kundennummer" auch wirklich im Formular geben und es muß an das Feld Tabellenfeld "Kundennummer" gebunden sein.
Titel: Re: Automatisch neuen Datensatz erzeugen
Beitrag von: joepaul am Januar 17, 2011, 18:06:06
In der Access-Hilfe wird bei der Beschreibung der ,,OpenForm"-Methode als in der Syntax letztes Argument genannt: ,,Öffnungsargumente: Ein Zeichenfolgenausdruck, der zum Einstellen der Formulareigenschaft OpenArgs verwendet wird."

Auch ,,DefaultValue" scheint es zu geben. Am Ende der Beschreibung steht allerdings die Bemerkung:

,,Die Verfügbarkeit der DefaultValue-Eigenschaft hängt vom übergeordneten Objekt der Fields-Auflistung ab, wie in der folgenden Tabelle gezeigt." In dieser Tabelle steht dann u.a.:
,,Objekt angefügt an Index-Objekt: Die DefaultValue-Eigenschaft ist dann nicht unterstützt"
Ich weiß nicht, ob ich das richtig verstanden habe, aber ich habe daraufhin die Indizierung der beiden Kundennummern-Felder in den Tabellen entfernt, was aber an der Sachlage nichts geändert hat.

Die Felder ,,Kundennummer" gibt es in den Formularen, und sie sind beide an die richtigen Tabellenfelder gebunden.

Grüsse Joe
Titel: Re: Automatisch neuen Datensatz erzeugen
Beitrag von: DF6GL am Januar 17, 2011, 18:40:03
Hallo,

poste nochmal mit coy&paste den kompletten verwendeten Code.
Titel: Re: Automatisch neuen Datensatz erzeugen
Beitrag von: MzKlMu am Januar 17, 2011, 19:05:35
Hallo,
wollte noch einen kleinen Hinweis los werden:

Wenn man die Bestelldatensätze in einem Unterformular des Formulras "Kunden" darstellt/eingibt, geht das alles ohne VBA und automtisch, da man Hafo und Ufo über die Schlüsselfelder verknüpfen kann.
Titel: Re: Automatisch neuen Datensatz erzeugen
Beitrag von: joepaul am Januar 17, 2011, 19:14:20
Der gesamte Code des Formulars ,,Rechnungen_Frm" ist:

Option Compare Database
Option Explicit

Private Sub Befehl8_Click()
On Error GoTo Err_Befehl8_Click

    Screen.PreviousControl.SetFocus
    DoCmd.DoMenuItem acFormBar, acEditMenu, 10, , acMenuVer70

Exit_Befehl8_Click:
    Exit Sub

Err_Befehl8_Click:
    MsgBox Err.Description
    Resume Exit_Befehl8_Click
   
End Sub

Sub Form_Load()
If Not IsNull(Me.OpenArgs) Then Me!Kundennummer.DefaultValue = Me.OpenArgs
End Sub


Der Code des Formulars "AdressenML_Eingabe" mit der Befehlsschaltfläche ist leider ziemlich umfangreich, daher hänge ich ihn als Angang an. Bitte nicht in Ohnmacht fallen; das kommt daher, dass die Datenbank aus der Kopie einer ehemals sehr umfangreichen Datenbank stammt. Das meiste davon ist inaktiv.

Der Auszug mit der entsprechenden Passage ist:

Private Sub Befehl570_Click()
On Error GoTo Err_Befehl570_Click

    DoCmd.OpenForm "Rechnungen_Frm", , , , acFormAdd, acDialog, Me!Kundennummer

Exit_Befehl570_Click:
    Exit Sub

Err_Befehl570_Click:
    MsgBox Err.Description
    Resume Exit_Befehl570_Click
   
End Sub


Grüsse Joe








[Anhang gelöscht durch Administrator]
Titel: Re: Automatisch neuen Datensatz erzeugen
Beitrag von: DF6GL am Januar 17, 2011, 20:29:37
Hallo,


was passiert, wenn Du das Fom "Rechnungen_Frm" aus dem Datenbankfenster direkt öffnest?

Kannst Du dann eine Kundennummer in das Form-Textfeld "Kundennummer" (nochmal Namen prüfen) eingeben und wird diese auch anschliessend in der betr. Tabelle gespeichert?
Titel: Re: Automatisch neuen Datensatz erzeugen
Beitrag von: joepaul am Januar 17, 2011, 20:50:43
Hallo,
das Formular wird dann normal geöffnet. Ich kann wie von dir beschrieben eine Nummer in das Feld (Name stimmt) eingeben, und sie wird in der Tabelle gespeichert.

Nach Klicken des Schaltfläche, Auftreten des ,,Laufzeitfehlers" und Wegklicken der Fehlermeldung ist das Formular übrigens ebenfalls geöffnet, und es wird nur ein einziger leerer Datensatz angezeigt. In dieser Situation sind die übrigen geöffneten Fenster blockiert; ich kann erst zu einem anderen Fenster wechseln, nachdem ich das ,,Rechnungen_Frm" weggeklickt habe.

Grüsse Joe
Titel: Re: Automatisch neuen Datensatz erzeugen
Beitrag von: DF6GL am Januar 17, 2011, 21:14:04
Hallo,

ok,

ändere den Code mal so ab:

Sub Form_Load()
If Not IsNull(Me.OpenArgs) Then Me!Kundennummer= Me.OpenArgs
End Sub
Titel: Re: Automatisch neuen Datensatz erzeugen
Beitrag von: joepaul am Januar 17, 2011, 23:33:12
Super! Es funktioniert!! Vielen Dank für deine Hilfe, freut mich sehr!
Vielleicht kannst du mir noch zwei kurze Fragen beantworten:
a) Nach Klicken der Schaltfläche wird das Formular zwar wie gewünscht geöffnet. Dann besteht aber wieder die oben beschriebene Situation, d.h. ich kann solange nicht zu einem anderen Fenster wechseln, bis ich das Formular schließe. Wie kommt es zu diesem ,,Status"? Der ist mir bislang nicht bekannt.
b) wäre es auch möglich, die Prozedur so zu gestalten, dass das Formular nicht nur den neuen Datensatz, sondern
- auch die anderen dem Kunden zugehörigen Datensätze anzeigt?
oder
- alle anderen Datensätze anzeigt

Viele Grüße an den Bodensee von
Joe
Titel: Re: Automatisch neuen Datensatz erzeugen
Beitrag von: DF6GL am Januar 18, 2011, 11:16:52
Hallo,

a) das kommt durch den aciDialog-Parameter beim Öffnen des Forms. Lass den mal weg.  Ob das aber bzgl. Ablaufsteuerung so empfehlenswert ist, fragt sich..

b) etwa so:
.
.
   DoCmd.OpenForm "Rechnungen_Frm", , , , , , Me!Kundennummer
' bzw.   DoCmd.OpenForm "Rechnungen_Frm", , , "[Kundennummer]=" & Me!Kundennummer, , , Me!Kundennummer  [Edit] fehlenden Gänsefuß ergänzt

.
.

Sub Form_Load()
If Not IsNull(Me.OpenArgs) Then
Docmd.GotoRecord, , acNewRec
Me!Kundennummer= Me.OpenArgs
End If
End Sub


Titel: Re: Automatisch neuen Datensatz erzeugen
Beitrag von: joepaul am Januar 18, 2011, 20:11:59
a) habe ich nicht ausprobiert und lasse es erstmal so.

b) die erste Zeile, die alle Datensätze öffnet, hat gleich funktioniert; bei der zweiten, die nach Kundennummer filtert, hat offenbar vor [Kundennummer] noch ein Anführungszeichen gefehlt; so
DoCmd.OpenForm "Rechnungen_Frm", , , "[Kundennummer] = " & Me!Kundennummer, , , Me!Kundennummer
funktioniert es jedenfalls - ist ok so, oder?

Vielen Dank nochmal!
Grüsse Joe


Titel: Re: Automatisch neuen Datensatz erzeugen
Beitrag von: DF6GL am Januar 18, 2011, 22:37:42
Hallo,

ja, der Gänsefuß hatte gefehlt. Habe das korrigiert...