Access DB mit VB 6 bearbeiten

ariesdave

Mitglied
Hallo,

ich möchte mit einem kleinen Programm eine Access DB bearbeiten und habe zu Testzwecken mit dem Datenformular Assistent ein Formular kreiert, das auf eine Tabelle dieser Db zugreift.

Ich bekomme folgende Fehlermeldung, wenn ich das Projekt starte:

Fehler beim Kompilieren:
'Deklaration der Prozedur entspricht nicht der Beschreibung eines Ereignisses oder einer Prozedur mit demselben Namen.'


Der Debugger markiert folgende Zeile:

Private Sub datPrimaryRS_WillChangeRecord(ByVal adReason AsADODB.EventReasonEnum, ByVal cRecords As Long, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset


Kann mir da jemand weiter helfen?

Danke
-dave
 
Hallo ...
Dein VB-Programm soll eine Art Formular für eine User-Bearbeitung werden, ja?!
Wenn ich das so richtig verstanden habe, kann dud dich auch mit Access Formulare erstellen.

mfg Budda
 
Hallo Budda,

dass ich in Access auch Formulare erstellen kann, weiß ich :) es existieren auch schon Formulare für die Tabellen - meine Aufgabe ist es aber, eine flexible, einfache Anwendung zu entwickeln, mit der man Access Tabellen bearbeiten kann (Projektarbeit für eine Prüfung). Das ist hierbei die Prämisse..:)

Eigentlich sollte das in VB 6 mit den diversen Assistenten ja auch nicht schwer sein... wenn nur diese dusselige o.g. Fehlermeldung nicht wäre...;)

Wer kann mir da weiterhelfen?

Greetz
-dave:)
 
Hi Tom,

dankeschön für die Info - ich werde das gezeigte mal nachvollziehen. Dein Tipp hilft mir auf jeden Fall weiter.:)

Mit der o.g. Fehlermeldung selbst kannst du nix anfangen, oder?

greetz
-dave
 
@Tom

Ich habe jetzt das auf dem Video gezeigte nachvollzogen und folgendes Problem: das gezeigte Funktioniert mit kleineren Tabellen der Datenbank, auf die ich zugreifen möchte gut. Es gibt allerdings eine wichtige Tabelle in dieser DB, die sehr groß ist. Wenn ich auf diese zugreife, verlangsamt sich die Geschwindigkeit des Rechners dermaßen, dass vernünftiges arbeiten nicht möglich ist (10 Minuten Ladezeit beim Starten des Programms).

@All

Ich habe den Zugriff jetzt nochmal per Formular Assistent probiert und folgende Fehlermeldung beim Ausführen des Programms erhalten:

"Data Error Event Hit Error: Für mindestens einen erforderlichen Parameter wurde kein Wert eingegeben."

Der Quellcode sieht wie folgt aus:

Code:
Private Sub Form_Resize()
  On Error Resume Next
  'Hierdurch wird die Größe der Tabelle geändert, wenn die Größe des Formulars geändert wird
  grdDataGrid.Height = Me.ScaleHeight - datPrimaryRS.Height - 30 - picButtons.Height
End Sub

Private Sub Form_Unload(Cancel As Integer)
  Screen.MousePointer = vbDefault
End Sub

Private Sub datPrimaryRS_Error(ByVal ErrorNumber As Long, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, fCancelDisplay As Boolean)
  'Hier können Sie Ihre Fehlerbehandlungsroutine einfügen
  'Wenn Sie Fehler ignorieren möchten, kommentieren Sie die nächste Zeile aus
  'Wenn Sie die Fehler auffangen möchten, fügen Sie an dieser Stelle Code ein, um Fehler zu behandeln
  MsgBox "Data error event hit err:" & Description
End Sub

