Anzahl der Datensätze berechnen

Hallo,
ich versuche eine einfache Sache zu programmieren, bekomme aber eine Fehlermeldung. Es gibt ja verschieden Weg, um die Anzahl der Datensätze in einer Tabelle (Oracle) zu berechnen. Ich versuche durch den folgenden Weg, nachdem ich die Datenbank und die Tabelle geöffnet habe:


set cnn = New ADDOB.Connection

cnn.Execute „Select count(*) into ’ " & anz & " ’ from tb_countries“

Bekomme als Wert für anz immer -1. In der Tabelle gibt es aber 200 Datensätze.
Ich kann Update, Insert oder Select auf die Tabelle durchführen, aber kein Count-Befehl.

Kann Jemand mir helfen.

Gruß

Hallo,

Hi,

ich versuche eine einfache Sache zu programmieren, bekomme
aber eine Fehlermeldung. Es gibt ja verschieden Weg, um die
Anzahl der Datensätze in einer Tabelle (Oracle) zu berechnen.
Ich versuche durch den folgenden Weg, nachdem ich die
Datenbank und die Tabelle geöffnet habe:


set cnn = New ADDOB.Connection

cnn.Execute „Select count(*) into ’ " & anz & " ’ from
tb_countries“

cnn. Open"Select count(*) as anz from tb_countries", cna, adOpenDynamic, adLockPessimistic

Bekomme als Wert für anz immer -1. In der Tabelle gibt es aber
200 Datensätze.
Ich kann Update, Insert oder Select auf die Tabelle
durchführen, aber kein Count-Befehl.

Kann Jemand mir helfen.

Gruß.Timo

Gruß

Hi Timo,
danke für die schnalle Antwort, aber ich bekomme eine Fehlermedung, die besagt, daß die Tabelle schon einmal geöffnet wurde, weil ich erst die Tabelle sortiet öffnen muß und die Zeilen lesen muß.
cnn.Open „Select land_name from tb_countries order by land_name“, cna, adOpenDynamic, adLockPessimistic

und dann kommt Deine Zeil

cnn.Open „Select count(*) as anz from tb_countries“, cna, adOpenDynamic, adLockPessimistic

Abgesehen davon brauche ich die Variable anz für meine Schleife:
for i=1 to anz

So komme ich nicht auf den Wert in anz.

Gruß

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

Hi Timo,Hi,
danke für die schnalle Antwort, aber ich bekomme eine
Fehlermedung, die besagt, daß die Tabelle schon einmal
geöffnet wurde, weil ich erst die Tabelle sortiet öffnen muß
und die Zeilen lesen muß.
cnn.Open „Select land_name from tb_countries order by
land_name“, cna, adOpenDynamic, adLockPessimistic

und dann kommt Deine Zeil

Dann lass meine Zeile weg und mach’s statt dessen so:
dim anzahl as integer
deineZeile ( cnn.open „Select…“)
anzahl=cnn.recordcount

cnn.Open „Select count(*) as anz from tb_countries“, cna,
adOpenDynamic, adLockPessimistic

Abgesehen davon brauche ich die Variable anz für meine
Schleife:
for i=1 to anz

So komme ich nicht auf den Wert in anz.

Gruß

Gruß.Timo

Hallo,

Hi,

ich versuche eine einfache Sache zu programmieren, bekomme
aber eine Fehlermeldung. Es gibt ja verschieden Weg, um die
Anzahl der Datensätze in einer Tabelle (Oracle) zu berechnen.
Ich versuche durch den folgenden Weg, nachdem ich die
Datenbank und die Tabelle geöffnet habe:


set cnn = New ADDOB.Connection

cnn.Execute „Select count(*) into ’ " & anz & " ’ from
tb_countries“

cnn. Open"Select count(*) as anz from
tb_countries", cna, adOpenDynamic, adLockPessimistic

Bekomme als Wert für anz immer -1. In der Tabelle gibt es aber
200 Datensätze.
Ich kann Update, Insert oder Select auf die Tabelle
durchführen, aber kein Count-Befehl.

Kann Jemand mir helfen.

Gruß.Timo

Gruß

Hi,
das habe ich auch gemacht, liefert aber mit für anzahl = -1
In der Tabelle gibt es aber 200 Datensätze und ich sie sogar mir ohne Probleme anzeigen

Gruß

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

Hi,
füge mal folgende Zeile vor deinem cnn.open ein :
cnn.CursorLocation = adUseClient
Gruß.Timo

sorry, das geht nicht. bekomme ich dei Fehlermeldung:
Ein Objekt, das dem angeforderten Namen oder dem Ordinalverweis entspicht, kann nicht gefunden werden. Das Programm sieht wie folgt aus:
Anzahl zeigt aber jetzt nicht meht auf -1, sonder auf 1
**************
Private Sub UserForm_Initialize()
Dim cnn1 As ADODB.Connection
Dim rstcountry As ADODB.Recordset
Dim country(255)
Dim anz As Integer
Dim i As Integer
Dim objDatensatz As Datensatz
Set objDatensatz = New Datensatz

