MS-Office-Forum

Zurück   MS-Office-Forum > Microsoft Access & Datenbanken > Microsoft Access
Registrieren Forum Hilfe Alle Foren als gelesen markieren

Banner und Co.

Antworten
Ads
Themen-Optionen Ansicht
Alt 23.01.2008, 22:54   #1
KarMulholand
MOF User
MOF User
Standard Acc2003 - lfz 3704 Ado Recordset kann nicht geschlossen werden

Ich möcht Recodsets künftig per Klasse füllen.
Gefüllt wird es auch, aber rs.close macht diesen Lfz.
Wieso? Das Öffen in der Klasse geht sauber durch, dann soll er mich doch schliessen lassen ?



Code:

Sub OLEDB_Trusted()

Dim Cnn As Object
Dim rs As Object
Dim myClass As New ClsRecord

Set Cnn = CreateObject("ADODB.Connection")

Cnn.ConnectionString = ""
Cnn.Open

strSQL = "SELECT * FROM tbl_test"

Set rs = myClass.MyRsKeyset(strSQL, Cnn)
rs.Close

End Sub

'Beginn Klasse-----------------------------------------------------------------------------------------------------
Option Compare Database
Option Explicit

Private myRs As New ADODB.Recordset
'--------------------------------------------------------------------------------------------------------------
Public Function MyRsKeyset(ByRef strSQL As String, _
                              ByRef cn As ADODB.Connection) As ADODB.Recordset


With myRs
    .CursorType = adOpenKeyset
    .LockType = adLockOptimistic
    .Open strSQL, cn
End With

Set MyRsKeyset = myRs

End Function
KarMulholand ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 23.01.2008, 23:41   #2
Josef P.
MOF Guru
MOF Guru
Standard

Komisch, ich hätte erwartet, dass bereits bei cnn.open ein Fehler auftritt, da kein Connectionstring übergeben wurde.
Mit rs.State kannst du prüfen, ob das Recordset noch offen ist, falls dein Original-Code anders aussieht und ein RS geöffnet werden konnte.

Geändert von Josef P. (23.01.2008 um 23:50 Uhr).
Josef P. ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 24.01.2008, 15:37   #3
KarMulholand
Threadstarter Threadstarter
MOF User
MOF User
Standard

Tja, der String hat sich irgendwi verflüchtigt, nachträglich biete ich diesen an.

Cnn.ConnectionString = "Password=Karl;" & _
"Persist Security Info=True;" & _
"User ID=Kurt;" & _
"Initial Catalog=KarlsDB;" & _
"Data Source=Karl"

Ich hab das noch weiter abgeklopft und dieser Fehler tritt nur auf wenn ich einen 'Update' String übergebe, nehm ich einen 'Select' gehts
KarMulholand ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 24.01.2008, 16:27   #4
KarMulholand
Threadstarter Threadstarter
MOF User
MOF User
Standard

wenn ich mir den myRs.State nach dem withblock anzeigen lasse, kommt '0'
Da heisst ja wohl es wurde gar nicht geöffnet.
Aber wenn Open nicht geht, warum kommt keine Error Message ?

With myRs
.CursorType = adOpenKeyset
.LockType = adLockOptimistic
.Open strSQL, cn
End With

Msgbox "" & myRs.State
KarMulholand ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 24.01.2008, 19:24   #5
Josef P.
MOF Guru
MOF Guru
Standard

Zitat:

Ich hab das noch weiter abgeklopft und dieser Fehler tritt nur auf wenn ich einen 'Update' String übergebe, nehm ich einen 'Select' gehts

Und was für einen Recordset-Inhalt hättest du nach Update erwartet?

Zitat:

Aber wenn Open nicht geht, warum kommt keine Error Message ?

Die Fehlermeldungen werden aber nicht unterdrückt? (On Error resume next o.ä.)
Josef P. ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 24.01.2008, 19:46   #6
KarMulholand
Threadstarter Threadstarter
MOF User
MOF User
Standard

mhh, Ok, Inhalt bei einem Update-String kommt nicht gut.

Ich hab das ganze Prozedere mal als little DB eingehängt.
Die Irrsinnigkeiten nehmen keine Ende.
Denn es wird sogar upgedatet, ganz ohne Cnn.Execute und ohne öffnen des Recordset

