Neuigkeiten:

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

Mobiles Hauptmenü

Bei nicht in Liste

Begonnen von gromax, Mai 31, 2016, 23:04:00

⏪ vorheriges - nächstes ⏩

gromax

Liebe Access-Profis,

in meinem Eingabeformular 'frm_BuchEingabe' habe ich ein Unterformular 'frm_Autoren2Buecher' eingebracht, das aus einem Kombinationsfeld (cmb_AUT_FS) besteht, in dem die Autoren der Bücher ausgewählt werden. Dieses cmb_AUT_FS greift auf eine Abfrage mit dem SQL_Code
SELECT tblAutoren.AUT_PS, IIf([AUT_Vorname] Is Not Null And [AUT_Nachname] Is Not Null,[AUT_Nachname] & ", " & [AUT_Vorname],[AUT_Nachname]) AS VN
FROM tblAutoren
ORDER BY IIf([AUT_Vorname] Is Not Null And [AUT_Nachname] Is Not Null,[AUT_Nachname] & ", " & [AUT_Vorname],[AUT_Nachname]);

zurück. (Ich muss hier auch öffentliche Institutionen als Autoren/Herausgeber eingeben können und dann sollte dort nach dem Nachnamen kein "," erscheinen.)

Jetzt habe ich das Problem, dass neue Autoren nicht einzugeben sind.

Also greife ich bei dem Ereignis 'Bei Nicht in Liste' mit dem Code:
Private Sub cmb_AUT_FS_NotInList(NewData As String, Response As Integer)
Response = acDataErrAdded
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim strVorname As String
Dim intGesamtLaenge As Integer
Dim intKommaPos As Integer
Dim intAnzahl As Integer
Dim strNachname As String
Dim strNameAutor As String

Set db = CurrentDb
Set rs = db.OpenRecordset("tblAutoren", dbOpenDynaset)

strNameAutor = DLookup("AUT_NameGesamt", "tblAutoren", AUT_PS = AUT_FS)
     
    intKommaPos = InStr(strNameAutor, ",")
    strNachname = Left(strNameAutor, intKommaPos)
    intGesamtLaenge = Len(strNameAutor)
    intAnzahl = intGesamtLaenge - intKommaPos
    strVorname = Right(strNameAutor, intAnzahl)

rs.AddNew
rs!AUT_Nachname = strNachname
rs!AUT_Vorname = strVorname
rs.Update

rs.Close: Set rs = Nothing
Set db = Nothing

End Sub


auf die Felder der tblAutor (AUT_PS; AUT_Vorname; AUT_Nachname; AUT_NameGesamt) zurück, um einen neuen Namen einzufügen.

Das funktioniert nicht, wohl weil in der Zeile mit der DLookup-Funktion kein Wert erkannt wird. Ich vermute, dass der Wert AUT_FS noch gar nicht existiert?! Ich brauche hier wohl eine andere Konstruktion.

Kann mir hier jemand helfen - ich komme einfach nicht weiter?

Vielen Dank vorab!

Viele Grüße
gromax


MaggieMay

Hallo,
ZitatDas funktioniert nicht, wohl weil in der Zeile mit der DLookup-Funktion kein Wert erkannt wird.
das funktioniert in erster Linie deshalb nicht, weil die Syntax des Kriteriums falsch ist.
Das sollte eher so aussehen:
"feldname=" & variablenname
wobei erstmal bekannt gegeben werden müsste, wie der Name des Datenfeldes lautet und mit welcher Variablen es verglichen werden soll.

Vielleicht löst du dich erstmal noch von der Umsetztung via VBA und beschreibst mit verständlichen Worten was genau in dem Ereignis passieren soll.

Freundliche Grüße
MaggieMay

gromax

Hallo MaggieMay,

sorry, das war natürlich in der Beschreibung sehr fragmentarisch.

Vorab:
Ich möchte eine DB entwerfen, bei der die Anwender einen Buchtitel (und weitere Angaben) eingeben und den passenden Autor dazu mittels eines Kombifeldes innerhalb eines Unterformulars auswählen.
Problem:
Was mache ich, wenn der Autor noch nicht hinterlegt ist ("kein Element der Liste"); so wollte ich den Weg über das Ereignis "Bei Nicht in der Liste" gehen - leider führte dieser in die Sachgasse!

Anbei habe ich die DB im bisherigen Entwurf angehängt.

Viele Grüße
gromax

MaggieMay

Hallo,

Zitatso wollte ich den Weg über das Ereignis "Bei Nicht in der Liste" gehen - leider führte dieser in die Sachgasse!

Wie hast du das denn versucht? Es ist kein diesbezüglicher Code in deiner DB zu finden.
Freundliche Grüße
MaggieMay

gromax

Hallo MaggieMay,

entsprechend Deinem Hinweis
ZitatVielleicht löst du dich erstmal noch von der Umsetztung via VBA und beschreibst mit verständlichen Worten was genau in dem Ereignis passieren soll.
hatte ich den VBA-Code (siehe meinen vorherigen Post) entfernt und - im Verbund mit dem obigen Text - die DB reduziert und versendet, um mein Vorhaben darzustellen.
Den VBA-Code hatte ich mit Verweis auf http://www.donkarl.com/?FAQ4.13 gebastelt - mehr oder weniger?!

Viele Grüße
gromax

MzKlMu

Hallo,
was soll es für einen Sinn machen, denn VBA Code zu entfernen, wenn Du wissen willst was Du falsch gemacht hast ?
Gruß Klaus

gromax

Hallo Klaus,

danke für die Rückmeldung; sorry - ich hatte den VBA-Code doch oben angeführt?!
Aber gerne hier nochmal:
Private Sub cmb_AUT_FS_NotInList(NewData As String, Response As Integer)
Response = acDataErrAdded
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim strVorname As String
Dim intGesamtLaenge As Integer
Dim intKommaPos As Integer
Dim intAnzahl As Integer
Dim strNachname As String
Dim strNameAutor As String

Set db = CurrentDb
Set rs = db.OpenRecordset("tblAutoren", dbOpenDynaset)

strNameAutor = DLookup("AUT_NameGesamt", "tblAutoren", AUT_PS = AUT_FS)
     
    intKommaPos = InStr(strNameAutor, ",")
    strNachname = Left(strNameAutor, intKommaPos)
    intGesamtLaenge = Len(strNameAutor)
    intAnzahl = intGesamtLaenge - intKommaPos
    strVorname = Right(strNameAutor, intAnzahl)

rs.AddNew
rs!AUT_Nachname = strNachname
rs!AUT_Vorname = strVorname
rs.Update

rs.Close: Set rs = Nothing
Set db = Nothing

End Sub


Ich sende auch die Bsp.-DB nochmals; jetzt gerne wieder mit diesem Code.

Viele Grüße
gromax

MzKlMu

Hallo,
kannst Du den Code mal erklären, was willst Du da mit DLookup und den Kommapositionen ?

Willst Du mehrere Autoren in ein Feld eintragen ?

Der Code sollte gem. den FAQ sonst nicht tun wie die Tabelle um den neuen Autor erweitern. Und das sind nur wenige Zeilen VBA. Ein Feld mit allen Autoren ist überflüssig. Das wird bei Bedarf über eine Abfrage erzeugt und ist so stets aktuell.

Die DB kann ich nicht ansehen, ich habe nur Access2003 (MDB).
Gruß Klaus

DF6GL

#8
Hallo,

wie schon 10 000 Mal empfohlen:   In JEDEM Modulkopf
Option Compare Database  'UND
Option Explicit

eintragen.

Danach Debuggen/Kompilieren und die Fehler springen einem ins Auge.


Was das Dlookup soll, erschließt sich mir nicht...

Die Eingabe erfordert zwingend die Trennung von Nachname zu Vorname mit den Zeichen Komma und Leerzeichen.


Option Compare Database
Option Explicit



Private Sub cmb_AUT_FS_NotInList(NewData As String, Response As Integer)

Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim strVorname As String
Dim intGesamtLaenge As Integer
Dim intKommaPos As Integer
Dim intAnzahl As Integer
Dim strNachname As String
Dim strNameAutor As String

Set db = CurrentDb
Set rs = db.OpenRecordset("tblAutoren", dbOpenDynaset)

strNameAutor = NewData   'Nz(DLookup("AUT_NameGesamt", "tblAutoren", "AUTBu_PS = AUT_FS"), "")
     
    intKommaPos = InStr(strNameAutor, ",")
    strNachname = Left(strNameAutor, intKommaPos - 1)
    intGesamtLaenge = Len(strNameAutor)
    intAnzahl = intGesamtLaenge - intKommaPos
    strVorname = Right(strNameAutor, intAnzahl - 1)

rs.AddNew
rs!AUT_Nachname = strNachname
rs!AUT_Vorname = strVorname
rs.Update
Response = acDataErrAdded

rs.Close: Set rs = Nothing
Set db = Nothing

End Sub



und das Ganze etwas reduzierter:

Option Compare Database
Option Explicit

Private Sub cmb_AUT_FS_NotInList(NewData As String, Response As Integer)

Dim db As DAO.Database
Dim strVorname As String
Dim strNachname As String

Set db = CurrentDb

strVorname = Split(NewData, ", ")(1)
strNachname = Split(NewData, ", ")(0)

db.Execute "Insert into tblAutoren (AUT_Vorname,AUT_Nachname) Values ('" & strVorname & "','" & strNachname & "')", dbFailOnError

Response = acDataErrAdded

Set db = Nothing
End Sub
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

gromax

Hallo Franz, hallo Klaus,

beschämt und geplättet ob der Kompetenz - aber sehr zufrieden!
Es funktioniert bestens!

Viele Grüße und vielewn Dank
gromax


DF6GL

Hallo,

beschämt brauchst Du nicht sein, geplättet wäre ok....     ;) :D ;D
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access