ADO,Recordset,ACCESS-Zugriff ich verstehs nicht?

Hallo
bin verzweifelt, ich versteh es nicht, wie man auf die Datenbank zugreifen kann. Überall ist das alles so kompliziert geschrieben,
daher einige Fragen dazu:

Ich habe ein ADO Steuerelement angelegt um Zugriff auf meine Datenbank zu haben. Die Verknüpfung geht aber nur für eine Tabelle, richtig?
Daher habe ich 3 Tabellen, folglich 3 Steuerelemente genommen, richtig?

Was ist denn jetzt eigentlich ein Recordset, definiert der ein Feld oder einen Datensatz??? Wenn ich 10 Spalten habe, kann ich dann auf alle Spalten zugreifen???

So Verbindung und Einstellung hat geklappt, jetzt habe ich 0 Datensätze in der Datenbank.

Jetzt bräuchte ich erstmal ein einfaches Beispiel, wie man einen Datensatz einliest in die Felder und wieder rausliest in Variablen.
Es sind ja noch keine Datensätze da, also muß ich den zunächst anlegen.

Damit ichs auch verstehe, konkreter, es gibt Spalte 1 =Name, Spalte 2 =Alter, so nun bitte 3 Datensätze eintragen aus den Variablen VarNameEin und VarAlterNein und diese wieder rausholen in die Variable VarName1-3 und VarAlter 1-3.

Ist es eigentlich besser, die Felder als Zahlen oder als Text zu deklarieren??? Einen Fehler, wenn statt Zahlen Buchstaben drinstehen möchte ich aber schon haben.

Bitte helft mir mit einfachen Beispielen und Erklärungen

Mfg Werner

Hallo Werner,

bin verzweifelt …

mal sehen, ob wir das ändern können. :wink:

Ich habe ein ADO Steuerelement angelegt um Zugriff auf meine
Datenbank zu haben. Die Verknüpfung geht aber nur für eine
Tabelle, richtig?

oder Abfrage. Richtig.

Daher habe ich 3 Tabellen, folglich 3 Steuerelemente genommen,
richtig?

Richtig.

Was ist denn jetzt eigentlich ein Recordset, definiert der ein
Feld oder einen Datensatz???

Die Tabelle oder Abfrage. :wink:

Wenn ich 10 Spalten habe, kann
ich dann auf alle Spalten zugreifen???

Wenn wir von Datenbanken reden, können wir uns dann darauf einigen, zu den ‚Zeilen‘ in der ‚Tabelle‘ Datensatz zu sagen und zu den ‚Spalten‘ Felder? Wenn Du immer mal wieder ‚Feld‘ oder ‚Spalte‘ schreibst, wird nicht deutlich, daß Dir klar ist, daß Du damit das Selbe meinst.

So Verbindung und Einstellung hat geklappt, jetzt habe ich 0
Datensätze in der Datenbank.

Jetzt bräuchte ich erstmal ein einfaches Beispiel, wie man
einen Datensatz einliest in die Felder

Beispiel:

Private Sub Command1\_Click()
 Adodc1.Recordset.AddNew
 Adodc1.Recordset(0) = "Test"
 Adodc1.Recordset.Update
End Sub

statt Adodc1.Recordset(0) = „Test“ kannst Du auch schreiben Adodc1.Recordset(„Name“) um mal Dein erstes Feld zu verwenden.

und wieder rausliest in Variablen.

Beispiel:

Dim Variable(100) As String

Private Sub Command2\_Click()
 Adodc1.Recordset.Movefirst
 i=0
 Do While Not EOF(1)
 Variable(i) = Adodc1.Recordset(0)
 i=i+1
 Adodc1.Recordset.Movenext
 Loop
End Sub

Es sind ja noch keine Datensätze da, also muß ich den zunächst
anlegen.

Ja, siehe oben.

Damit ichs auch verstehe, konkreter, es gibt Spalte 1 =Name,
Spalte 2 =Alter, so nun bitte 3 Datensätze eintragen aus den
Variablen VarNameEin und VarAlterEin und diese wieder
rausholen in die Variable VarName1-3 und VarAlter 1-3.

*g* na gut. Aber vorher schreibe ich deine Variablen noch richtig. :wink:
Es gibt Feld 0 = Name, Feld 1 = Alter.
Aus VarName1-3 mache ich VarName(0); VarName(1); VarName(2).

Private Sub Command1\_Click()
 VarNameEin = "Walter"
 VarAlterEin = 12
 Adodc1.Recordset.AddNew
 Adodc1.Recordset(0) = VarNameEin
 AdoDc1.Recordset(1) = VarAlterEin
 Adodc1.Recordset.Update
 VarNameEin = "Emil"
 VarAlterEin = 14
 Adodc1.Recordset.AddNew
 Adodc1.Recordset(0) = VarNameEin
 AdoDc1.Recordset(1) = VarAlterEin
 Adodc1.Recordset.Update
 VarNameEin = "Otto"
 VarAlterEin = 15
 Adodc1.Recordset.AddNew
 Adodc1.Recordset(0) = VarNameEin
 AdoDc1.Recordset(1) = VarAlterEin
 Adodc1.Recordset.Update