Private Sub datPrimaryRS_WillChangeRecord(ByVal adReason As ADODB.EventReasonEnum, ByVal cRecords As Long, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
  'Hier können Sie Code zur Überprüfung einfügen
  'Dieses Ereignis wird aufgerufen, wenn die folgenden Aktionen eintreten
  Dim bCancel As Boolean

  Select Case adReason
  Case adRsnAddNew
  Case adRsnClose
  Case adRsnDelete
  Case adRsnFirstChange
  Case adRsnMove
  Case adRsnRequery
  Case adRsnResynch
  Case adRsnUndoAddNew
  Case adRsnUndoDelete
  Case adRsnUndoUpdate
  Case adRsnUpdate
  End Select

  If bCancel Then adStatus = adStatusCancel
End Sub

Private Sub cmdAdd_Click()
  On Error GoTo AddErr
  datPrimaryRS.Recordset.MoveLast
  grdDataGrid.SetFocus
  SendKeys "{down}"

  Exit Sub
AddErr:
  MsgBox Err.Description
End Sub

Private Sub cmdDelete_Click()
  On Error GoTo DeleteErr
  With datPrimaryRS.Recordset
    .Delete
    .MoveNext
    If .EOF Then .MoveLast
  End With
  Exit Sub
DeleteErr:
  MsgBox Err.Description
End Sub

Private Sub cmdRefresh_Click()
  'Dies wird nur für Mehrbenutzeranwendungen benötigt
  On Error GoTo RefreshErr
  datPrimaryRS.Refresh
  Exit Sub
RefreshErr:
  MsgBox Err.Description
End Sub

Private Sub cmdUpdate_Click()
  On Error GoTo UpdateErr

  datPrimaryRS.Recordset.UpdateBatch adAffectAll
  Exit Sub
UpdateErr:
  MsgBox Err.Description
End Sub

Private Sub cmdClose_Click()
  Unload Me
End Sub

Wer kann mir sagen, wie ich hier weiterkomme...?
 
Hi,

hast Du den Code mal durch den Debugger laufen lassen, um rauszubekommen, in welcher Zeile der Fehler ausgelöst wird?

Die Fehlermeldung selbst hört sich aber danach an, als wäre in irgendeiner Abfrage ein Fehler.
 
Servus!

Code:
Private Sub datPrimaryRS_WillChangeRecord(ByVal adReason As ADODB.EventReasonEnum, ByVal cRecords As Long, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
  'Hier können Sie Code zur Überprüfung einfügen
  'Dieses Ereignis wird aufgerufen, wenn die folgenden Aktionen eintreten
  Dim bCancel As Boolean

... schau mal bitte nach, ob du wirklich jeden Parameter der Prozedur übergibst ... sieht ganz so aus als hättest du bei dem Aufruf von datPrimaryRS_WillChangeRecord(....) einen Parameter vergessen ...

"Data Error Event Hit Error: Für mindestens einen erforderlichen Parameter wurde kein Wert eingegeben."

Deutet im allgemeinen drauf hin, dass ein Parameter vergessen wurde ...

Zu dem Performanceproblem:

Kann es sein, dass die Datenbank, auf die du zugreifst auf dem Netzwerk liegt? Arbeiten mehrere Benutzer gleichzeitig mit der Datenbank? Wenn ja liegt die schlechte Performance am Datensatzsperrverhalten von Access selbst ... wenn jemand auf die Tabelle zugreift, die du in deinem Datagrind in VB6 anzeigst, muss Access / VB erst ermitteln, welche Datensätze (gefahrlos: ohne Inkonsistenzen zu erzeugen) geöffnet werden können, was ne weile dauert ...

Gruss Tom
 
Hallo,

die Datenbank liegt normalerweise auf einem Server, ich habe sie mir aber zu Übungszwecken auf ein lokales laufwerk kopiert. Wenn ich das Tutorial richtig verstanden habe, erzeugt die ADO Verbindung ein Recordset, dass im Arbeitsspeicher liegt und für die Dauer des Zugriffs (bis zum Refresh der DB) dort gespeichert bleibt. Kann es sein, dass die entsprechende Tabelle einfach zu groß ist (46 Felder, 3050 Datensätze) ?

Zu der o.g. Fehlermeldung und dem Quellcode:

Der Kompiler hält zwar an und gibt diese Fehlermeldung aus, aber wenn ich 'OK' klicke, startet das Programm (ohne in den Debug Modus zu wechseln), allerdings ohne Zugriff auf die Daten....
 
Zuletzt bearbeitet:
Servus!

Uff... kann schon sein, dass du bei so einer riesigen Tabelle Probleme bekommst ... ich arbeite mit Tabellen mit höchstens 1000 Sätzen ... damit hatte ich noch nie Probleme ...

Aber verschs mal manuell ...

einfach nen Button (rs_füllen) ...
platziere ein AdoDatagrid und ein AdoDC auf der Form ...


dann in der sub des Buttons ...
Code:
Dim rs as adodb.recordset 
set rs = new adodb.recordset

with rs
   .activeConnection = " .... " <- hier kopierst du den Connection String rein, den du normalerweise vom AdoDC-Steuerelement erhälst
 nachdem du die Datei ausgewählt hast ... schau danach einfach mal in die Eigenschaften des AdoDC ... danach entfernst du das AdoDC ... wie 
gesagt wir wollen ja nur den Connectionstring klauen 
   .locktype = adoptimistic
   .cursortype = adopendynamic
   .cursorlocation = adUseClient
   .open "Select * from tabelleXXX"
end with 

jetzt machst du mal 

set meinDataGrid.source = rs.source 

und schaust mal was passiert ...
(Will jetzt erst mal sehen, ob VB in der Lage ist dieses "große" RecrodSet zu laden ...)

deine Aktionen ....
....
....
....

dann rs.close (damit verschwindet auch der inhalt des Datagrids ...)

Gruss Tom
 

Neue Beiträge

Zurück