Datenbank anbindung über ADO +VB6

hallo leute,

wenn ich über ADO eine db-connection auf die datenbank erstelle
und dann ein abfrage mache… bekomme ich einen fehler

ich kann nur meine spalten-namen auslesen… die daten des rs bleiben mir verwährt.
aufgefallen ist mir, das mein RECORDSET.COUNT den wert -1 hat!!

wer kann mir den goldenen tipp dazu geben??
(über dao klappt alles bestens)

danke vielmals

grüße

rasta

Hallo,
ich hab mit ADO und C++ gearbeitet und das selbe Problem (stellenweise! oder besser ?) gehabt. Die Lösung:
eine Schleife über den Recordset

rst.movefirst
while(!rst.eof)
a++
rst.movenext

Und a liefert Anzahl Records. Soviel zum Count.
Wegen dem leseproblem: Wie öffnest Du den Recordset?

Klaus

Hallo!

RS.count liefert immer -1, wenn z.B. der Cursor-Typ readonly ist. Mit Keyset oder Static-Cursor wird die Property richtig belegt. Man beachte aber evtl. Performance-Einbußen.

Was für ein Fehler wird gemeldet ?

Gruß
Dieter

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Und a liefert Anzahl Records. Soviel zum Count.

AFAIK liefert count wenn du einmal alle Datensätze durch bist auch einen richtigen Wert, brauchst also gar nicht selber mitzählen.

Grüße, Robert

Hallo leute… erstmal danke für die bisherigen antworten… hat mich aber leider noch nicht richtig weitergebracht
hier ein ausschnitt des codes:

cn.Open „provider=msdaora;data source=XXX;user id=XXX;password=XXX“
rs.Open „select * from b31“, cn, adOpenDynamic, adLockPessimistic
xx = rs.RecordCount ’ recordcount zum test!! ist aber -1
For Each fld In rs.Fields
Cells(1, spalte).Value = fld.Name
Cells(1, spalte).Font.Bold = True
spalte = spalte + 1
Next fld
’ erster teile… auflösung der spaltennamen klappt!!!

Do While Not rs.EOF
spalte = 1
For Each fld In rs.Fields
Cells(zeile, spalte).Value = fld.Value ’

tja… ich hab den fehler n bisserl mehr aufgearbeitet…

Do While Not rs.EOF
spalte = 1
For Each fld In rs.Fields
Cells(zeile, spalte).Value = fld.Value ’

Hallo leute… erstmal danke für die bisherigen antworten…
hat mich aber leider noch nicht richtig weitergebracht
hier ein ausschnitt des codes:

cn.Open „provider=msdaora;data source=XXX;user
id=XXX;password=XXX“
rs.Open „select * from b31“, cn, adOpenDynamic,
adLockPessimistic

vor dem recordcout ein
rs.movelast
rs.movefirst
einfügen, damit das rs Objekt die Anzahl bestimmt

Gruß
Klaus

xx = rs.RecordCount ’ recordcount zum test!! ist aber -1
For Each fld In rs.Fields
Cells(1, spalte).Value = fld.Name
Cells(1, spalte).Font.Bold = True
spalte = spalte + 1
Next fld
’ erster teile… auflösung der spaltennamen klappt!!!

Do While Not rs.EOF
spalte = 1
For Each fld In rs.Fields
Cells(zeile, spalte).Value = fld.Value ’

Verträgt Dein Cells-Objekt zufällig nur Strings ?
wie wärs also mit Cells…Value=Cstr(fld.value) oder
Cells…Value=Format$(fld.value,"#.00") o.ä. ?
Grüsse

Verträgt Dein Cells-Objekt zufällig nur Strings ?
wie wärs also mit Cells…Value=Cstr(fld.value) oder
Cells…Value=Format$(fld.value,"#.00") o.ä. ?
Grüsse


hallo stephan,
DANKE DANKE DANKE!!!+50000 weitere danke!

aber warum klappt das ganze ohne cstr-umwandlung wenn ich zum beispiel ne access-datenbank abfrage?
vielleicht weist du das ja auch

viele grüße

rasta

Wie gesagt, ich weiss nicht wie Du’s mit Access gelöst hast und was Dein Cells Objekt ist. Vielleicht macht die Engine eine automatische Type-Conversion. Guter Programmierstil ist in jedem Falle gerade bei Datenbankgeschehen zuerstmal IsNull zu testen und dann explizit in das zu wandeln was Du willst. Siehe also die diversen Convert Befehle…
Grüsse