Avatar billede dimle Nybegynder
25. januar 2002 - 12:26 Der er 41 kommentarer og
2 løsninger

Ubound på ADODB.Recorset's

Er der en tilsvarende metode som Ubound på et array, til et ADODB.Recordset?? - dvs. en metode til at finde antal elementer i et recordset!
Avatar billede terry Ekspert
25. januar 2002 - 12:27 #1
what do you mean by elements? Records or columns?
Avatar billede proaccess Nybegynder
25. januar 2002 - 12:30 #2
Jeg mener man kan bruge:

  rst.MoveLast
  msgbox rst.RecordCount

Det bedste vil dog være at lave et ekstra kald: SELECT COUNT(*) FROM ... WHERE ...
Avatar billede dimle Nybegynder
25. januar 2002 - 12:31 #3
Jeg mener hvor mange records der er! Forstår du?
Avatar billede dimle Nybegynder
25. januar 2002 - 12:33 #4
Ja, men det var ikke lige det der var meningen! ...og rs.MoveLast kan man ikke bruge!! Ellers tak!
Avatar billede terry Ekspert
25. januar 2002 - 12:34 #5
.recordcount
Avatar billede terry Ekspert
25. januar 2002 - 12:36 #6
Use the MoveLast method to move the current record position to the last record in the Recordset. The Recordset object must support bookmarks or backward cursor movement; otherwise, the method call will generate an error.

A call to either MoveFirst or MoveLast when the Recordset is empty (both BOF and EOF are True) generates an error.

RecordCount Property
Indicates the number of records in a Recordset object.

Return Value
Returns a Long value that indicates the number of records in the Recordset.

Remarks
Use the RecordCount property to find out how many records are in a Recordset object. The property returns -1 when ADO cannot determine the number of records or if the provider or cursor type does not support RecordCount. Reading the RecordCount property on a closed Recordset causes an error.
Avatar billede dimle Nybegynder
25. januar 2002 - 12:36 #7
Ja, men den viser altid -1
Avatar billede proaccess Nybegynder
25. januar 2002 - 12:38 #8
Så kig på mit andet forslag...

SELECT COUNT(*) FROM ... WHERE ...

Hvor FROM og WHERE er de samme, som i dit oprindelige kald...
Avatar billede terry Ekspert
25. januar 2002 - 12:38 #9
dimle> What shows -1?
Are you sure that you actualy have any errors?

IF YourRs.EOF and YourRs.BOF then YOU HAVE NO RECORDS
Avatar billede terry Ekspert
25. januar 2002 - 12:39 #10
You should REJECT answers without making sure that your problem isnt at your end!
Avatar billede terry Ekspert
25. januar 2002 - 12:40 #11
You should REJECT = You should NOT REJECT
Avatar billede dimle Nybegynder
25. januar 2002 - 12:41 #12
Ja det ved jeg godt man kan men jeg vil ha VB til det!!!
Avatar billede dimle Nybegynder
25. januar 2002 - 12:43 #13
Terry - det ved jeg! Det er rs.recordcount der altid er -1, fordi det ikke understøttes af provideren!
Avatar billede terry Ekspert
25. januar 2002 - 12:43 #14
dimle> put this in your code and replace YorRs with the correct name of the recordset

IF YourRs.EOF and YourRs.BOF then MSGBOx "I have an error!"
Avatar billede dimle Nybegynder
25. januar 2002 - 12:44 #15
Jeg er ikke nybegynder så jeg ved at mange af foreslagene ikke virker!
Avatar billede proaccess Nybegynder
25. januar 2002 - 12:45 #16
Så må du:

  DIM tæller AS Long
  WHILE NOT rst.EOF
    tæller=tæller+1
    rst.MoveNext
  WEND
  MsgBox tæller
Avatar billede terry Ekspert
25. januar 2002 - 12:46 #17
and .movelast doesnt either?

So you will have to make a recordset containing a select as proaccess shows.
Avatar billede dimle Nybegynder
25. januar 2002 - 12:53 #18
Ja det er en fin sikker metode, men tidslompleksiten for den er O(antal records) så den er langsom!!
Avatar billede dimle Nybegynder
25. januar 2002 - 12:56 #19
Ja det er en fin sikker metode, men tidslompleksiten for den er O(antal records) så den er for langsom!!
Avatar billede terry Ekspert
25. januar 2002 - 12:59 #20
dimle
Make a recordset just like when you make one for your table.

SELECT COUNT(*) As RECORDNUMBER FROM ... WHERE ...

Then
rs!RECORDNUMBER will give you the count
Avatar billede terry Ekspert
25. januar 2002 - 13:01 #21
WHAT IS WRONG WITH SELECT COUNT(*) ?
Avatar billede terry Ekspert
25. januar 2002 - 13:04 #22
dimle>what is your provider?
Avatar billede dimle Nybegynder
25. januar 2002 - 13:10 #23
Det er en simpel 4.0 Microsoft.Jet provider!
Avatar billede terry Ekspert
25. januar 2002 - 13:44 #24
Access? Sounds VERY strange that you cant use use .recordcount and .Movelast !

