# Access DB mit VB 6 bearbeiten



## ariesdave (18. Juni 2003)

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


----------



## Budda (18. Juni 2003)

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


----------



## ariesdave (18. Juni 2003)

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


----------



## Thomas Darimont (18. Juni 2003)

Servus!

Schau dir doch mal das hier an ...:

http://www.tutorials.de/tutorials93488.html

Gruss Tom


----------



## ariesdave (18. Juni 2003)

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


----------



## ariesdave (23. Juni 2003)

@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:


```
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...?


----------



## Dario Linsky (23. Juni 2003)

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.


----------



## Thomas Darimont (23. Juni 2003)

Servus!


```
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


----------



## ariesdave (23. Juni 2003)

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....


----------



## Thomas Darimont (24. Juni 2003)

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 ...

```
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


----------



## ariesdave (24. Juni 2003)

Hallo Tom,

Danke für den Tipp - ich werde es ausprobieren und dann berichten 

Gruß
-Dave


----------



## ariesdave (24. Juni 2003)

Hi Tom,

habe das o.g. ausprobiert und folgende Probleme:

- ich kann die source Eigenschaft des Datagrid nicht benutzen (VB erkennt sie nicht - 'Methode oder Mitgliedsdaten nicht gefunden' fehlermeldung)

- die Verbindung zur Datenbank kommt nicht zustande (Laufzeitfehler'-2147467259(80004005)[Microsoft odbc][Driver Manager]der Datenquellenname wurde nicht gefunden - es wurde kein Standardtreiber angegeben)

Hier der Code, den ich bis jetzt übernommen habe:


```
Private Sub cmd1_Click()
Dim rs As adodb.Recordset
Set rs = New adodb.Recordset

With rs
    
    .ActiveConnection = "D:\Datenbank\Autovision.mdb"
    .LockType = adoptimistic
    .CursorType = adOpenDynamic
    .CursorLocation = adUseClient
    .Open "Select * from tab_name"
    
End With

'Set DataGrid1.Source = rs.Source

End Sub
```


----------



## Thomas Darimont (24. Juni 2003)

Servus!

Meinte eigentlich einen ConnectionString der Form:


```
strCon = "Provider=Microsoft.Jet.OLEDB.4.0;User ID=Administrator;Data Source=D:\Datenbank\Autovision.mdb;Persist Security Info=False"

...activeConnection = strCon ...

versuchs mal mit:

set DataGrid1.RecordSet = rs
```
Gruss Tom


----------



## ariesdave (24. Juni 2003)

So,

das habe ich jetzt getan. Folgender Code:


```
Private Sub cmd1_Click()
Dim rs As adodb.Recordset
Set rs = New adodb.Recordset
strCon = "Provider=Microsoft.Jet.OLEDB.4.0;User ID=Administrator;Data Source=D:\Datenbank\Autovision.mdb;Persist Security Info=False"

With rs
    
    .ActiveConnection = strCon
    .LockType = adoptimistic
    .CursorType = adOpenDynamic
    .CursorLocation = adUseClient
    .Open "Select * from tab_name"
    
End With

Set DataGrid1.Recordset = rs

