![]() |
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! |
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.
|
Re: Zufallszahl mit Kommerstellen
Zitat:
|
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. |
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 |
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:
Den Operator + gibt es ja in zwei Ausführungen, zum Addieren von Zahlen (also Integer, Single, ..., Extended) oder zum Verketten von Strings (Zeichenketten).
form1.adoquery1.sql.add('update Tabelle Set Wert = '+Zufallszahl;
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:
Im Übrigen: Falls du dich in einer zu TForm1 gehörigen Methode befindest, reicht es, ADOQuery1 anstatt Form1.ADOQuery1 zu schreiben.
form1.adoquery1.sql.add('update Tabelle Set Wert = ' + FloatToStr(Zufallszahl);
|
Re: Zufallszahl mit Kommerstellen
HI,
zuerst mal die Syntax einer Update-Anweisung. Die sieht nämlich so aus:
SQL-Code:
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.
UPDATE "Tabellen_Name"
SET "Spalte1" = [Wert] WHERE {Bedingung} Des Weiteren gibts noch einen Syntax-Fehler:
Delphi-Quellcode:
Nachdem du die Klammer geöffnet hast, solltest du diese vor dem Semikolon wieder schließen.
form1.adoquery1.sql.add('update Tabelle Set Wert = '+Zufallszahl;
Bernhard PS: SQL-Syntax von ![]() Falls es sich nun doch um Gelitkommazahlen handelt, könnte dich ![]() |
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 |
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.
|
Re: Zufallszahl mit Kommerstellen
Und dies ist völlig überflüssig
Delphi-Quellcode:
Wenn du zum letzen willst einfach
while not form1.adoquery1.eof do begin
form1.adoquery1.next; end;
Delphi-Quellcode:
form1.adoquery1.Last;
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:39 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