PDA

Vollständige Version anzeigen : Code nur wenn Artikel aus der Liste gewählt!!


Simon
31.10.2001, 15:00
Hallo,
Ich habe ein Formular mit folgenden Felder:
'ID_Art_Namen', 'Artikelname', 'Kaufpreis', Gebraucht', Gesamtartikelbetrag', 'Gebraucht' und 'ID_DinType'.
Das Feld 'Artikelname' ist ein Kombifeld mit dem ich alle Artikel auswählen kann und auch solche die nicht in der Liste sind. Im Feld 'Gebracht habe ich folgendr Code hinterlegt:

Private Sub Gebraucht_BeforeUpdate(Cancel As Integer)
Dim db As Database
Dim R As Recordset
Set db = CurrentDb()
Set R = db.OpenRecordset("Artikel")
R.MoveFirst
Do Until R.EOF
If R![ID_DinType] = Me![ID_DinType] And R![ID_Art_Nr] = Me![ArtikelNr] Then
R.Edit
R![IstBestand] = R![IstBestand] - Me![Gebraucht]
R.Update
Me![IstBestand] = Me![IstBestand] - Me![Gebraucht]
Exit Do
End If
R.MoveNext
Loop
End Sub

Mein Problem ist jetzt wenn ich Artikel der nicht in der Liste ins Kombifeld 'Artikelname' schreibe und naher im Feld 'Gebracht' eine Zahl eingebe erhalte ich eine Fehlermeldung!

Was muss ich jetzt machen, wenn ich den Code nur will wenn ich von der Liste ein Artikel auswähle und nicht wenn ich selber etwas ist Kombifeld schreibe?!?

Danke und Gruss
Simon

md
31.10.2001, 15:16
Hallo Simon!
Kombifeld ist das Feld, in dem manchmal nichts ausgewählt sein kann.
If IsNull(Me![Kombifeld]) Then
Exit sub
else
Dein Code
end if

MD

Simon
01.11.2001, 05:15
Hallo,

ich bekomme ein Fehlermeldung mit dem Code:
--> Der Datensatz kann nicht hinzugefügt oder geändert werden, da ein Datensatz in der Tabelle 'DinType'mit diesem Datensatz in Bezihung stehen muss.

Wass muss ich noch hineinschreiben oder ändern um den Fehler wegzubekommen??

Gruss Simon

md
01.11.2001, 07:32
Hallo Simon!
Diese meldung kommt immer, wenn zwei Tabellen mit refrenzieller Integrität verknüpft sind und das Verknüpfungsfeld einen Nullwert oder einen Wert enthält, den es in der verknüpften Tabelle nicht gibt.
Du hast also zwei tabellen, Artikel und Dintype.
Warum baust Du Dein Formular nicht auf einer Abfrage auf, die beide Tabellen verbinden, dann geht alles viel einfacher?

Grüße
MD

Simon
01.11.2001, 07:52
Hallo,

Es ist schwer Dir das zu erklären aber wenn ich Dir ne DB schicken darf, damit Du Dir das besser vorstellen kanst?

Gruss Simon

md
01.11.2001, 09:56
Hallo Simon!
Mach ruhig und schick los.
MD

Simon
01.11.2001, 11:19
Hallo,

ich habe Dir ein Mail geschickt und wieder zurückbekommen! Warum weis ich auch nicht!!

Gruss Simon

md
01.11.2001, 14:55
Hallo Simon!
Das Mail ist angekommen,
Du kannst da keinen neuen Artikel hineinschreiben!
Du mußt erst in der Tabelle Werkstattauftrag_Hauptdaten einen neuen Artikel mit der Wanr ( soll Warennummer bedeuten, oder)anlegen.
Die Wanr ist Dein Verknüpfungsfeld zwischen den Tabellen Werkstattauftrag_Hauptdaten und Werkstattauftrag_Artikel, da refrenzielle Integrität eingestellt ist, darf dieses Feld nicht Null sein.
Ein neuer Artikelname ohne WaNr geht also nicht.
Lege zuerst einen Neuen Datensatz in Werkstattauftrag_Hauptdaten an!
MD

Simon
05.11.2001, 09:52
Hallo,

kann mir jemand sagen wie ich den 'ID_DinType' automatisch einfügen kann wenn ich nicht aus dem Kombifeld einen Artikel auswähle sondern selber einen Artikel einschreibe?!?