End Sub
```

- Die recordset Eigenschaft von DataGrid1 wird nicht zur Auswahl gestellt

- Wenn das Programm gestartet wird, erscheint folgende Fehlermeldung:
"Laufzeitfehler'-2147217843(80040e4d)': Die Anwendung kann nicht gestartet werden. Die Informationsdatei für die Arbeitsgruppe fehlt, oder ist exclusiv von einem anderen Benutzer geöffnet."

Der Debugger verweist auf diese Zeile des Codes:

```
.ActiveConnection = strCon
```
(Sorry, wenn ich mich ein wenig ungeschickt anstelle - ich mache das noch nicht lange und das ganze ist noch recht kompliziert für mich
 )

Danke im voraus...


----------



## Thomas Darimont (24. Juni 2003)

Servus!

Zum Connection String:

Leg auf deiner Form wie im Video gezeigt ein AdoDC ab ...
-geh in die eigenschaften (mit Rechter Maustatste -> Eigenschaften im Context Menu
-Verbindungszeichenfolge erstellen ...
-> OLE DB 4.0 JET blablabla ...
-> Datei auswählen 
-> Benutzernamen gegebenenfalls ändern und Verbindung testen 
-> jetzt müsse eigentlich bei Verbindungszeichenfolge ein etwas längerer Text stehen ... das ist dein ConnectionString ...

versuchs mal ...

zum zweiten problem kann ich dir jetzt nicht viel sagen, da ich hier in der Firma nur Access /VBA zu Verfügung  habe und "mein" DataGrid1 als OLE Objekt eingebunden ist und somit nicht die erforderlichen Schnittstellen aufweist ... ich schau aber nachher mal zuhause ...
Experimientier einfach mal ein wenig damit rum ...#

oder mal statt 

set DataGrid1 ....

einfach nur mal 

msgbox "" & rs.getString ...

Dann bekommst du eine STring Repräsentation deines RecordSets an der du schon erkennen kannst ob's funzt oder nicht ...

Gruss Tom


----------



## ariesdave (24. Juni 2003)

Hi Tom  

jetzt tut sich endlich was... 

Also ich habe jetzt ein bisschen rumprobiert und folgendes festgestellt:

- mit einer kleineren Tabelle funktioniert die Datenausgabe sowohl im DataGrid als auch in der MsgBox

- bei Zugriff auf die große Tabelle startet das Programm und nach ca. 10 Minuten erscheinen dann auch die Daten im DataGrid..

Folgender Code:


```
Private Sub cmd1_Click()
Dim rs As adodb.Recordset
Set rs = New adodb.Recordset
strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Datenbank\Autovision.mdb;Mode=ReadWrite;Persist Security Info=False"

With rs
    
    .ActiveConnection = strCon
    .LockType = adLockOptimistic
    .CursorType = adOpenDynamic
    .CursorLocation = adUseClient
    .Open "Select * from tab_coachingabende"
    
End With
'MsgBox ("" & rs.GetString)
Set DataGrid1.DataSource = rs

End Sub
```

Wie bekomme ich denn die große Tabelle userfreundlich bearbeitet?


----------



## Thomas Darimont (24. Juni 2003)

Servus!

Etwas kompliziert aber machbar ....

benutze das Flexgrid Steuerelement und zeige immer nur einen "Teil" der Daten an...

an die einzelnen Felder des RecordSets kommst du mit 

```
Dim fld as Field

rs.movefirst 

while not rs.eof

for each fld in rs.fields
   msgbox fld.name & ": " & fld.value 
next fld

rs.movenext 
wend
```
-----------------------

Flexgrid: In den Eigenschaften des Flexgrids kannst du angeben wieviele Spalten und Zeilen du darstellen willst ... Spalten(Columns) müssen mit der Anzahl der DB Spalten des RecordSets zusammenpassen die Zeilen stellst du ein ... je nachdem welche du anzeigen willst ...

Text kannst du ins Flexgrid bringen mit :

```
Flexgrid1.TextMatrix(Zeile,Spalte) = Wert

Bsp.:

Zeile 4, Spalte 7 ---> "hallo"
Flexgrid1.TextMatrix(4,7) = "Hallo"
```
...wird aber sehr mühsam ... 

Gruss Tom


----------



## ariesdave (24. Juni 2003)

Hmmm...

Ich versuche es mal. Werde Dir dann berichten. Danke erstmal für deine Hilfe 

Gruß
-dave


----------



## ariesdave (25. Juni 2003)

Hallo,

also das mit dem FlexGrid brauchte ich nicht zu machen, weil ich ja im Prinzip nur einzelne Felder aus der großen Tabelle anzeigen lassen will und nie den gesamten Inhalt. Dann stimmt das auch mit der Performance... Is mir natürlich erst jetzt eingefallen..:-( 

Jetzt habe ich also die Daten in einem DataGrid drin; wie kann ich den Inhalt einer markierten Zeile im DataGrid in einem neuen Formular in ein Labelfeld oder ein anderes DataGrid schreiben?

Mein Code bis jetzt:


```
Private Sub cmd1_Click()
Dim rs As adodb.Recordset
Set rs = New adodb.Recordset
strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\Datenbank\Autovision.mdb;Mode=ReadWrite;Persist Security Info=False"

