Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Zufallszahl mit Kommerstellen (https://www.delphipraxis.net/130379-zufallszahl-mit-kommerstellen.html)

daNiii 7. Mär 2009 14:44

Re: Zufallszahl mit Kommerstellen
 
Vielen Dank!
ihr müsst wissen ich bin der totale Anfänger auf diesen Gebiet.
Ich muss leider peichten: ich habe schon wieder ein problem: mit meinem SQLSTR

ich möchte meiner Datenbank einen bereits vorhandenen Wert durch meinen Zufallswert ersetzen.
Hier mein Ansatz.

Delphi-Quellcode:
procedure Form1.Zufallszahl_bilden();
var
Zufallszahl: extended;
Wert: string;
begin
randomize;
Zufallszahl:= (random(1));

form1.adoquery1.close;
form1.adoquery1.sql.clear;
form1.adoquery1.sql.add('update Tabelle Set Wert = '+Zufallszahl;
form1.adoquery1.open
while not form1.adoquery1.eof do begin
form1.adoquery1.next;
end;
form1.adoquery1.close;


end;

Fehlermeldung: Syntaxfehler in Update-anweisung.

Bitte helft mir!

Jakob Ullmann 7. Mär 2009 15:03

Re: Zufallszahl mit Kommerstellen
 
Extended <-> String. Du musst also Zufallszahl erst per FloatToStr in einen String umwandeln (denn ein String wird intern ganz anders als eine Zahl gespeichert). ABER: random(1) liefert einen Integer- also Ganzzahlwert.

daNiii 7. Mär 2009 15:04

Re: Zufallszahl mit Kommerstellen
 
Zitat:

Extended <-> String.
was meinst du?

Jakob Ullmann 7. Mär 2009 15:05

Re: Zufallszahl mit Kommerstellen
 
Sry, habs editiert nachdem du geschrieben hast.

edit: Es könnte hilfreich sein, wenn du sagst, was du genau erreichen möchtest.

daNiii 7. Mär 2009 15:13

Re: Zufallszahl mit Kommerstellen
 
Bei meinem Programm handelt es sich um einen Vokabeltrainer!
Jedes Vokabel in meiner Datenbank hat einen anderen Wert.
Dieser Wert soll sich nach jeder Vokabelüberprüfung in der Datenbank geändern und zwar zufällig.
Die Zufallszahl habe ich bereits erstellen können.
Jedoch hat mein "update" code irgendeinen Fehler den ich nicht finden kann.
Siehe oben.
DANKE

Jakob Ullmann 7. Mär 2009 15:47

Re: Zufallszahl mit Kommerstellen
 
Wenn du dir 100% sicher bist, dass deine Zufallszahl richtig generiert wird (ich verstehe immernoch nicht, warum du eine Dezimalzahl haben willst), ist dein Problem eigentlich geklärt. Aber ich schreibe es gerne auch noch einmal verständlicher auf:

Delphi-Quellcode:
form1.adoquery1.sql.add('update Tabelle Set Wert = '+Zufallszahl;
Den Operator + gibt es ja in zwei Ausführungen, zum Addieren von Zahlen (also Integer, Single, ..., Extended) oder zum Verketten von Strings (Zeichenketten).

Delphi hat eine starke Typisierung, im Gegensatz zu z. B. PHP. Und zwar möchstest du ja, wenn Zufallszahl = 0, dass dann update Tabelle Set Wert = 0 da steht. Dazu müsstest du aber Zufallszahl in einen String umwandeln (wie gesagt, Delphi nimmt dir das nicht ab). Das würde dann so aussehen:

Delphi-Quellcode:
form1.adoquery1.sql.add('update Tabelle Set Wert = ' + FloatToStr(Zufallszahl);
Im Übrigen: Falls du dich in einer zu TForm1 gehörigen Methode befindest, reicht es, ADOQuery1 anstatt Form1.ADOQuery1 zu schreiben.

rollstuhlfahrer 8. Mär 2009 07:50

Re: Zufallszahl mit Kommerstellen
 
HI,

zuerst mal die Syntax einer Update-Anweisung. Die sieht nämlich so aus:
SQL-Code:
UPDATE "Tabellen_Name"
SET "Spalte1" = [Wert]
WHERE {Bedingung}
Mit deiner Anweseiung, die ohne Bedingung daherkommt, wirst du in der Tabelle in der Spalte Wert bei jedem Datensatz den gleichen Wert haben. Jetzt ist immernoch nicht geklärt, ob es sich dabei um Ganzzahlen (0, 1, 2, 3, 4, ...) oder Gleitkommazahlen (0.1, 0.2, 0.3, 0.4, ...) handelt. Dementsprechen ist eine Typenumwandlungsfunktion zu wählen. Zahlen sind nun mal keine Zeichenketten. Sonst könntest du ja auch mit Buchstaben rechnen a la A + A = B ODER A + A = AA. Da weis Delphi dann nicht mehr, was jetzt gefragt ist.
Des Weiteren gibts noch einen Syntax-Fehler:
Delphi-Quellcode:
form1.adoquery1.sql.add('update Tabelle Set Wert = '+Zufallszahl;
Nachdem du die Klammer geöffnet hast, solltest du diese vor dem Semikolon wieder schließen.

Bernhard

PS: SQL-Syntax von hier
Falls es sich nun doch um Gelitkommazahlen handelt, könnte dich das interessieren.

daNiii 8. Mär 2009 09:58

Re: Zufallszahl mit Kommerstellen
 
Vielen Dank für eure Antworten. Mein Problem ist trotzdem noch nicht gelöst.
hier mein derzeitiger Code:
Delphi-Quellcode:
procedure TPool.FormClose(sender: Tobject; var Action: TCloseAction);
begin
Zufallszahl_bilden(); // in dieser procedure wird die Zufallszahl gebildet, var Zufallszahl: extended;
form1.Adoquery1.close;
form1.adoquery1.sql.add('update Tabelle set Wert = '+floattostr(Zufallszahl));
form1.adoquery1.exesql;

while not form1.adoquery1.eof do begin
form1.adoquery1.next;
end;
form1.adoquery1.close;
end;

ich hoffe mir kann jemand helfen

daNiii 8. Mär 2009 10:00

Re: Zufallszahl mit Kommerstellen
 
Da beim Schließen des Fensters die Fehlermeldung kommt. Syntaxfehler. gehe ich davon aus, dass der Fehler bei SQL update liegt.

mkinzler 8. Mär 2009 10:07

Re: Zufallszahl mit Kommerstellen
 
Und dies ist völlig überflüssig
Delphi-Quellcode:
while not form1.adoquery1.eof do begin
  form1.adoquery1.next;
end;
Wenn du zum letzen willst einfach
Delphi-Quellcode:
form1.adoquery1.Last;


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:31 Uhr.
Seite 2 von 4     12 34      

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