Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Datensätze zufällig anzeigen lassen (https://www.delphipraxis.net/3917-datensaetze-zufaellig-anzeigen-lassen.html)

Flo 5. Apr 2003 20:53


Datensätze zufällig anzeigen lassen
 
Guten Abend,
ich habe eine Paradox7 Tabelle und möchte mir die Datensätze in der Tabelle zufällig anzeigen lassen. Ich habe die Vermutung, dass man irgendetwas mit ''randomize'' machen muss. Aber wie binde ich das in die Tabelle ein ???

nailor 5. Apr 2003 21:15

Kenn mich mit paradox nicht direkt aus. Aber du muss doch auf den x-ten Beitrag zugreifen können?!?

Wenn ja:

randomize ins "OnCreate"
beim anzeigen:

Delphi-Quellcode:
//rausfinden, wie viele Einträge
a := random(anzahl_der_beiträge); //a ist nun 0-(Anzahl der Beiträge minus 1)
//den a-ten Beitrag aus der DB anzeigen
hoffe, du kapierst, was ich meine

Flo 6. Apr 2003 08:19

Zitat:

Zitat von Nailor
hoffe, du kapierst, was ich meine

Sorry, irgendwie nicht. Wie finde ich denn raus, wie viele Einträge meine Tabelle hat ? :mrgreen: Und ...(anzahl_der_beiträge)... versteh ich auch noch nicht ganz. Bin in diesem Gebiet total der Anfänger.

ach: Und wo finde ich das OnCreate ??? :(

Daniel B 6. Apr 2003 08:48

Hallo,
Zitat:

Zitat von Flo
Sorry, irgendwie nicht. Wie finde ich denn raus, wie viele Einträge meine Tabelle hat ? :mrgreen: Und ...(anzahl_der_beiträge)...

Bei normalen List-Komponenten gibt es einen Count der einem sagt, wieviel Einträge in der Liste sind.
Zum Bleistift ListBox.Items.Count, oder auch mit ListView.
Da ich aber keine Datenbanken haben, musst Du da selbst nachschauen ob es sowas gibt.
Zitat:

ach: Und wo finde ich das OnCreate ??? :(
Er Meint die Prozedur OnCreate des Formulares.
Du muss erstmal rausfinden wieviele Einträge Deine Liste hat, den Wert speicherst Du z.B. in eine Integervariable.
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Randomize;
end;
Klicke Dein Formular einmal an, dann ist es links im Objekt Inspector ausgewählt, dort klickst Du dann auf den Reiter Eigenschaften und machst dann ein Doppelklick bei OnCreate.
Im Editorfenster legt Delphi dann von alleine die Prozedur an.
Das ist jetzt Prozedur um Deine Einträge auf klick eines Buttons auszuführen:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  iTemp: Integer;
begin
  iTemp := x; //hier den Wert rausfinden und setzen, anstatt dem x
  //Und hier schriebst Du dann,
  //Zeige meine Daten mit := Random(iTemp);
end;
Hoffenlich ist das jetzt etwas klarer. ;)

Grüsse, Daniel :hi:

woki 6. Apr 2003 10:38

Anzahl der DAtensaätze in einer Table
 
Hallo,

wegen der Anzahl der Datensätze

Anzahl := Table1.RecordCount;


Gruß
Wolfgang

Flo 6. Apr 2003 17:12

Danke euch beiden.
Werde das gleich mal ausprobieren.
Melde mich dann nochmal.

Flo 6. Apr 2003 17:25

Also ich hab das irgendwie noch nicht hinbekommen.
Ich möchte dieses random in den folgenden source einbauen:
Delphi-Quellcode:
begin
with qryAbfrage do begin     //englisch vergleich mit tabelle (query komponente)
  Close;
  SQL.Text := 'Select Count(*) as ANZAHL From eng';
  SQL.Add('Where ENGLISCH = :Englisch and DEUTSCH = :Deutsch');
  ParamByName('Englisch').AsString := edit1.Text; //Parameterwerte aus1 Edit

  Open;
  if FieldByName('ANZAHL').AsInteger > 0 then
    ShowMessage('Richtig')
  else
      if MessageDlg('Leider falsch. Lösungen anzeigen?',
    mtConfirmation, [mbYes, mbNo], 0) = mrYes then
  begin
    form5.show;
  end;;

  Close
 end;
end;
Wie stelle ich das an ???

Flo 7. Apr 2003 13:05

Hat keiner ne Ahnung ??? :cry:
Bitte helft mir. :(

Sharky 7. Apr 2003 13:24

Zitat:

Zitat von Flo
Hat keiner ne Ahnung ??? :cry:
Bitte helft mir. :(

Hai Flo,

um das zuerreichen musst Du dafür sorgen das deine Datensätze in der Tabelle ein ID-Feld haben welches fortlaufend durchnummeriert ist.

Dann ist es einfach (mal so als denkanstoss):

Delphi-Quellcode:
begin
 i := Random (AnzahlDerDatensätze);
 Query1.Close;
 Query1.Sql.Text := 'SELECT * FROM tabelle WHERE id_feld = '
 + IntToStr (i);
 Query1.Open;
end;

Flo 7. Apr 2003 15:21

Danke für deine Hilfe, aber ich glaube, dass ich zu blöd für das bin.
Ich habs mal so versucht:

Delphi-Quellcode:
var anzahl,i: integer;
begin
anzahl := table1.recordcount;
i := Random (Anzahl);
Qryabfrage.Close;
Qryabfrage.Sql.Text := 'SELECT * FROM tabelle WHERE id_feld = '
+ IntToStr (i);
Qryabfrage.Open;

with qryAbfrage do begin     //englisch vergleich mit tabelle (query komponente)
  Close;
  SQL.Text := 'Select Count(*) as ANZAHL From eng';
  SQL.Add('Where ENGLISCH = :Englisch and DEUTSCH = :Deutsch');
  ParamByName('Englisch').AsString := edit1.Text; //Parameterwerte aus1 Edit

  Open;
  if FieldByName('ANZAHL').AsInteger > 0 then
    ShowMessage('Richtig')
  else
      if MessageDlg('Leider falsch. Lösungen anzeigen?',
    mtConfirmation, [mbYes, mbNo], 0) = mrYes then
  begin
    form5.show;
  end;;

  Close
 end;
end;
Klappt aber nicht. :(

woki 7. Apr 2003 19:59

Hallo

du mußt Table1 ersetzen, durch das Dataset, dessen Recordanzahl du ermtteln möchtest, und das Dataset muß zu diesem Zeitpunkt geöffnet sein.

Gruss
Wolfgang

Flo 8. Apr 2003 08:56

Also...erstmal danke für deine Antwort.
Ich schätze, dass das Dataset meine Datasource ist, oder???
Oder meine Query-Komponente ???
Und wie stelle ich es an, dass das Dataset geöffnet ist?
Habe ich das nicht schon oben stehen???
Delphi-Quellcode:
with qryAbfrage do begin    
  Close;
...............
Open;
  if FieldByName
....
Ja, ja...Ein DB-Anfänger braucht hilfe :roll:

woki 8. Apr 2003 11:01

Zitat:

Ich schätze, dass das Dataset meine Datasource ist, oder???
Oder meine Query-Komponente ???
Datasets sind alle Kompoenten, die sich von TDataset ableiten, also TTable, TQuery, aber auch TClientdataset etc ...
In Deinem Fall also wohl eine TQuery Komponente.
Du bestimmst in Deienm Source die Anzalh der Datensätze in Table1, es ist aber weder erkennbar, ob Table1 geöffnet ist, noch worauf sie sich bezieht. Ich befürchte deshalb ein wenig, daß du meinem Hinweis übernommen hast, ohne ihn zu verstehen und in deinen Kontxt zu übersetzen.
Zitat:

Und wie stelle ich es an, dass das Dataset geöffnet ist?
Habe ich das nicht schon oben stehen???
Du bestimmst in Deienm Source die Anzalh der Datensätze in Table1, es ist aber weder erkennbar, ob Table1 geöffnet ist, noch worauf sie sich bezieht. Ich befürchte deshalb ein wenig, daß du meinem Hinweis übernommen hast, ohne ihn zu verstehen und in deinen Kontxt zu übersetzen.
wahrscheinlich muß es bei Dir heißen

Delphi-Quellcode:
anzahl := qryAbfrage.recordcount
Gruss
Wolfgang

Flo 8. Apr 2003 12:33

Also ich glaub, ich gebs auf. :?
Jetzt hab ich so viel rumprobiert, die ganzen Tipps beachtet und habs immernoch nocht hinbekommen.

Kann mir das nicht jemand, wenns nicht so viel Arbeit macht, das mal in den oben geschriebenen Code einsetzen ???
Aber nur, wenns nicht zu viel verlangt ist.

Sharky 8. Apr 2003 13:02

Zitat:

Zitat von Flo
Also ich glaub, ich gebs auf. :?
Jetzt hab ich so viel rumprobiert, die ganzen Tipps beachtet und habs immernoch nocht hinbekommen.

Kann mir das nicht jemand, wenns nicht so viel Arbeit macht, das mal in den oben geschriebenen Code einsetzen ???
Aber nur, wenns nicht zu viel verlangt ist.

Hai Flo,

nur mal als Frage:

Wenn ich das richtig sehe möchtest Du aus einer Tabelle in der z.B. deutsche Wörter stehen eines zufällig auswählen.

Dieses wird dem Anwender dann angezeigt. Er soll nun eine mögliche englische Übersetzung eingeben.
Dann prüfst Du ob das eingegebene Wort in der Tabelle vorhanden ist?

Flo 8. Apr 2003 16:01

Zitat:

Zitat von Sharky
Zitat:

Zitat von Flo
Also ich glaub, ich gebs auf. :?
Jetzt hab ich so viel rumprobiert, die ganzen Tipps beachtet und habs immernoch nocht hinbekommen.

Kann mir das nicht jemand, wenns nicht so viel Arbeit macht, das mal in den oben geschriebenen Code einsetzen ???
Aber nur, wenns nicht zu viel verlangt ist.

Hai Flo,

nur mal als Frage:

Wenn ich das richtig sehe möchtest Du aus einer Tabelle in der z.B. deutsche Wörter stehen eines zufällig auswählen.

Dieses wird dem Anwender dann angezeigt. Er soll nun eine mögliche englische Übersetzung eingeben.
Dann prüfst Du ob das eingegebene Wort in der Tabelle vorhanden ist?

Genau.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:49 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