Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi wie kann man einen zufälligen datensatz auswählen? (https://www.delphipraxis.net/15987-wie-kann-man-einen-zufaelligen-datensatz-auswaehlen.html)

PhöniX 8. Feb 2004 14:41


wie kann man einen zufälligen datensatz auswählen?
 
So..
Ich wille ien zufälligen Datensatz auswählen:
soweit bin ich schon mal:
Delphi-Quellcode:
var
zufallszahl: Integer;
[...]
randomize;
 zufallszahl := random(???);//<- aber was muss hier rein??
'select * from table1 limit ' + zufallszahl + ',1';
aber was muss an die stelle mit den fragezeichen ?

Luckie 8. Feb 2004 14:43

Re: wie kann man einen zufälligen datensatz auswählen?
 
Delphi-Quellcode:
zufallszahl := random(???);//<- aber was muss hier rein??
Cursor auf dem Befehl setzten und dann mit F1 Merlin's Zauberbuch aufrufen. ;)

MikeS 8. Feb 2004 14:44

Re: wie kann man einen zufälligen datensatz auswählen?
 
Zitat:

Delphi-Syntax:

function Random [ ( Range: Integer) ];

Beschreibung

In Delphi gibt Random eine Zufallszahl im Bereich 0 <= X < Range zurück. Wird der Parameter Range nicht angegeben, liefert Random einen Real-Wert im Bereich

0 <= X < 1.

Um den Zufallszahlengenerator zu initialisieren, rufen Sie Randomize einmal auf oder weisen der Variable RandSeed vor dem Aufruf von Random einen Wert zu.

Hinweis: Die Implementierung der Funktion Random kann sich bei einer anderen Compiler-Version ändern. Sie sollten Random daher nicht für Verschlüsselungen oder andere Einsatzbereiche verwenden, in denen reproduzierbare Pseudozufallszahlen benötigt werden.
Aus der OH

Luckie 8. Feb 2004 14:46

Re: wie kann man einen zufälligen datensatz auswählen?
 
Sehr schön. Und warum postest du das? Meinst du, ihn seiner steht das nicht drinne? :roll:

MikeS 8. Feb 2004 14:49

Re: wie kann man einen zufälligen datensatz auswählen?
 
doch ich denke schon!

da ich seine frage auch beantworten wollte und es ab und zu vorkommt das gleichzeitig
von mehreren usern gepostet wird kann das wohl vorkommen, ODER?

PhöniX 8. Feb 2004 14:50

Re: wie kann man einen zufälligen datensatz auswählen?
 
ja aber ich muss doch dort die zahl der maximal vorhandenen Datensätze haben...
und wie krieg ich ie darein?

Sharky 8. Feb 2004 14:52

Re: wie kann man einen zufälligen datensatz auswählen?
 
Zitat:

Zitat von PhöniX
... maximal vorhandenen Datensätze ...

Schaue dir mal die Funktion .RecordCount deines DataSets an.

[EDIT]Aus .RecCount habe ich .RecordCount gemacht. Was ein kleiner Fehler.

PhöniX 8. Feb 2004 14:55

Re: wie kann man einen zufälligen datensatz auswählen?
 
wo find ich das denn alles?? dataset und .reccount ?

Luckie 8. Feb 2004 14:57

Re: wie kann man einen zufälligen datensatz auswählen?
 
Zitat:

Zitat von MikeS
doch ich denke schon!
da ich seine frage auch beantworten wollte und es ab und zu vorkommt das gleichzeitig
von mehreren usern gepostet wird kann das wohl vorkommen, ODER?

Gegen gleichzeitiges posten habe ich ja nichts gesagt, da steckt man nicht hinter. Aber was mich stört, ist der Auszug aus der Hilfe. Er soll selber lernen Lösungen an Hand der Hilfe zu finden. Das bringt ihm mehr, als wenn ihm jedes mal die richtige Stelle aus der Hilfe gepostet wird. Hilfe zur Selbsthilfe eben. ;)

Robert_G 8. Feb 2004 14:58

Re: wie kann man einen zufälligen datensatz auswählen?
 
Wenn du kein DataSet, sondern eine Query benutzt, kannst du es so machen:

Delphi-Quellcode:
Var
  RecCount :Integer;
...
Begin
...
  Query.SQL.Text :=
    'SELECT COUNT(*) RecCount' + #10 +
    'FROM  Tabelle';
  Query.Open;
  RecCount := Query.FieldValues['RecCount'];
Nachtrag: Im Bsp ist es eine TAdoQuery.

PhöniX 8. Feb 2004 14:59

Re: wie kann man einen zufälligen datensatz auswählen?
 
:wiejetzt:
ich benutze eine tabelle und paradox 7...

Sharky 8. Feb 2004 15:03

Re: wie kann man einen zufälligen datensatz auswählen?
 
TTable, TQuery TADOQuery usw. sind alles nachfahren von TDateSet und sollten darum alle die Funktion .RecordCount haben.

Wobei die Methode von GeorgeWNewbie natürlich die beste bei einem Query ist.

Es müsste aber so aussehen:

SQL-Code:
 SELECT count (*) AS reccount FROM tabelle

Robert_G 8. Feb 2004 15:05

Re: wie kann man einen zufälligen datensatz auswählen?
 
