Access DB mit VB 6 bearbeiten

@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...:)
 
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
 
Hmmm... wenn ich eines der beiden Textfelder was hinein schreibe kommt die Fehlermeldung: 'Methode oder Mitgliedsdaten nicht gefunden'.

Der Debugger markiert folgende Zeile:

Code:
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
 
Sorry, das ist mir hier beim Posten zusammengerutscht. im Code ist das getrennt...:)

... aber die Fehlermeldung bleibt...:(
 
Zuletzt bearbeitet:
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
 
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:

Code:
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:
Code:
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
 
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 ^^
 
Zurück