Einhängen geht leider nicht, bin hier im Kaffe, und kann nicht zippen

Code:

Option Compare Database
Option Explicit

Private strSQL As String

Sub test()

Dim Cnn As Object
Dim rs As Object
Dim myClass As New ClsRec


Set Cnn = CreateObject("ADODB.Connection")

Cnn.Provider = "SQLOLEDB.1"
    Cnn.ConnectionString = "Password=Karl1;" & _
    "Persist Security Info=True;" & _
    "User ID=Karl;" & _
    "Initial Catalog=KarlDB;" & _
    "Data Source=KarlsServer"
    
Cnn.Open

strSQL = "UPDATE tbl_test " & _
         " SET AnzArt = 3"
                   
Set rs = myClass.GetMyRsKeyset(strSQL, Cnn)
MsgBox "GetMyRsKeyset" & "  " & Cnn.State & "  " & rs.State
rs.Close

If Cnn.State = 1 Then
            Cnn.Close
End If

End Sub


------------------------------------------------------
'Beginn Klasse
Option Compare Database
Option Explicit

Private myRs As New ADODB.Recordset
'---------------------------------------

Public Function MyRsKeyset(ByRef strSQL As String, _
                           ByRef cn As ADODB.Connection) As ADODB.Recordset

On Error GoTo CatchError

With myRs
    .CursorType = adOpenKeyset
    .LockType = adLockOptimistic
    .Open strSQL, cn
End With


Set MyRsKeyset = myRs

ExitFunc:
    Exit Function
    
CatchError:
            MsgBox "MyRsKeyset   " & Error & "  " & Err.Description
    Resume ExitFunc

End Function


Private Sub Class_Terminate()
    If Not myRs Is Nothing Then Set myRs = Nothing
End Sub

Geändert von KarMulholand (24.01.2008 um 19:51 Uhr). Grund: Anhang
KarMulholand ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 25.01.2008, 16:02   #7
KarMulholand
Threadstarter Threadstarter
MOF User
MOF User
Standard

hier das Problem als MiniDB,

Wegen einem Updatestring macht sich das Recordset wohl keine Mühe, sich zu öffnen, gut .

Aber wieso wird das Update ausgeführt, wenn nicht mal
ein Execute irgendwo steht.
Angehängte Dateien
Dateityp: zip DBConnServer.zip (14,4 KB, 7x aufgerufen)

Geändert von KarMulholand (25.01.2008 um 16:04 Uhr). Grund: Upload
KarMulholand ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 25.01.2008, 16:59   #8
Josef P.
MOF Guru
MOF Guru
Standard

Ich stelle auch mal eine Frage:
Warum erwartest du ein gefülltest Recordset, wenn du eine Update-Anweisung ausführst?

Code:

Aber wieso wird das Update ausgeführt, wenn nicht mal
ein Execute irgendwo steht.
Warum nicht? Per Open wird die SQL-Anweisung an den Server weitergegeben. Was ist so schlimm daran?
Du bekommst übrigens beim ADODBConnection.Execute auch ein Recordset zurück.
Josef P. ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 26.01.2008, 13:02   #9
KarMulholand
Threadstarter Threadstarter
MOF User
MOF User
Standard

Hi Joseph,

das mit dem Update und dem Record, dass da nichts rauskommen kann, ist schon OK so.

Und dass, das Update trotzdem stattfindet, ist natürlich nicht schlimm.

Es war eben Zufall, bisher ist mir das nie untergekommen.
Ich hab immer gerne Gewissheit, ich möchte nicht annehmen dass...

Also , ich dank dir.
KarMulholand ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Ads
Antworten


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Besucher: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge anzufügen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist An.
Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:26 Uhr.



Powered by: vBulletin Version 3.6.2 (Deutsch)
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.

Copyright ©2000-2018 MS-Office-Forum. Alle Rechte vorbehalten.
Copyright ©Design: Manuela Kulpa ©Rechte: Günter Kramer
Eine Verwendung der Inhalte in anderen Publikationen, auch auszugsweise,
ist ohne ausdrückliche Zustimmung der Autoren nicht gestattet.