With rs
    
    .ActiveConnection = strCon
    .LockType = adLockOptimistic
    .CursorType = adOpenDynamic
    .CursorLocation = adUseClient
    .Open "SELECT tab_Name.[Namen-Nr], tab_Name.Name, tab_Name.Vorname, tab_Gründer.[geplante Idee] FROM tab_Gründer INNER JOIN tab_Name ON tab_Gründer.[Gründer-Nr] = tab_Name.[Gründer-Nr]WHERE (((tab_Gründer.[geplante Idee]) Is Not Null));"

End With
Set DataGrid1.DataSource = rs
End Sub

Private Sub Command1_Click()
End
End Sub

Private Sub DataGrid1_DblClick()
x = DataGrid1....???
frmMain.Hide
frmName.Show
End Sub
```

x habe ich als globale Variable in einem Modul deklariert.

Wer kann mir nen Tipp geben, wie ich weiterkomme..?

Danke
-dave


----------



## Thomas Darimont (25. Juni 2003)

Servus!

Hier hast du's:


Gruss Tom


----------



## ariesdave (26. Juni 2003)

@Tom
;-) Ja Super - Danke für Deine Mühe. Jetzt bin ich schonmal einen Schritt weiter.

@All
Gibts denn eine Möglichkeit, dass ich auch die Daten eines bestimmten Feldes aus einer ganzen Zeile des DataGrid, die ich markiert habe in eine Variable schreiben kann?

In meinem Fall will ich die Namensliste im DataGrid anzeigen lassen und dann, wenn ich eine bestimmte Zeile markiert habe, anhand der Namen Nummer, die Primärschlüssel in der Tabelle 'Namen' in der DB ist, die anderen dazugehörigen Daten in einem neuen Formular in Textfeldern... 

Dazu brauche ich den Zugriff auf eines der Felder einer kompletten markierten Zeile...  Ich habe in der MSDN nix gefunden, oder ich bin blind...


----------



## Thomas Darimont (26. Juni 2003)

Servus!

Das hab ich doch in meinem Beispiel drinnen ....

Selektiere eine Zeile ...

dann gib bei "Spalten" einen Wert ein und klicke auf "Wert ...."

...fertig!

Gruss Tom


----------



## ariesdave (26. Juni 2003)

Ups... dann habe ich das nicht richtig verstanden.. 

Werde es gleich mal nachvollziehen - Danke, Tom


----------



## ariesdave (26. Juni 2003)

Hmmm... wenn ich eines der beiden Textfelder was hinein schreibe kommt die Fehlermeldung: 'Methode oder Mitgliedsdaten nicht gefunden'.

Der Debugger markiert folgende Zeile:


```
Private Sub txtZeile_Change()
-->IfCInt(Me.txtZeile) < Me.Adodc1.Recordset.RecordCount And CInt(Me.txtZeile) >= 0 Then
    Me.DataGrid2.Row = CInt(Me.txtZeile)
    Else
    MsgBox "Zeilenindex überschreitet Anzahl der Zeilen!", vbCritical
    End If
End Sub
```


----------



## Thomas Darimont (26. Juni 2003)

...
If CInt(Me.txtZeile)
...


----------



## ariesdave (26. Juni 2003)

Sorry, das ist mir hier beim Posten zusammengerutscht. im Code ist das getrennt...

... aber die Fehlermeldung bleibt...


----------



## Thomas Darimont (27. Juni 2003)

Servus!

Frage: Hast du mal nachgesehen, ob du die Northwind.mdb in dem Pfad der im Adodc (EIgenschaften) eingetragen ist hast ???

Erscheinen bei dir im Datagrid überhaupt Daten ?

Bei mir funzt das ganze einwandfrei ...

Gruss Tom


----------



## ariesdave (27. Juni 2003)

Hmmm.. erst erschienen keine Daten. ich habe dann Dein DataGrid gelöscht und ein neues DataGrid genommen. Dann habe ich zum füllen des DataGrid folgenden Code hinterlegt:


```
Private Sub Command2_Click()
Dim rs As adodb.Recordset
Set rs = New adodb.Recordset
strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\Datenbank\Autovision.mdb;Mode=ReadWrite;Persist Security Info=False"