End Sub

und wieder lesen, aber jetzt indiziere ich mal etwas intelligenter. …

Private Sub Command2\_Click()
 Adodc1.Recordset.Movefirst
 Do While Not EOF(1)
 VarName(Adodc.Recordset.AbsolutePosition) = Adodc1.Recordset(0)
 VarAlter(Adodc.Recordset.AbsolutePosition) = Adodc1.Recordset(1)
 Adodc1.Recordset.Movenext
 Loop
End Sub

Ist es eigentlich besser, die Felder als Zahlen oder als Text
zu deklarieren???

Wenn nur Zahlen 'rein kommen, dann Zahlen.

Ich hoffe mal, ich habe wenig Tippfehler, ich habe das hier getippt und nicht aus VB kopiert. Eventuelle Tippfehler bitte selbst beseitigen. :wink:

Gruß, Rainer

Danke, werds mal testen
Danke erstmal,
ich brauch einfach mal ein paar Beispiele um mit den Befehlen jonglieren zu können. Das Update heisst jetzt wahrscheinlich speichern oder bestätigen der Werte, das wusste ich zB noch nicht, also kanns natürlich auch net klappen.

Ich melde mich dann nochmal, wenn ich mehr weiss.

Mfg Werner

Hallo,

http://www.activevb.de/tutorials/tut_adokurs/adokurs…

Damit ichs auch verstehe, konkreter, es gibt Spalte 1 =Name,
Spalte 2 =Alter, so nun bitte 3 Datensätze eintragen aus den
Variablen VarNameEin und VarAlterNein und diese wieder
rausholen in die Variable VarName1-3 und VarAlter 1-3.

Erstmal Verbindung aufbauen

dim DB as ADODB.Connection
dim rs as ADODB.Recordset
dim strSQL as String

DB.Open "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data " & \_
 "Source=" & App.Path & "\datenbank.mdb;" 'fuer Access 2000

Die Daten schreiben:

strSQL = "INSERT INTO Tabelle1 (Name, Alter) VALUES ('" & VarNameEin & "', '" & VarAlterEin & "')"

rs.Open strSQL, DB, adOpenStatic, adLockReadOnly

So, jetzt steht einmal der Inhalt der Variablen VarNameEin und VarAlterEin in deiner Tabelle. Wenn du drei Eintraege haben moechtest, musst du das ganze natuerlich dreimal machen.

Die Variable VarAlterEin habe ich jetzt als String gesehen. Wenn es eine Zahl ist (und das Feld in der Tabelle ebenfalls) dann musst du die „’“ weglassen!

Dann Daten holen:

strSQL = "SELECT \* FROM Tabelle1" 

rs.Open strSQL, DB, adOpenStatic, adLockReadOnly

Jetzt stehen deine Daten im Recordset

Auf die Daten kannst du jetzt mit einer Do While Schleife zugreifen und auf verschiedene Objekte verteilen. Da sich deine Variablennamen nicht hochzaehlen lassen, muss ich den Schritt jetzt dreimal machen.

rs.MoveFirst ' Zeiger auf den Anfang stellen
VarName1 = rs.Fields![Name]
VarAlter1 = rs.Fields![Alter]
rs.MoveNext
VarName2 = rs.Fields![Name]
VarAlter2 = rs.Fields![Alter]
rs.MoveNext
VarName3 = rs.Fields![Name]
VarAlter4 = rs.Fields![Alter]

Einfacher waers mit einem Array oder Steuerelementefeld

Verbindung wieder schliessen:

rs.Close

Fertig!

So mach ich das auf jeden Fall immer.

Die von meinem Vorredner aufgezeite Moeglichkeit kenn ich auch, aber da ich VB nie wirklich gelernt, sondern nur autodidaktisch abgeschrieben habe, kann ich nicht genau sagen, welches die sauberere oder bessere Variante ist. =:wink:

Ciao! Bjoern

Anm. d. Red: die oben genannten Codebeispiele sind gerade alle zusammengewurschtelt worden, ich uebernehme keine Garantie, dass nicht irgendwo ein Fehler drin ist! Ausserdem fehlen _saemtliche_ Sicherheitsabfragen!

  • ich merke gerade bei der Vorschau, dass das Layout nicht ganz so passt wie von mir gewuenscht. Trotz PRE-Tags. Ich hoffe, man kann es trotzdem lesen-

3 x ADO auf gleiche Datenbank aber nur 1x Zugriff
Hallo
mein Problem beschränkt sich eigentlich darauf, das ich 3 ADos habe, die alle auf die selbe Datenbank verweisen aber auf unterschiedliche Tabellen.
ADO sollten ja automatisch eine Verbindung herstellen, damit sollte die von dir beschriebene open und close-Methode eigentlich wegfallen
und die Befehle sollten sofort nutzbar werden.

Problem ist nun, das ich nur auf die erste Tabelle automatisch zugreifen kann und hier Daten einlesen kann.

Sobald ich auf die 2. oder 3. Tabelle zugreifen will, wird ein Fehler fehlendes Objekt oder With Block erzeugt.

Wo liegt das Problem???

Mfg Werner

Code könnte ich auch mal schicken, wenn du nicht weiter weisst.