Do you have a primary key on the table? If not then I would suggest that you have one
Avatar billede terry Ekspert
25. januar 2002 - 13:45 #25
again, why cant you use SELECT count(*)
Avatar billede dimle Nybegynder
25. januar 2002 - 14:11 #26
Når jeg bruger rs.MoveLast kommer den med fejlen: The rowset does not support fetching backwards!
Avatar billede terry Ekspert
25. januar 2002 - 14:12 #27
dimle>You arent helping very much! If you answer the comments then we have some idea as to where to look instead of just rejecting!

why cant you use SELECT count(*)
Avatar billede terry Ekspert
25. januar 2002 - 14:15 #28
dimle>read my comment 12:36! It states that you will get -1 if ADO cannot determine the number of records or if the provider or cursor type does not support RecordCount!
WHY DOES an Access dB NOT support this?
WHY CAN YOU NOT USE SELECT COUNT (*)
DO YOU HAVE A PRIMARY KEY

CAN YOU ANSWER THESE QUESTIONS OR CLOSE IT?
Avatar billede dimle Nybegynder
25. januar 2002 - 14:17 #29
Det har jeg allerede besvaret - fordi jeg ville have VB til det!
...men... Jeg er ikke ret god til SQL Kan man ikke lave et kald hvor man får alle felter i en tabel sammen med den du foreslog: COUNT(*) As RECORDNUMBER sådan her, eller hvordan gør man??

SQL = "SELECT *, COUNT(*) As RECORDNUMBER FROM Bandene"
Avatar billede terry Ekspert
25. januar 2002 - 14:25 #30
dimle>If we can find out WHY .recordcount is not supported then you may not need to do it any other way!

WHY DOES an Access dB NOT support this? (.movelast .recordcount) is it becuase ther is no primary key, or maybe your code is selecting the wrong way?
Avatar billede dimle Nybegynder
25. januar 2002 - 14:35 #31
Den har primary-key og den udvælgen virker fint! Jeg ved ikke hvorfor Access ikke understøtter (.movelast .recordcount)!

Hvis du kan svare på spørgsmålet fra kl.: 14:17:23 med:
SQL = "SELECT *, COUNT(*) As RECORDNUMBER FROM Bandene"
...så får du pointerne for dette spørgsmål!!!
Avatar billede proaccess Nybegynder
25. januar 2002 - 14:39 #32
SELECT *, DCount("*", "Bandene") AS Antal FROM Bandene"
Avatar billede proaccess Nybegynder
25. januar 2002 - 14:40 #33
Giver dårlig performance, da der tælles en total for hver record i dit recordsæt...

Hvis du kørte det i 2 forespørgelser ville det være MEGET bedre... Som jeg fortalte for l-a-n-g tid siden...
Avatar billede dimle Nybegynder
25. januar 2002 - 14:47 #34
Nej det ville ikke give bedre performance - Det er undersøgt! SELECT *, DCount("*", "Bandene") AS Antal FROM Bandene" er ca. 1/3 hurtigere end din metode!!!!!
Avatar billede terry Ekspert
25. januar 2002 - 14:50 #35
tak :o)
Avatar billede proaccess Nybegynder
25. januar 2002 - 14:51 #36
Whatever you say... bare DU er tilfreds...
Avatar billede dimle Nybegynder
25. januar 2002 - 14:51 #37
SELECT *, DCount("*", "Bandene") AS Antal FROM Bandene" virker da ikke???

og

SELECT *, Count("*", "Bandene") AS Antal FROM Bandene" virker heller ikke! Der er et forkert antal argumenter!
Avatar billede terry Ekspert
25. januar 2002 - 14:53 #38
SELECT *, DCount("*"; "Bandene") AS Antal FROM Bandene"
Avatar billede dimle Nybegynder
25. januar 2002 - 14:56 #39
SELECT *, DCount("*"; "Bandene") AS Antal FROM Bandene" virker heller ikke! Den siger at der er syntaksfejl i udtrykket???
Avatar billede proaccess Nybegynder
25. januar 2002 - 14:59 #40
Prøv med et feltnavn i stedet for *...

SELECT *, DCount("[ID]", "Bandene") AS Antal FROM Bandene
Avatar billede dimle Nybegynder
25. januar 2002 - 15:03 #41
Nu siger den at der er en ikke-defineret funktion "DCount" i udtrykket!???
Avatar billede proaccess Nybegynder
25. januar 2002 - 15:35 #42
Prøv så med:

SELECT *, (SELECT COUNT(*) FROM Bandene) AS Antal FROM Bandene
Avatar billede dimle Nybegynder
25. januar 2002 - 15:45 #43
Det virker!!!!!! Mange tak!!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester