Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Datensatznr. des Satzes welchem der Zeiger gerade liegt? (https://www.delphipraxis.net/112493-datensatznr-des-satzes-welchem-der-zeiger-gerade-liegt.html)

Borschti 22. Apr 2008 12:49

Datenbank: ADS • Version: 8.1 • Zugriff über: Kp

Datensatznr. des Satzes welchem der Zeiger gerade liegt?
 
Hallo,

Ich suche eine Methode/Eigenschaft welche mir die Nummer des Datensatzes, auf welchem gerade der Zeiger liegt, zurückgibt.

Beispiel: Ich habe 10 Datensätze in meiner Query und diese werden mir auch in meinem DBGrid angezeigt, nun klicke Ich den fünften an und von dort fängt auch meine Schleife an zu arbeiten nachdem Ich auf einem Button klicke, der Fortschritt der Operation wird auf einer ProgressBar angezeigt.

Das Problem ist jetzt das wenn ich irgendwo mitten in dem DBGrid starte, meine ProgressBar nur zur hälfte gefüllt ist nachdem die Schleife durchgelaufen ist.

Also brauche ich diese Methode/Eigenschaft um auszurechnen wieviele Datensätze insgesamt durchlaufen werden bis das DBGrid am Ende angelangt ist. Diesen Wert brauche Ich dann um den exakten Fortschritt meiner progrssBar zu berechnen. z.Z. benutze Ich noch Query1.RecordCount.

Hoffe Ich konnte es verständlich erklären ;)

mfg
Alex

mkinzler 22. Apr 2008 12:51

Re: Datensatznr. des Satzes welchem der Zeiger gerade liegt?
 
Kennt ADS .RecNo ?

Borschti 22. Apr 2008 13:01

Re: Datensatznr. des Satzes welchem der Zeiger gerade liegt?
 
Ja tut es. Aber was liest das aus? Hab mirs grade per ShowMessage ausgeben lassen und egal wo der Zeiger liegt bekomm Ich eine -1 raus.

Rufe es mit VddQuery1.RecNo auf.

mfg
Alex

Borschti 24. Apr 2008 07:54

Re: Datensatznr. des Satzes welchem der Zeiger gerade liegt?
 
Also bin jetzt nochmal dazu gekommen mir RecNo etwas genauer anzuschaun, in der Hilfe steht: "RecNo stellt eine Behelfseigenschaft für abgeleitete Datenmengen zur Verfügung, die keine Datensatznummern unterstützen."

Hört sich garnicht mal so schlecht an, nur wie kann Ich das nutzen? Oder gibt es vielleicht noch eine andere Eigenschaft oder methode mit der das möglich ist?

mfg
Alex

s-off 24. Apr 2008 08:14

Re: Datensatznr. des Satzes welchem der Zeiger gerade liegt?
 
Hallo,

also meine TADSQuery (8.1) liefert mit RecNo() sehr wohl die Position des aktuellen Datensatzes innerhalb der Datenmenge zurück.
Hat Deine Tabelle einen Index oder hast Du einen Filter gesetzt? Dann spiel mal mit der 'Sequenced'-Property.

Beachte auch, dass RecordCount auch gelöschte Datensätze beinhaltet!

Borschti 24. Apr 2008 08:43

Re: Datensatznr. des Satzes welchem der Zeiger gerade liegt?
 