ComboBox1.SetFocus
Set cnn1 = New ADODB.Connection

With cnn1
.Provider = „MSDAORA.1“
.Open „Data Source=xxxx;User ID=ddd;password=ttt“
End With

Set rstcountry = New ADODB.Recordset
rstcountry.CursorType = adOpenKeyset
rstcountry.LockType = adLockPessimistic

rstcountry.CursorLocation = adUseClient
rstcountry.Open „select count(*) as anz from tb_countries“, cnn1, adOpenDynamic, adLockOptimistic

anz = rstcountry.RecordCount

For i = 1 To anz

country(i) = rstcountry!ctry_name_d
rstcountry.MoveNext

Next i

For i = 1 To anz
ComboBox1.AddItem country(i)
Next

rstcountry.Close
cnn1.Close

End Sub

****************

Hi,
füge mal folgende Zeile vor deinem cnn.open ein :
cnn.CursorLocation = adUseClient
Gruß.Timo

Hi nochmal,

sorry, das geht nicht. bekomme ich dei Fehlermeldung:
Ein Objekt, das dem angeforderten Namen oder dem
Ordinalverweis entspicht, kann nicht gefunden werden. Das
Programm sieht wie folgt aus:

OK, jetzt sehe ich mal das ganze Programm und mache dir einen Vorschlag zur effizienteren Programmierung:

Anzahl zeigt aber jetzt nicht meht auf -1, sonder auf 1
**************

Private Sub UserForm_Initialize()
Dim cnn1 As ADODB.Connection
Dim rstcountry As ADODB.Recordset

ComboBox1.SetFocus
Set cnn1 = New ADODB.Connection

With cnn1
.Provider = „MSDAORA.1“
.Open „Data Source=xxxx;User ID=ddd;password=ttt“
End With

Set rstcountry = New ADODB.Recordset
rstcountry.CursorType = adOpenKeyset
rstcountry.LockType = adLockPessimistic

rstcountry.CursorLocation = adUseClient
rstcountry.Open „select * FROM tb_countries“,
cnn1, adOpenDynamic, adLockOptimistic

While not rstcountry.EOF
ComboBox1.AddItem rstcountry!ctry_name_d
rstcountry.MoveNext
Wend
rstcountry.Close
cnn1.Close
End Sub

Gruß.Timo

Ich danke Dir. Es hat geklappt. Eigentlich sollte ich selbst auf While-Schleife kommen, aber ich wolte es irgendwie mit Count lösen. Bin immer noch in OOP ein Anfänger. Komme aus der Datenbankwelt (PL-SQL)
Was macht eigentlich diese Zeile:
rstcountry.CursorLocation = adUseClient

Ein schönes WE

Gruß

Rezaei

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

Hi,

Ich danke Dir. Es hat geklappt. Eigentlich sollte ich selbst
auf While-Schleife kommen, aber ich wolte es irgendwie mit
Count lösen. Bin immer noch in OOP ein Anfänger. Komme aus der
Datenbankwelt (PL-SQL)
Was macht eigentlich diese Zeile:
rstcountry.CursorLocation = adUseClient

Setzt den Cursor auf das Recordset clientseitig.
http://support.microsoft.com/kb/q194973/

Ein schönes WE

dito

Gruß.Timo

Gruß

Rezaei

Hi nochmal,

sorry, das geht nicht. bekomme ich dei Fehlermeldung:
Ein Objekt, das dem angeforderten Namen oder dem
Ordinalverweis entspicht, kann nicht gefunden werden. Das
Programm sieht wie folgt aus:

OK, jetzt sehe ich mal das ganze Programm und mache dir einen
Vorschlag zur effizienteren Programmierung:

Anzahl zeigt aber jetzt nicht meht auf -1, sonder auf 1
**************

Private Sub UserForm_Initialize()
Dim cnn1 As ADODB.Connection
Dim rstcountry As ADODB.Recordset

ComboBox1.SetFocus
Set cnn1 = New ADODB.Connection

With cnn1
.Provider = „MSDAORA.1“
.Open „Data Source=xxxx;User ID=ddd;password=ttt“
End With

Set rstcountry = New ADODB.Recordset
rstcountry.CursorType = adOpenKeyset
rstcountry.LockType = adLockPessimistic

rstcountry.CursorLocation = adUseClient
rstcountry.Open „select * FROM tb_countries“,
cnn1, adOpenDynamic, adLockOptimistic

While not rstcountry.EOF
ComboBox1.AddItem rstcountry!ctry_name_d
rstcountry.MoveNext
Wend
rstcountry.Close
cnn1.Close
End Sub

Gruß.Timo

Hi,
von der Zählschleife bist Du ja schon weg, aber wenn Du trotzdem mal die Anzahl wissen willst, erst ein .MoveLast und es geht. :wink:

rstcoutry.Movelast
anz = rstcountry.RecordCount

Liefert Dir in anz dann doch die Anzahl.

Gruß, Rainer