Verzweifel – Verbindung zu einer DB

silkeR

Mitglied
Hallo,

folgendes Problem, an dem ich bald verzweifle:

Verbindung zur DB ist hergestellt. DS wird auch in Textboxen oder DataGrid angezeigt. Über einen Button soll nun eine neue Form aufgehen, wo ich einen DS in die DB (zu der die Verbindung ja besteht, dachte ich zumind.) hinzufügen möchte. Dann aber kommt die Fehlermeldung, dass die Verbindung nicht verwendet werden kann, weil sie ev. geschlossen ist. Ich habe sie doch aber hergestellt und in meiner Ausgangsform wird ja auch der DS angezeigt. Wer schließt meine Verbindung?

Beim Debuggen markiert er mir jedes Mal entweder open oder rs.addNew (je nach dem was ich habe, geht sowieso beides nicht)

Wo liegt mein Fehler

Besten Dank für Tipps.
 
Hallo, wie und wo ist denn der RecordSet (rs) deklariert?
Um von mehreren Formen darauf zugreifen zu können, musst Du den RecordSet in einem Modul deklarieren.

Beispiel:
Code:
Public rs As RecordSet
 
Immer noch Verzweifel – Verbindung zu einer DB

Hallo!
Himmel hilf! Ich probier hier schon den ganzen Tag und es geht immer noch ni. Habe jetzt Recordset-Deklaration in einem Modul. Verbindung ist aber immer noch geschlossen. Springt immer noch beim Debuggen ‚open’ oder ‚AddNew’ an. Wieso? Der einfachheithalber hänge ich mal den Quellcode mit an. Vielleicht kann mir damit eine geübter VB-Programmierer sagen, wo mein Fehler liegt. Habe zig Bücher zu Hause und schreibe genau das hin wie’s dort drin steht. Und es geht nicht. Habe alles probiert. Sollte mal nicht die Fehlermeldung wegen der geschlossenen Verbindung kommen, kommen andere Fehlermeldungen – meist Objektvariable nicht festgelegt.

Vielen Dank für Hilfe.


Code:
--> modul:
Option Explicit
Public rs As New Recordset
Public con As New Connection


Public Sub RecordsetDeklarieren()
'Modul in dem Recordset deklariert werden soll

Set rs = New Recordset


With rs
    .CursorType = adOpenKeyset
    .LockType = adLockOptimistic
    .Open "namen", con          'hier kommt die Fehlermeldung,
                                'dass die Verbindung möglicherweise geschlossen ist
                                'oder ungültig
End With

End Sub



--> Startform:

Option Explicit
Public con As New Connection
Public rs As New Recordset

Public Sub verbinden()

'allg. Prozedur die unter Form_load mit aufgerufen wird

Set con = New Connection

con.CursorLocation = adUseClient
con.Provider = "Microsoft.Jet.OLEDB.4.0"
con.Open App.Path & "\adressen.mdb"
                                            

End Sub

Private Sub cmd_add_Click()
frm_add.Show
End Sub

Private Sub cmd_close_Click()
Unload Me
End Sub


Private Sub Form_Load()

verbinden

With rs
    .CursorType = adOpenDynamic
    .LockType = adLockOptimistic
    .Open "namen", con
End With


Set DataGrid1.DataSource = rs
txt_vorname.Text = rs!Vorname
txt_nachname.Text = rs!Nachname
txt_ort.Text = rs!Ort

End Sub

Private Sub Form_Unload(cancel As Integer)
con.Close
End Sub



-->Form, wo DS hinzufügen (wo das Problem liegt):

Option Explicit

Private Sub cmd_add_ok_Click()

RecordsetDeklarieren          'Aufruf der Prozedur aus dem Modul

rs.AddNew

rs!Vorname = txt_vorname_add.Text
rs!Nachname = txt_nachname_add.Text
rs!Ort = txt_ort_add.Text
Set DataGrid1.DataSource = rs

rs.Update

End Sub
 
Hallo, hier ein Beispiel:

In Modul:
Code:
' Verweis auf Microsoft ActiveX Data Objects 2.x Library nicht vergessen !

Public con As New ADODB.Connection
Public rs As New ADODB.Recordset

In StartForm:
Code:
Private Sub cmd_add_Click()
  frm_add.Show
End Sub

Private Sub Form_Load()

Set con = New ADODB.Connection

con.CursorLocation = adUseClient
con.Provider = "Microsoft.Jet.OLEDB.4.0"
con.Open App.Path & "\adressen.mdb"

Set rs = New Recordset

rs.Open "SELECT * FROM namen", con, adOpenDynamic, adLockOptimistic

Set DataGrid1.DataSource = rs

End Sub

Private Sub Form_Unload(Cancel As Integer)
  Set rs = Nothing
  rs.Close
  Set con = Nothing
  con.Close
End Sub
In frm_add:
Code:
Private Sub cmd_add_ok_Click()
  rs.AddNew
  rs!Vorname = txt_vorname_add.Text
  rs!Nachname = txt_nachname_add.Text
  rs!Ort = txt_ort_add.Text
  rs.Update
  rs.Requery
End Sub
 
Juchhu, es geht. Vielen Dank für die Hilfe. Ich glaube, ich verstehe sogar was ich falsch gemacht habe. Ich hoffe es geht auch morgen noch.
 
Zurück