TTable habe ich noch nie benutzt... :gruebel:
Das ganze müsste aber auch mit einer BDE-Query funktionieren.
In RecCount (welch' Überraschung) steht dann die Anzahle der Einträge.
( natürlich "'FROM Tabelle';" durch deinen Tabellennamen ersetzen. )

PhöniX 8. Feb 2004 15:17

Re: wie kann man einen zufälligen datensatz auswählen?
 
musses dann so aussehen??:
Delphi-Quellcode:
var
maxi: integer;
zufallszahl: integer;
[...]
randomize;
maxi := SELECT count (*) AS reccount FROM tabelle;
zufallszahl := random(maxi);
select * from tabelle limit ' + zufallszahl + ',1';

Robert_G 8. Feb 2004 15:30

Re: wie kann man einen zufälligen datensatz auswählen?
 
Wie gesagt, ich habe keine Ahnung von TTable, aber ich denke es müsste so aussehen:
Delphi-Quellcode:
...
  Query.SQL.Text :=
    'SELECT COUNT(*) RecCount' + #10 + 
    'FROM  Tabelle';
  Query.Open;
  RecCount := Query.FieldValues['RecCount'];
  Randomize;
  ZufallsZahl := Random(RecCount);
  Table.SQL.Text :=
    'SELECT *' + #10 + 
    'FROM  Tabelle' + #10 +
    'LIMIT ' + ZufallsZahl + ', 1';
...

PhöniX 8. Feb 2004 16:21

Re: wie kann man einen zufälligen datensatz auswählen?
 
ne das geht nicht..

PhöniX 8. Feb 2004 16:27

Re: wie kann man einen zufälligen datensatz auswählen?
 
so...hab was gefunden:
Delphi-Quellcode:
Anzahl := Table1.RecordCount;
ganz simpel

PhöniX 8. Feb 2004 17:24

Re: wie kann man einen zufälligen datensatz auswählen?
 
Delphi-Quellcode:
 var
  maxiEng: Integer;
  zufallszahl: Integer;
 [...]
 begin
  maxiEng := FormVocsEng.TableEng.RecordCount;
  zufallszahl := random(maxiEng);
  'select * from FormVocsEng.TableEng limit' + IntToStr(zufallszahl) + ',1'; //<- Fehler Hier
 end;
 [...]
Hier gibts noch einen Fehler:
Anweisung erforderlich, aber Ausdruck vom Typ 'String' gefunden.

Wenn ich die ' weglasse weiß er nicht was select ist:
Undefinierter Bezeichner: 'select'

[edit]Hab herausgefunden, dass Delphi5 Prof. anscheinen kein select kennt..muss man da was downloaden?[/edit]

Kann mir da jemand helfen?

Robert_G 8. Feb 2004 17:49

Re: wie kann man einen zufälligen datensatz auswählen?
 
Du kannst ihm nicht einfach ein SELECT-Statement geben.
Delphi weiß doch gar nicht, was es damit machen soll.
Wenn du dir meinen Code angeschaut hast, müsste dir das aufgefallen sein:
Delphi-Quellcode:
  Table.SQL.Text :=
    'SELECT *' + #10 +
    'FROM  Tabelle' + #10 +
    'LIMIT ' + IntToStr(ZufallsZahl) + ', 1';
Damit gibst du der Table1 (Typ TTable) ein SELECT-Statement. Ich bin mir aber nicht sicher, wie man es bei TTable ausführt ( :gruebel: ). Höchstwahrscheinlich mit Table1.Open oder Table1.Refresh.

PhöniX 8. Feb 2004 18:05

Re: wie kann man einen zufälligen datensatz auswählen?
 
was ist mit TQuery??
Delphi-Quellcode:
Query.Active:=false;
Query.Sql.Clear;
Query.Sql.Add('SELECT Deutsch FROM FormVocsEng.TableEng WHERE ?? ');//<---HIER!!
Query.Active:=true;
Was muss an der markierten Stelle hinter WHERE eingefügt werden wenn man wissen will WO die Datensatznummer ist, die zufällig gewählt wurde?

Robert_G 8. Feb 2004 18:19

Re: wie kann man einen zufälligen datensatz auswählen?
 
Du kannst Delphi & SQL nicht vermischen.
Deine Abfrage wird von der DB verarbeitet, die hat aber keine Ahnung von den Objekten in deinem Delphi-Code.
Vielleicht solltest du dich hier mal ein wenig über SQL schlau machen.

Zur Frage:
In der SELECT- & in der WHERE-Clause einer Abfrage kannst du nur Spaltennamen der Tabellen verwenden, die nach FROM stehen.
z.Bsp.:
SQL-Code:
SELECT Feld1
FROM  Tabelle
WHERE Feld2 = 1

(@all Ich weiß, das man auch noch Funktionen ,... benutzten kann, die Erklärung würde jetzt einfach zu weit gehen)

Diese Tabellen müssen in der Datenbank existieren (deshalb kannst du dort kein Delphi-Objekt à la "FormVocsEng.TableEng" angeben).

Da du jetzt auf TQuery umgestiegen bist versuch' es doch mal so:
Delphi-Quellcode:
  With Query Do
  Begin
    Active := False;
    SQL.Text :=
      'SELECT *' + #10 +
      'FROM  Tabelle' + #10 +
      'LIMIT ' + IntToStr(ZufallsZahl) + ', 1';
    Open;
  End;
Ersetze Tabelle jetzt noch mit dem Tabellenname in deiner DB und du hast deine Abfrage.

grayfox 9. Feb 2004 02:27

Re: wie kann man einen zufälligen datensatz auswählen?
 
hallo phönix!

mach bitte keine doktorarbeit aus deinem problem ;)
bleib bei deinem table und sieht dir die methode MoveBy an. mit ihrer hilfe und deiner zufälligen zahl solltest das gewünschte ergebnis rasch erreichen können.
wie luckie schon früher bemerkt hat - einen ttable auf die form ziehen, ihn markieren, auf F1 drücken und du wirst schon fündig ;)

mfg, stefan

Alibi 9. Feb 2004 11:29

Re: wie kann man einen zufälligen datensatz auswählen?
 
Alternative Lösung:
SELECT * FROM 123 ORDER BY RAND() LIMIT1;


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:04 Uhr.

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