Textfeld automatisch füllen

silkeR

Mitglied
Hallo, habe folgendes Problem:

ich möchte mit einer VB-Oberfläche Datensätze (Adressen mit Name und so) aus einer Access-DB abfragen, Datensätze hinzufügen und löschen. In der DB habe ich ein Feld AdressID mit dem Datentyp Zahl. Nun soll das Feld AdressID aber beim Hinzufügen von DS über VB (mit Textfeld) automatisch vergeben werden. Ich behalte ja nicht den Überblick (insbesondere wenn ich DS dazwischen mal lösche), welche Zahlen alle schon vergeben sind. Will das Feld AdressID also nicht per Hand eingeben. Wenn ich für das Feld AdressID im Access den Datentyp Autowert nehme, kann das Feld nicht aktualisiert werden (DS kann also nicht hinzugefügt werden).
Hat jemand eine gute Idee, wie ich das lösen kann.

Ist mein Problemfall zu verstehen? Ist für VB-Kenner bestimmt gar kein Problem, aber für Anfänger wie mich :-)

Besten Dank!
Silke
 
Hi,

wenn Du die Änderungen (INSERT, UPDATE) per SQL machst, kann auch der Autowert verändert werden.

Aber das ist nicht die Lösung des Problems.

Lass das Feld bei der Aktualisierung doch einfach weg, oder verstehe ich da was falsch?

Zeig mal den Code fürs Aktualisieren.
 
Hallo,

hatte ich auch schon so gedacht, diese ID einfach wegzulassen und schon probiert. Aber dann funktioniert gar nichts mehr. Es wird aus mir noch unerklärlichen Gründen der DS der schon drin steht überschrieben und der DS den ich anhängen will, trotzdem noch mal angefügt. Steht dann also zweimal drin und der vorhergehende gar nicht mehr. ?

Wenn ich dann noch einen DS anfügen will kommt folgende Fehlermeldung: „Die Schlüsselspalteninformationen sind ungenügend oder inkorrekt. Es sind zu viele Zeilen von der Aktualisierung betroffen.“ à Deshalb habe ich wahrscheinlich diese ID als Primärschlüssel in Access eingefügt. Finde aber auch, dass die überflüssig ist. Mein Fehler liegt also bestimmt woanders – keine Ahnung.

Danke für die Hilfe.

Gruß, Silke

___________

So hatte ich das gedacht. Erst Daten in die Textfelder schreiben, dann auf Button hinzufügen klicken und DS ist in DB. Und hatte gehofft, dass geht mit dem Programmcode hier:

Private Sub cmd_add_Click()

Dim Vorname As String
Dim Nachname As String
Dim Ort As String

'Adodc1.BOFAction ?
Adodc1.Recordset.MoveLast

Vorname = txt_vorname.Text
Nachname = txt_nachname.Text
Ort = txt_ort.Text


Adodc1.Recordset.AddNew
Adodc1.Recordset!Vorname = Vorname
Adodc1.Recordset!Nachname = Nachname
Adodc1.Recordset!Ort = Ort

Adodc1.Recordset.Update

txt_vorname.Text = ""
txt_nachname.Text = ""
txt_ort.Text = ""

MsgBox "Der Name wurde hinzugefügt"
End Sub
 
Hi,

Dein Fehler liegt in der Benutzung des ADODC - Steuerelemtes.
Das Ding ist buggy bis zum geht nicht mehr und führt zu unerklärlichen Verhalten.
Mach die Connection und die Recordsets per Code, dann hast Du mehr Kontrolle im
Verhalten und weißt, was passiert.

Siehe hier, ein gutes Tutorial:
Der große ADO-Kurs

Danach schau Dir dieses Beispiel an, dass ist auch sehr gut:
SQL-Adress
ein Demo für eine Adressverwaltung in einer Access. Insert, Update und Delete erfolgt ausschliesslich über SQL Anweisungen, unterstützt wird das alles von einer speziellen Klasse.
 
Hi,

Connection und Recordset per Code - (ich dachte, das ist schon ein Programmcode). - Nun gut, egal.

Besten Dank für die Hilfe und die Links. Werde mich mal einlesen in diese Thematik.

Gruß, Silke
 
Hi,

sicher ist das Programmcode, jedoch lässt Du die Verbindung und deren Handling vom ADODC - Steuerlement machen und das ist nicht gut.
Mach Änderungen in der DB möglichst nur mit SQL und über die "Connection.Execute" - Methode, dann hast Du wesentlich weniger Probleme und die Daten landen schneller in der DB als mit dem Recordset.
Zudem hast Du beim refreshen von Listen o.ä. weniger Probleme, weil die Daten halt schon in der DB drin sind (durch Connection.Execute(SQLStatement).
 
Hallo,

wenn ich dich richtig verstehe, rätst du mir eher das mit SQL zu machen. Dazu hab ich aber mal noch 'ne Frage. Wollte eigentlich, wenn ich nach einem DS suche, z.B. nur Vor- u./o. Nachname in ein Textfeld eingeben. Geht das auch mit SQL Bisher dachte ich, mit SQL müsste ich immer eine komplette Abfrage eintippen, also Select * from ... where ... Und das will ich nicht. Will ja bei der Suche nach DS nicht auch noch über den richtigen SQL-Text nachdenken müssen :-) Hast du noch einen guten Tipp, wo ich SQL in Verbindung mit VB (so im allg. und Grundlagen) gut nachlesen kann (Buch oder online).

Danke und Gruß,
Silke
 
Hi,

Das mit der Eingabe des Vor / Nachnamens in der Textbox bleibt auch so, jedoch baust Du dir dann mit der Eingabe des Textfeldes die SQL - Anweisung zusammen, z.B. so:
Code:
Private Sub txtSuche_LostFocus()
    Dim sSQL As String
    Dim Rs     As ADODB.Recordset

    sSQL = "SELECT * FROM DeineTabelle " & _
                "WHERE Vorname = '" & txtSuche.Text & "'"
    
    Set Rs = New ADODB.RecordSet
    With Rs
       ' einstellungen 
       Call .Open (sSQL, AktiveConnectionZurDB)
    End With     
    ' daten aus Recordset darstellen
End Sub
Der Code soll nur verdeutlichen, wie es ungefähr funktioniert!

Schau Dir am Besten mal die SQL-Adress-Demo an, dort wird das gut erläutert.
 
Zurück