der jetztige Code:
Private Sub Gebraucht_BeforeUpdate(Cancel As Integer)

If IsNull(Me![Artikelname]) Then
Exit Sub
Else
Dim db As Database
Dim R As Recordset
Set db = CurrentDb()
Set R = db.OpenRecordset("Artikel")
R.MoveFirst
Do Until R.EOF
If R![ID_DinType] = Me![ID_DinType] And R![ID_Art_Nr] = Me![ArtikelNr] Then
R.Edit
R![IstBestand] = R![IstBestand] - Me![Gebraucht]
R.Update
Me![IstBestand] = Me![IstBestand] - Me![Gebraucht]
Exit Do
End If
R.MoveNext
Loop
End If

End Sub

z.B.: -> Kombifeld 'Artikelname' schreibe ich Schweissmaterial hinein und der ID_DinType sollte immer, wenn ich einen Artikel hineinschreibe der nicht in der Liste ist, '620' sein!!

Danke und Gruss
Simon

A.S.
06.11.2001, 06:24
Hallo Simon,

wie Du siehst, reagiere ich auf Deine Löschanforderung. Allerdings anders als gewünscht. ;)

Wenn ich Dich richtig verstanden habe, möchtest Du das nicht existierende Artikel bei Eingabe im Kombinationsfeld mit gewissen Stammdatenvorgaben in die Artikeltabelle übernommen werden. Dafür mußt Du das Ereigniss "Bei Nicht in Liste" des Kombinationsfeldes nutzen.

Ein Beispiel hierfür findest Du in Form der Datei OutlKontakte.Zip im Downloadbereich. Schau es Dir einmal an. Wenn Du weitere Fragen hast, melde Dich noch einmal.

Gruß

Arno

Simon
06.11.2001, 06:37
Hallo Arno,

danke für die Antwort!

Ich erkläre nochmals mas ich machen möchte:

Ich habe ein Kombifeld 'Artikelname', Textfelder ' ID_Art_Nr', 'Kaufpreis', 'Gebraucht', 'ID_DinType', 'WaNr.

Wenn ich im Kombifeld einen Artikel auswähle setzt es mir alle Angaben auser Gebracht selber hinein. Das Problem ist jetzt wenn ich ein Artikel von Hand ins Kombifeld schreibe das nicht in der Liste des Kombifeldes ist sollte es mir automatisch den ID_DinType selber einsetzen (der ID_DinType ist übrigens '620').

Bis anhin muste ich den ID_DinType selber einschreiben, aber das möchte ich nicht mehr!

Ich suche daher eine Formel die mir wenn ich einen Artikel selber einschreibe auch den ID_DinType von 620 selber einfügt.

ACHTUNG: keine speicherung des Artikel in der Tabelle 'Artikel'!!!

Gruss Simon

A.S.
06.11.2001, 07:11
Hallo Simon,

ich weiß zwar nicht, warum Informationen zu nicht existenten Artikeln erfaßt werden sollten, wenn diese nicht gespeichert werden sollen, aber sei's drum [;) ;) :D

Theoretisch solltest Du auch für diesen Zweck das "Bei nicht in Liste"-Ereignis benutzen können, fürchte aber - da ich das für diesen Zweck selbst noch nicht probiert habe - daß dies zu Komplikationen führt.

Daher Rate ich Dir das "Beim Verlassen"-Ereigniss des Kombinationsfeldes zu nutzen und via DLookUp zu prüfen ob die angeforderte Artikelnummer oder -bezeichnung bestandteil der Artikeltabelle ist. Wenn nicht, setzt Du dein ID_DinType-Feld entsprechend auf '620'. BTW: Die Eigenschaft "Nur Listeinträge" muß dafür auf "Nein" stehen.

Gruß

Arno

Simon
06.11.2001, 09:12
Hallo Arno,

kast Du mir sagen was ich für einen Code benötige um das zu machen was Du im Beitrag vorher gemeint hast?!

Gruss Simon

A.S.
06.11.2001, 10:47
dauert noch'was ;) Muß auch arbeiten ;)

A.S.
06.11.2001, 12:03
Hallo Simon,

müßte ungefähr so aussehen..

'Privat Sub Artikelname_Exit()
If IsNull(DLookUp("[Artikelname]", "Artikel", "[Artikelname]='" & Me!Artikelname & "'") Then
Me!ID_DinType = '620'
EndIf
'End Sub

Nicht getestet....

Gruß

Arno