Hmm also Ich bekomm bei RecNo nur -1 zurück, so stehts auch in der Hilfe, also das RecNo standardmäßig den Wert -1 hat :(

Vielleicht liegt es an meinem Aufruf
Delphi-Quellcode:
Query1.RecNo;
Kanns mir aber irgendwie nicht wirklich vorstellen...

Habe auch mal nach Sequenced im Internet und in der Hilfe gesucht, konnte aber nicht wirklich was finden :(

Was macht die Eigenschaft? Eine kurze Erklärung wäre sehr nett.

mfg
Alex

mkinzler 24. Apr 2008 08:48

Re: Datensatznr. des Satzes welchem der Zeiger gerade liegt?
 
Sie enthält die Datensatznummer des aktiven Datensatzes.

s-off 24. Apr 2008 08:55

Re: Datensatznr. des Satzes welchem der Zeiger gerade liegt?
 
Und Du bist sicher, dass Dein Query ein TADSQuery ist, und kein normales TQuery?

Mich wundert sowieso, dass Deine Hilfe auf deutsch ist - die Hilfe zu Advantage gibt es glaube ich nur in englisch und dort heißt es:

Zitat:

RecNo

Indicates the current record in the dataset.

Syntax

property RecNo: Longint;

Description

Examine RecNo to determine the record number of the current record in the dataset. Applications might use this property with RecordCount to iterate through all the records in a dataset, though typically record iteration is handled with calls to First, Last, MoveBy, Next, and Prior.

Borschti 24. Apr 2008 09:36

Re: Datensatznr. des Satzes welchem der Zeiger gerade liegt?
 
Hmm naja hatte in der Online Hilfe von Delphi geschaut :roll:

Da gabs auch was zu RecNo, hatte gedacht das wär das gleiche ;)

Naja, RecNo scheint leider nicht zu funktionieren, wie kann mir denn sequenced die Datensatznummer des aktiven Datensatzes geben? Hat als Rückgabewert Boolean :?:

Poelser 24. Apr 2008 10:27

Re: Datensatznr. des Satzes welchem der Zeiger gerade liegt?
 
Ich weiß jetzt nicht, ob ADS das unterstützt, bei Sybase geht sowas mit

select number(*), * from MeineTabelle;

Es ist aber nur ein simples Durchnummerieren :roll:

shmia 24. Apr 2008 10:28

Re: Datensatznr. des Satzes welchem der Zeiger gerade liegt?
 
Also, bei relationalen Datenbanken hat der RecNo keinerlei Bedeutung.
Bei alten Desktop "Datenbanken" wie z.B. DBase war das noch anderst. Dort war der RecNo identisch mit der physikalischen Position der Daten in der DBase Datei.
Es hängt also von der unterliegenden Datenbank und den DB-Zugriffskomponenten ab, ob RecNo überhaupt geliefert wird oder immer -1 ist.
Wozu brauchst du den RecNo überhaupt ?

QuickAndDirty 24. Apr 2008 10:34

Re: Datensatznr. des Satzes welchem der Zeiger gerade liegt?
 
Es gibt Datenmengen z.b. Querys die kein RECNO unterstützen und auch einige Datanbanken (z.b. Elevatedb)die das nicht bei Tables unterstützen.
Es ist extrem Aufwendig diese Recno zu ermitteln je nach Range und Key dann haben Appends und deletes auch noch einen Einfluss.

Ich stehe vor einem Ähnlichen problem weil ich die Recno mitzähle(counter) blos nach findkey ist nichts mehr mit mitzählen.

s-off 24. Apr 2008 10:34

Re: Datensatznr. des Satzes welchem der Zeiger gerade liegt?
 
Zitat:

Zitat von Poelser
Ich weiß jetzt nicht, ob ADS das unterstützt, bei Sybase geht sowas mit

select number(*), * from MeineTabelle;

Es ist aber nur ein simples Durchnummerieren :roll:

ADS ist von Sybase iAnywhere (ehemals Extended Systems) ;)

@Borschti: Sequenced gibt Dir nix zurück, beeinflusst aber das Verhalten der Datensatznummern.

hoika 24. Apr 2008 10:38

Re: Datensatznr. des Satzes welchem der Zeiger gerade liegt?
 
Hallo,

dann setze doch mal sequenced:= True
und dann RecNo probieren.
Ausserdem muss doch dazu was in der ADS-Hilfe stehen.

Falls das alles nichts hilft:
- merke die den aktuellen Record (Prim-Key)
- Bookmark setzen (falls ADS das kann)
- laufe bis zum Ende, zählen die Datensätze mit
- gehe zum Bookmark zurück

Vorher solltest du die Verbindung Grid zu Query lösen
fällt mir gerade nicht ein, wie.


Heiko

Borschti 24. Apr 2008 10:56

Re: Datensatznr. des Satzes welchem der Zeiger gerade liegt?
 
Zitat:

Zitat von hoika
dann setze doch mal sequenced:= True
und dann RecNo probieren.
Ausserdem muss doch dazu was in der ADS-Hilfe stehen.

Super das funzt, danke euch allen das Ihr mir geholfen habt :D

s-off 24. Apr 2008 12:25

Re: Datensatznr. des Satzes welchem der Zeiger gerade liegt?
 
Zitat:

Zitat von Borschti
Zitat:

Zitat von hoika
dann setze doch mal sequenced:= True
und dann RecNo probieren.

Super das funzt, danke euch allen das Ihr mir geholfen habt :D

Wovon rede ich seit Beitrag #5? :roll:

Zitat:

Zitat von s-off
Dann spiel mal mit der 'Sequenced'-Property.


Poelser 24. Apr 2008 12:30

Re: Datensatznr. des Satzes welchem der Zeiger gerade liegt?
 
Zitat:

Zitat von s-off
Zitat:

Zitat von Poelser
Ich weiß jetzt nicht, ob ADS das unterstützt, bei Sybase geht sowas mit

select number(*), * from MeineTabelle;

Es ist aber nur ein simples Durchnummerieren :roll:

ADS ist von Sybase iAnywhere (ehemals Extended Systems) ;)

Stümmt latürnich, number(*) ist aber vom Adaptive Server Anywhere, deshalb weiß ich nicht, ob's im ADS drin ist :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:12 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz