# Wie funktioniert eine Datenbankanbindung mit VB6?



## Heineken_VB_oho (15. März 2005)

Hallo!

Ich bin ein ziemlicher Anfänger in Sachen VB und vor allem in Sachen Datenbankanbindung.
Nunja, ich muss jetzt aber eine Datenbankanbindung zusammen bekommen - und zwar soll ich ein "Eingangsbuch" erstellen (also ich fülle im VB die benötigten Felder [zb: Autor, Betreff,...] aus und das ganze soll dann in die Datenbank übertragen werden)
Im Access habe ich mir bereits eine Datenbank erstellt. Diese besteht aus einer Tabelle:

tbl_eingangsbuch: mit den Feldern: eingangnsnr (autowert); autor; betreff

Also wie gesagt... die Aufgabenstellung ist ja eigentlich nicht schwer - nur ich bekomms einfach nicht hin und das obwohl ich mich jetzt schon ewig durch Tutorials wühle - ich finde nur nicht das richtige.

Zusammengefasst: mit welchen Codezeilen öffne ich die Datenbank in VB erfolgreich? und mit welchen Befehlen kann ich dann die eingegebenen Daten von VB aus in die Access-Datenbank speichern?

Es wäre sehr nett, wenn mir jemand helfen könnte!


----------



## Alex F. (15. März 2005)

Fang erstmal so an :

Zieh dir ein adodc oder ein dao.dataset  auf deine Form die entsprechenden Komponenten solltest du vorher eingebunden haben. Dann kannst du über die Eigenschaften der dinge die Verbindung zur DB herstellen alles weitere ergibt sich dann schau auch mal auf http://www.activevb.de nach da sind glaube ich ein paar tutorials zu dem Thema 

Gruß bb


----------



## Julian Maicher (15. März 2005)

Alsoooo, erstmal einen Verweis auf Microsoft ActiveX Data Objects 2.x setzen.
Dann kannst du wie folgt eine Verbindung zu einer Access Datenbank aufbauen:

```
Dim cn As New ADODB.Connection
Dim conStr As String

conStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\access.mdb"
'oder Data Source=" & App.Path & "\access.mdb" wenn sie immer im selben Verzeichnis wie die Applikation liegt.

cn.Open conStr
```
Ein INSERT Statement kannst du jetzt wie folgt schicken:

```
Dim cmd As New ADODB.Command
cmd.ActiveConnection = cn
cmd.CommandText = "INSERT INTO tabelle('Feld1', 'Feld2') VALUES('Value1', 'Value2')"
cmd.Execute
```


----------



## Heineken_VB_oho (16. März 2005)

Hallo!

Mittlerweile habe ich einige Fortschritte erzielt - die Datenbankanbindung klappt zumindest schon.
Ich habe mein Programm so aufgebaut: gestartet wird es über Login-Formular (über eine Combo-Box kann man die jeweiligen Benutzer auswählen, die ich zuvor in die Datenbank eingetragen habe). Hat man den Benutzer ausgewählt, fährt man mit einem Klick auf den Button "anmelden" fort. Jetzt öffnet sich das "Posteingangsbuch" Fenster.
Im Label-Feld neben "Ihr Benutzername:" soll nun der Mitarbeiter autmatisch eingetragen werden, mit dem man sich zuvor angemeldet hat (siehe Login-Formular).
In die Textfelder "Absender"; "Betreff" und "Datum" soll man etwas eingeben können, das dann in die Datenbank eingetragen wird. Ab hier funktioniert das Ganze dann leider nicht mehr... 

Ich habe noch die Codes kopiert (hier der vom Login: )

```
Option Explicit
'Konstantendeklaration
Const DB_PFAD = "D:\"
Const DB_Name = "postbuch.mdb"

'Variablendeklaration
Dim DB_Posteingangsbuch As Database
Dim RS_Posteingangsbuch As Recordset
Dim RS_Mitarbeiter As Recordset

Private Sub cmd_login_Click()
Dim Namen As String
'Die Namen der Mitarbeiter werden im Combo-Feld ausgeben
Namen = cbo_mitarbeiter.Text
'Bei Klick auf Login soll das Anmeldeformular geschlossen
frm_login.Hide
'und das Posteingangsbuchformular geladen werden
frm_posteingangsbuch.Show
End Sub
Private Sub cmd_ende_Click()
'Programm beenden
End
End Sub
Private Sub Form_Load()
'Datenbank öffnen
    Set DB_Posteingangsbuch = OpenDatabase(DB_PFAD & DB_Name)
'Recordset öffnen
    Set RS_Posteingangsbuch = DB_Posteingangsbuch.OpenRecordset("Select * FROM tbl_Posteingangsbuch;")
    Set RS_Mitarbeiter = DB_Posteingangsbuch.OpenRecordset("Select * FROM tbl_Mitarbeiter;")
'Mitarbeiter in das Combo Feld laden
    RS_Mitarbeiter.MoveFirst
    Do While Not RS_Mitarbeiter.EOF
    frm_login.cbo_mitarbeiter.AddItem RS_Mitarbeiter("m_nachname")
    RS_Mitarbeiter.MoveNext
Loop
End Sub
```

und hier der vom zweiten Fenster; dort wo ich die Daten eingeben soll:


```
Option Explicit
'Konstantendeklaration
Const DB_PFAD = "D:\"
Const DB_Name = "postbuch.mdb"
'Variablendeklaration
Dim DB_Posteingangsbuch As Database
Dim RS_Posteingangsbuch As Recordset
Dim RS_Mitarbeiter As Recordset

Dim Absender As String
Dim Betreff As String
Dim Datum As Date

Private Sub cmd_eintragen_Click()
Absender = txt_absender.Item
Betreff = txt_betreff.Item
Datum = Format("Now")

RS_Posteingangsbuch.AddNew
    RS_Posteingangsbuch("p_absender").Value = Absender
    RS_Posteingangsbuch("p_betreff").Value = Betreff
    RS_Posteingangsbuch("p_eingangsdatum").Value = Datum

RS_Posteingangsbuch.Update
MsgBox ("Die Daten wurden erfolgreich in die Datenbank eingetragen!")

txt_absender.Item = " "
txt_betreff.Item = " "
txt_datum.Item = " "
End Sub
Private Sub cmd_ende_Click()
End
End Sub
Private Sub Command2_Click()
frm_login.Show
End Sub
Private Sub Form_Load()

'Datenbank öffnen
    Set DB_Posteingangsbuch = OpenDatabase(DB_PFAD & DB_Name)

'Recordset öffnen
    Set RS_Posteingangsbuch = DB_Posteingangsbuch.OpenRecordset("Select * FROM tbl_Posteingangsbuch;")
    Set RS_Mitarbeiter = DB_Posteingangsbuch.OpenRecordset("Select * FROM tbl_Mitarbeiter;")
End Sub
```

also wenn mir jemand sagen könnte, wo es hapert bzw. wärs noch besser, wenn derjenige den Fehler gleich ausbessern könnte, dann wäre mir sehr geholfen !

PS: ich habe auch gleich noch das Programm als Zip angehängt, falls sie jemand herunterladen will (bitte beachten, dass die Datenbank unter D: gespeichert werden muss)


----------



## Alex F. (16. März 2005)

1. du hättest das modul auch mit in den ordner speichern sollen oder es aus dem Projekt entfernen

2. deine Textboxen haben alle einen Index -> also musst  du die dinger über .Item(1).text ansprechen das ist nicht nötig

3. es ist besser die Datenbank an einem relativen Ort abzulegen also zum beispiel : App.Path & "\Datenbank\" & dbname , dann bist du unabhängig davon wo die exe liegt den die db muss ja auch dort liegen 



sonst ist das für den anfang nicht schlecht also viel spass weiter noch 

Gruss bb


----------

