Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Datenbank Abfrage Problem (https://www.delphipraxis.net/101120-datenbank-abfrage-problem.html)

Jack23 8. Okt 2007 17:20

Datenbank: Access • Version: 2003 • Zugriff über: ADO

Datenbank Abfrage Problem
 
Wieso funktioniert diese Abfrage nicht?

Delphi-Quellcode:
ADOQuery1.Sql.Add('SELECT TOP '10' * FROM abc ORDER BY RAND()');

DeddyH 8. Okt 2007 17:22

Re: Datenbank Abfrage Problem
 
Weil da zuviel Hochkommata drin sind.
Delphi-Quellcode:
ADOQuery1.Sql.Add('SELECT TOP 10 * FROM abc ORDER BY RAND()');

Jack23 8. Okt 2007 17:24

Re: Datenbank Abfrage Problem
 
Oh ne sorry das ist schon klar. Habe ich falsch kopiert. Er gibt immer die Meldung "Undefinierte Funktion "RAND" zurück

mkinzler 8. Okt 2007 17:24

Re: Datenbank Abfrage Problem
 
Gibt es die SP RAND?

DeddyH 8. Okt 2007 17:28

Re: Datenbank Abfrage Problem
 
Gibt es SPs bei Access? Die Frage ist ernst gemeint, ich habe von Access keine Ahnung (und meide es wie die Pest ;)).

Jack23 8. Okt 2007 17:32

Re: Datenbank Abfrage Problem
 
SP?

DeddyH 8. Okt 2007 17:35

Re: Datenbank Abfrage Problem
 
Stored Procedure

Jack23 8. Okt 2007 17:37

Re: Datenbank Abfrage Problem
 
Gibt es denn eine andere Möglichkeit zufällige Datensätze abzufragen?

marabu 8. Okt 2007 17:53

Re: Datenbank Abfrage Problem
 
Hallo,

Zitat:

Zitat von Jack23
Wieso funktioniert diese Abfrage nicht?
Delphi-Quellcode:
ADOQuery1.Sql.Add('SELECT TOP '10' * FROM abc ORDER BY RAND()');

Abgesehen von dem bereits korrigierten String-Literal: Rand() ist hier keine Stored Procedure, sondern eine VBA-Funktion. Die wird hier aber nur einmal ausgewertet, stellt also eine Konstante dar. Damit sie für jeden Satz einen anderen Wert liefert, muss ein Bezug zu einem Feld der Tabelle hergestellt werden. Den Seed-Value muss man dann natürlich auch über VBA setzen.

Grüße vom marabu

Jack23 8. Okt 2007 18:05

Re: Datenbank Abfrage Problem
 
Sorry!

Ich weiß leider nicht was du mir damit sagen willst.

marabu 8. Okt 2007 18:29

Re: Datenbank Abfrage Problem
 
Hast du dir das SQL-Statement selbst ausgedacht oder ist das ein Beutestück? Der Ansatz über Rand() zufällige Datensätze auszulesen funktioniert in Access VBA. Damit es dann wirklich funktioniert muss das Statement aber noch etwas abgeändert werden - genau das ist der Inhalt meines vorigen Beitrags.

Ich kenne MS Access nicht so gut, aber ich fürchte du musst deine Selektion client-seitig ausführen, wenn du keine Erweiterungs-Bibliothek mit einem Random-Generator schreiben willst.

Freundliche Grüße

mkinzler 8. Okt 2007 18:33

Re: Datenbank Abfrage Problem
 
Jack ist sehr gut im Kopieren von Code. Mit dem Verständnis klappt es leider nicht ganz so gut.

Jack23 8. Okt 2007 18:46

Re: Datenbank Abfrage Problem
 
Die SQL Zeile habe ich mir selbst ausgedacht. Von SQL verstehe ich nämlich ein wenig.

Meintest du ich soll RAND() einfach nur klein schreiben?

Jack23 8. Okt 2007 20:05

Re: Datenbank Abfrage Problem
 
Ich habe jetzt eine Lösung ausgetüftelt. Ganz alleine! :-D

Das ist der Code.
Vielleicht Interessiert es ja noch mal jemanden.

Delphi-Quellcode:
ADOQuery1.Sql.Add('SELECT * FROM abc WHERE ID=Int(((SELECT Max(ID) FROM abc)-(SELECT Min(ID) FROM abc)+ 1) * Rnd +(SELECT Min(ID) FROM abc))');

Svenkan 8. Okt 2007 22:18

Re: Datenbank Abfrage Problem
 
Auf Grund des vorherigen Posts mach ich jetzt mal das, was meine Lateinlehrerin auch gerne macht: erklär mir doch mal den Code-Aufbau!


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