![]() |
Datenbank: MySQL • Version: 5 • Zugriff über: dbexpress
MySQL/dbexpress Frage - Zellinhalte in Variablen speichern
Guten Abend,
ich stecke jetzt schon seit ein paar Stunden an diesem Problem fest. Tut mir leid wenn es schon so einen Thread gibt, ich bin hier neu... Ich habe einen funktionierenden MySQL Server und habe auch Zugriff darauf. Ich möchte aus einer Zelle in einer Tabelle Namens data_item eine ID herausfinden und sie in einer Variable zwischenspeichern. Danach dann die ID in einem Insert into in einer anderen Tabelle weiterverwenden. Mein Quellcodeansatz:
Delphi-Quellcode:
So und hier möchte ich die Variable einlesen. QRead gibt ja nur ein Feld und einen Datensatz aus.
var tmp:String;
begin with QRead do begin Close; CommandText:='Select id From data_item where name="'+Edit1.Text+'";'; Open; First; end; //----Hier---- with QDo do begin Active:=false; CommandText:='INSERT INTO `inventory` (`charid`,`backpack_number`,`itemnumber`,`itemid`,`inventoryslot`,`durability`,`count`,`refine`,`element`,`refine_element`) VALUES ('+Edit5.Text+',-1,50,'+tmp+','+Edit6.Text+',8000000,'+Edit2.Text+','+Edit3.Text+','+Edit4.Text+',10);'; ExecSQL; end; end; Den müsste ich doch eigentlich ganz einfach in eine Zelle reinschreiben können. Tut mir leid wenn ich so doof frage, aber ich bin neu in dem Gebiet. MfG Sun |
Re: MySQL/dbexpress Frage - Zellinhalte in Variablen speiche
Hallo,
so sollte es funktionieren:
Delphi-Quellcode:
Wie Du siehst, habe ich Deine Querys ein wenig modifiziert.
var tmp:Integer;
begin with QRead do begin Close; CommandText:= 'SELECT id FROM data_item WHERE (name=:Name)'; Parameters.ParamByValue('Name').Value:=Edit1.Text; Open; tmp:=Fields[0].AsInteger; // <-- Deine zwischengespeicherte ID end; // with qRead //----Hier---- with QDo do begin Active:=false; CommandText:= 'INSERT INTO inventory'+#13#10+ '(charid, backpack_number, itemnumber, itemid, inventoryslot, durability, count,'+ ' refine, element, refine_element)'+#13#10+ 'VALUES '+ '(:charid, :backpack_number, :itemnumber, :itemid, :inventoryslot, :durability, :count,'+ ' :refine, :element, :refine_element)'; with Parameters do begin ParamByName('charid').Value:=Edit5.Text; ParamByName('backpack_number').Value:=-1; ParamByName('itemnumber').Value:=50; ParamByName('itemid').Value:=tmp; ... ... ParamByName('refine_element').Value:=10; end; // with Parameters ExecSQL; end; // with QDo end; Gewöhne Dir ausserdem an, die Querys nicht mit Stringbasteleien zusammen zu bauen, sondern benutze Parameter. Die Query wird übersichtlichter und Du kannst die Werte im originalen Datentyp übergeben. |
Re: MySQL/dbexpress Frage - Zellinhalte in Variablen speiche
Danke für die Hilfe.
Leider hat es nur teilweise funktioniert. Er hat die Parameters nicht akzeptiert, die hab ich dann auch Params umgewandelt. Aus irgendeinem Grund kennt der auch bei QRead das Params.ParamByValue nicht. Ich habe bei der Hilfe die ParamValues gesehen, geht die auch? Ich hab folglich die ParamByValue auf ParambyName umgewandelt. Dann wenn ich das Programm starte gibt er mir den Fehler aus: ExeptionKlasse EDatabaseError mit der Meldung'QRead: Parameter 'Name' nicht gefunden.'. Könntet ihr mir vllt noma helfen? MfG Sun |
Re: MySQL/dbexpress Frage - Zellinhalte in Variablen speiche
Hallo,
warum wir überhaupt Params benutzt ? Geht nicht auch folgendes ?
Delphi-Quellcode:
oder
with QRead do
begin Close; CommandText:= 'SELECT id FROM data_item WHERE (name=:Name)'; ParamByValue('Name').Value:= Edit1.Text; Open; tmp:=Fields[0].AsInteger; // <-- Deine zwischengespeicherte ID end; // with qRead
Delphi-Quellcode:
with QRead do
begin Close; CommandText:= 'SELECT id FROM data_item WHERE (name=:Name)'; ParamByValue('Name').AsString:= Edit1.Text; Open; tmp:=Fields[0].AsInteger; // <-- Deine zwischengespeicherte ID end; // with qRead Heiko |
Re: MySQL/dbexpress Frage - Zellinhalte in Variablen speiche
Liste der Anhänge anzeigen (Anzahl: 1)
Also ich weiß nicht weiter..
Ich hab euch mal ein Bild gemacht. So siehts in meinem Compiler aus. Höchstwarscheinlich bin ich die Fehlerquelle. |
Re: MySQL/dbexpress Frage - Zellinhalte in Variablen speiche
Geht es so?
Delphi-Quellcode:
with QRead do
begin Close; CommandText:= 'SELECT id FROM data_item WHERE (name=:Name)'; ParamByName('Name').Value:= Edit1.Text; Open; if not EOF then tmp:=FieldByName('id').AsInteger // <-- Deine zwischengespeicherte ID else ShowMessage('Kein Datensatz vorhanden'); end; // with qRead |
Re: MySQL/dbexpress Frage - Zellinhalte in Variablen speiche
Hallo,
ParamByValue durch ParamByName ersetzen. Wieder ein Fall, wo das with bei der Code-Vervollständigung stört. Heiko |
Re: MySQL/dbexpress Frage - Zellinhalte in Variablen speiche
Hab ich doch ;)
|
Re: MySQL/dbexpress Frage - Zellinhalte in Variablen speiche
Hallo,
nicht du ;) Was bringt es, wenn der TE es nicht macht !!! Heiko |
Re: MySQL/dbexpress Frage - Zellinhalte in Variablen speiche
ja schon das funktioniert das hatte ich auch schon geändert, aber der erkennt trotzdem Den Parameter Name in QRead nicht :(
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:06 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