With rs
    
    .ActiveConnection = strCon
    .LockType = adLockOptimistic
    .CursorType = adOpenDynamic
    .CursorLocation = adUseClient
    .Open "SELECT tab_Name.[Namen-Nr], tab_Name.Name, tab_Name.Vorname, tab_Gründer.[geplante Idee] FROM tab_Gründer INNER JOIN tab_Name ON tab_Gründer.[Gründer-Nr] = tab_Name.[Gründer-Nr]WHERE (((tab_Gründer.[geplante Idee]) Is Not Null));"

End With
Set DataGrid2.DataSource = rs
End Sub
```

Es erscheinen die gewünschten Daten im DataGrid. Wenn ich einzelne Felder im DataGrid anklicke, und auf den Button 'Wert ermitteln' drücke, zeigt mir das Programm den gewünschten Wert an. Wenn ich allerdings eine komplette Zeile markiere und dann im Textfeld für Zeile oder Spalte einen Wert eingebe, gibts ne Fehlermeldung.

Eigentlich brauche ich eine Funktion, mit der ich den Wert der ersten Spalte einer beliebigen Zeile in eine Variable schreiben kann, wenn ich die entsprechende Zeile komplett markiert habe.

Hier nochmal der komplette Code des Formulars:

```
Private Sub Command1_Click()
    Me.txtWert = ""
    Me.txtWert = Me.DataGrid2.Columns(Me.DataGrid2.Col).Value
End Sub

Private Sub DataGrid2_RowColChange(LastRow As Variant, ByVal LastCol As Integer)
    Me.lblZeile = "Zeile: " & Me.DataGrid2.Row
    Me.lblSpalte = "Spalte: " & Me.DataGrid2.Col
End Sub

Private Sub Command2_Click()
Dim rs As adodb.Recordset
Set rs = New adodb.Recordset
strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\Datenbank\Autovision.mdb;Mode=ReadWrite;Persist Security Info=False"

With rs
    
    .ActiveConnection = strCon
    .LockType = adLockOptimistic
    .CursorType = adOpenDynamic
    .CursorLocation = adUseClient
    .Open "SELECT tab_Name.[Namen-Nr], tab_Name.Name, tab_Name.Vorname, tab_Gründer.[geplante Idee] FROM tab_Gründer INNER JOIN tab_Name ON tab_Gründer.[Gründer-Nr] = tab_Name.[Gründer-Nr]WHERE (((tab_Gründer.[geplante Idee]) Is Not Null));"

End With
Set DataGrid2.DataSource = rs
End Sub

Private Sub Command3_Click()
End
End Sub

Private Sub txtSpalte_Change()
    If CInt(Me.txtSpalte) < Me.Adodc1.Recordset.Fields.Count And CInt(Me.txtSpalte) >= 0 Then
    Me.DataGrid2.Col = CInt(Me.txtSpalte)
    Else
    MsgBox "Spaltenindex überschreitet Anzahl der Spalten!", vbCritical
    End If
End Sub

Private Sub txtZeile_Change()
    If CInt(Me.txtZeile) < Me.Adodc1.Recordset.RecordCount And CInt(Me.txtZeile) >= 0 Then
    Me.DataGrid2.Row = CInt(Me.txtZeile)
    Else
    MsgBox "Zeilenindex überschreitet Anzahl der Zeilen!", vbCritical
    End If
End Sub
```

Dankeschön.
-dave


----------



## Thomas Darimont (27. Juni 2003)

Servus!

Versuch einer Problemanalyse:



> tab_Name.[Namen-Nr], tab_Name.Name, tab_Name.Vorname, tab_Gründer.[geplante Idee] FROM tab_Gründer INNER JOIN tab_Name ON tab_Gründer.[Gründer-Nr] = tab_Name.[Gründer-Nr]WHERE (((tab_Gründer.[geplante Idee]) Is Not Null));"



... schlechte Wahl der Spaltennamen!

"-" in den Spaltennamen interpretiert Access als arithmetische Operation 

" " - Leerzeichen in den Spaltennamen werden auch nicht immer zuverlässig erkannt...

...

Welche ADO Version? Extras->Verweise ...

Markiere die Zeilen mal mit dem "Datensatzmarkierer!"

">" 

Mehr fällt mir jetzt nicht ein ... wie gesagt, bei mir funzt das einwand frei ...

Gruss Tom, der jetzt aber auch mal was arbeiten muss ^^


----------

