bumbum
Goto Top

VBA zugreifen auf eine Tabelle, den höchsten Wert aus einer Spalte vergleichen mit einem Textfeld im Formular

Hallo Leute,

Ich habe in Access eine Datenbank erstellt, in der Neukunden erfasst werden sollen.
Wie vergleiche ich ein Textfeld (Text1) aus einem Formular mit einer Spalte (KdNr) aus der Tabelle (tbl_Kunden)?
Wie kann ich die letzte Kundennummer die in der Tabelle vergeben wurde anwählen und + 1 rechen lassen?


Hier der momentane Code:
Private Sub Befehl24_Click()
DoCmd.SetWarnings False
If Text1.Value = **SPALTE AUS TABELLE** Then
    Frage = MsgBox("Die Kundennummer " & Text1.Value & " ist schon vergeben, bitte verwenden sie die Kundennummer " & **LETZTE KUNDENNUMMER + 1** , vbOKOnly, "Fehler")  
Else
    DoCmd.RunSQL ("insert into tbl_Kunden (KdNr, Anrede, Name, Vorname, Straße, PLZ, Ort, Telefon, Fax, Handy, EMail) values (Text1.value, Text2.value, Text3.value, Text4.value, Text5.value, Text6.value, Text7.value, Text8.value, Text9.value, Text10.value, Text11.value)")  
End If
End Sub

LG BumBum


[Edit Biber] Code-Tags nachgetragen. [/Edit]

Content-Key: 123576

Url: https://administrator.de/contentid/123576

Printed on: April 26, 2024 at 06:04 o'clock

Member: AndreasHoster
AndreasHoster Aug 27, 2009 at 09:03:37 (UTC)
Goto Top
Indem man eine SQL Abfrage macht?
Dim rs As Recordset
Dim i As Integer

Set rs = Application.CurrentDb.OpenRecordset("Select max(KdNr) as Max from tbl_kunden")  
rs.MoveFirst
i = rs!Max + 1

BTW:
Warnings auschalten, dann ein Insert machen ohne zu Prüfen ob der geklappt hat, ist kein guter Programmierstil.
Member: bumbum
bumbum Aug 27, 2009 at 09:50:06 (UTC)
Goto Top
Hallo Andreas,
wenn du mir jetzt noch sagen könntest wie ich das in meinen Code einbauen kann, wäre ich dir sehr dankbar.
der "insert" hat funktioniert, das habe ich schon getestet, außer dem habe ich mir das bloß abgeschaut bei na anderen Datenbank.

LG bumbum
Member: AndreasHoster
AndreasHoster Aug 27, 2009 at 10:17:49 (UTC)
Goto Top
Die 6 Zeilen sollten sich doch auch so noch in den Code integrieren lassen.
Aber ich bin heute guter Laune:
Private Sub Befehl24_Click()
Dim rs As Recordset
Dim i As Integer
DoCmd.SetWarnings False
Set rs = Application.CurrentDb.OpenRecordset("Select max(KdNr) as Max from tbl_kunden")  
rs.MoveFirst
i = rs!Max
rs.close
If Text1.Value = i Then
    Frage = MsgBox("Die Kundennummer " & Text1.Value & " ist schon vergeben, bitte verwenden sie die Kundennummer " & cstr(i) , vbOKOnly, "Fehler")  
Else
    DoCmd.RunSQL ("insert into tbl_Kunden (KdNr, Anrede, Name, Vorname, Straße, PLZ, Ort, Telefon, Fax, Handy, EMail) values (Text1.value, Text2.value, Text3.value, Text4.value, Text5.value, Text6.value, Text7.value, Text8.value, Text9.value, Text10.value, Text11.value)")  
End If
End Sub
Member: bumbum
bumbum Aug 27, 2009 at 10:53:59 (UTC)
Goto Top
Vielen dank, aber in der MsgBox ist immer noch ein Fehler.
Wo du jetzt "cstr(i)" eingesetzt hast soll die nächst höhere freie KdNr ausgegeben werde, das ist hier nicht der fall.
Member: AndreasHoster
AndreasHoster Aug 27, 2009 at 13:35:33 (UTC)
Goto Top
Ist richtig, das + 1 beim i ist rausgefallen.
In Theorie programmieren ist halt fehleranfällig.
Member: bumbum
bumbum Sep 08, 2009 at 10:30:05 (UTC)
Goto Top
Danke, aber es ist immer noch ein Fehler da!

Bsp.: die KdNr´s 1-10 sind vergeben, wenn ich nun die KdNr 5 rein schreibe, erhalte ich keine Meldung von der MsgBox, nur wenn ich die 10 rein schreibe kommt eine Meldung in der dann gesagt wird, das die KdNr 10 schon vergeben ist und ich die 11 nehmen soll.
Weiß jemand was der Fehler ist?
LG Bumbum
Member: AndreasHoster
AndreasHoster Sep 08, 2009 at 11:53:57 (UTC)
Goto Top
Natürlich prüft
If Text1.Value = i Then 
nur auf Gleichheit, nicht ob die Zahl eventuell kleiner ist. Was in der Beschreibung auch nicht zu entnehmen war, daß auch das passieren soll.
In dem Fall auf kleiner gleich prüfen. Oder sich die Frage stellen, warum man nicht automatisch eine 1 höhere Kundennummer nimmt, was wiederum auf den Begriff Autowert führt, den man in der Access Hilfe mal nachschlagen könnte.
Member: bumbum
bumbum Sep 08, 2009 at 12:15:59 (UTC)
Goto Top
Das man das mit einem Autowert machen kann ist mir klar, doch ich weiß auch nicht wie man dem Text1 sag, das es automatisch eine 1 höhere Kundennummer nehmen soll.
sorry wegen der fragen aber als Anfänger weiß man es nicht besser und Probiert es sich aus bis man warnsinnig wir und jemanden fragt. face-smile

LG bumbum