Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi MySQL/dbexpress Frage - Zellinhalte in Variablen speichern (https://www.delphipraxis.net/144561-mysql-dbexpress-frage-zellinhalte-variablen-speichern.html)

RaisinSun 10. Dez 2009 19:14

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:
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;
So und hier möchte ich die Variable einlesen. QRead gibt ja nur ein Feld und einen Datensatz aus.
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

Gollum 14. Dez 2009 11:56

Re: MySQL/dbexpress Frage - Zellinhalte in Variablen speiche
 
Hallo,

so sollte es funktionieren:
Delphi-Quellcode:
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;
Wie Du siehst, habe ich Deine Querys ein wenig modifiziert.
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.

RaisinSun 15. Dez 2009 07:40

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

hoika 15. Dez 2009 08:09

Re: MySQL/dbexpress Frage - Zellinhalte in Variablen speiche
 
Hallo,

warum wir überhaupt Params benutzt ?

Geht nicht auch folgendes ?

Delphi-Quellcode:
  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
oder

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

RaisinSun 15. Dez 2009 13:49

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.

DeddyH 15. Dez 2009 13:53

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

hoika 15. Dez 2009 13:58

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

DeddyH 15. Dez 2009 13:59

Re: MySQL/dbexpress Frage - Zellinhalte in Variablen speiche
 
Hab ich doch ;)

hoika 15. Dez 2009 14:00

Re: MySQL/dbexpress Frage - Zellinhalte in Variablen speiche
 
Hallo,

nicht du ;)

Was bringt es, wenn der TE es nicht macht !!!


Heiko

RaisinSun 15. Dez 2009 18:53

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:03 Uhr.
Seite 1 von 2  1 2      

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