Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Daten aus einem MySQL Server in Editfeld ausgeben (https://www.delphipraxis.net/92123-daten-aus-einem-mysql-server-editfeld-ausgeben.html)

Ykcim 14. Mai 2007 22:59

Datenbank: MySQL • Version: 5 • Zugriff über: MySQL.pas

Daten aus einem MySQL Server in Editfeld ausgeben
 
Hallo zusammen,

ich bin en absoluter Newby und brauche mal dringend Eure Hilfe.
Ich möchte die Daten aus einer SQL Abfrage in ein Editfeld zurückgeben. Also, wenn beispielweise ein Lieferant ausgewählt wird, sollen alle anderen Edit Felder ausgefüllt werden. Also über ein "Select" Query und dann einem Edit-Feld eine bestimmte Zelle zuweisen. Ich habe jetzt schon stundenlang im Internet gesucht - ohne Erfolg... Ach ja, zu meinem ersten Satz: Sicherleich könntet Ihr mir fast alle so antworten, dass ich KEIN Wort verstehe - ich bin ein Newby. Bitte helft mir - ich komme nicht weiter...

Vielen Dank

Mackhack 15. Mai 2007 06:25

Re: Daten aus einem MySQL Server in Editfeld ausgeben
 
Hi,

ist zwar mit einer ADS Datenbanke mal entstanden aber das sollte dir vlt. weiterhelfen. Ist auch nur ein Ausschnitt!

Delphi-Quellcode:
...
with DatenModul.AdsQuery1 do
  begin
    Active := False;
    SQL.Text := 'SELECT * FROM RawMaterial WHERE Number=' + IntToStr(ANumber);
    Active := True;
    EdtBarcode.Text := FieldByName('BarCode').AsString;
    EdtTitle.Text := FieldByName('Benennung01').AsString;
    EdtTitle2.Text := FieldByName('Benennung02').AsString;
    CatId1 := FieldByName('Kategorie_Zahl').AsString;
    CatId2 := FieldByName('Kategorie_Zahl2').AsString;
    if ( FieldByName('Hersteller_Nr').AsInteger = -1 ) then
    begin
      EdtSupplierNo.Text := '';
    end
    else
    begin
    ...
    end;
  end;
end;

Ykcim 15. Mai 2007 07:41

Re: Daten aus einem MySQL Server in Editfeld ausgeben
 
Vielen Dank für die Antwort!

Leider hilft es mir noch nicht weiter. Ich würde so etwas wie die nachstehende FillGrid Procedure benötigen...
Aus Deinem Code kann ich nicht erkennen, wie DU die Daten aus der DB holst bzw. dem Edit-Feld dann zuordnest. Bin wirklich um die Lösung verlegen!

Nachfolgend der FillGrid Code, mit dem ein StringGrid mit Daten "befüllt" wird:

Delphi-Quellcode:
procedure FillGrid(SG: TStringGrid; Cols: TCols; Rows: TRows);
var
  i, j        : Integer;
begin
  SG.ColCount := 0;
  SG.RowCount := 0;
  if Assigned(Rows) then
  begin
    // Wir brauchen eine Zeile mehr für die Spaltenüberschriften
    SG.RowCount := length(Rows[0]) + 1;
    SG.ColCount := length(Cols);
    SG.FixedRows := 0;
    // Spaltenüberschriften in die erste Zeile schreiben
    for i := 0 to length(Cols) - 1 do
    begin
      SG.Cols[i].Add(Cols[i]);
      SG.Cells[i, 0] := Cols[i];
    end;
    // zwei-dimensionales Zeilen-Array in den Zellen ausgeben
    for i := 0 to length(Cols) - 1 do
    begin
      for j := 0 to length(Rows[0]) - 1 do
      begin
        SG.Cells[i, j + 1] := Rows[i, j];
      end;
    end;
  end;
end;
Ich hatte versucht, diese Procedure anzupassen, in dem ich folgende Änderungen vorgenommen hatte:


Delphi-Quellcode:
procedure FillGrid(ED : TEdit; Cols: TCols; Rows: TRows); //Damit ich ein Edit-Feld übergeben kann
var
  i, j        : Integer;
  SG: TStringGrid;   // Damit die eigentliche Procedure normal läuft und ich aus SG die
                      // entsprechende Werte holen kann...
begin
  SG.ColCount := 0;
  SG.RowCount := 0;
  if Assigned(Rows) then
  begin
    // Wir brauchen eine Zeile mehr für die Spaltenüberschriften
    SG.RowCount := length(Rows[0]) + 1;
    SG.ColCount := length(Cols);
    SG.FixedRows := 0;
    // Spaltenüberschriften in die erste Zeile schreiben
    for i := 0 to length(Cols) - 1 do
    begin
      SG.Cols[i].Add(Cols[i]);
      SG.Cells[i, 0] := Cols[i];
    end;
    // zwei-dimensionales Zeilen-Array in den Zellen ausgeben
    for i := 0 to length(Cols) - 1 do
    begin
      for j := 0 to length(Rows[0]) - 1 do
      begin
        SG.Cells[i, j + 1] := Rows[i, j];
        ED.Text:=SGCells[0,0]; //Um jetzt im übergebenden Edit-Feld EINEN Wert zu setzten...
      end;
    end;
  end;
end;
Vielen Dank Euch im Voraus

marabu 15. Mai 2007 08:40

Re: Daten aus einem MySQL Server in Editfeld ausgeben
 
Hallo,

so wird das nichts. Du kannst nicht einfach SG zu einer lokalen Variable machen und dann ohne Initialisierung auf diese zugreifen. Das willst du wahrscheinlich auch gar nicht. Auf deiner Form hast du doch schon ein Grid. Darin möchtest du Datensätze aus einer MySQL-Tabelle anzeigen?

Und über ein Edit möchtest du ein SELECT-Statement eingeben, welches ausgeführt werden soll um die Daten für das Grid zu liefern? Oder kannst du dein Vorgaben besser beschreiben?

Grüße vom marabu

Ykcim 15. Mai 2007 09:26

Re: Daten aus einem MySQL Server in Editfeld ausgeben
 
Hallo Marabu,

vielen Dank für Deine Antwort! Ich merke schon, dass ich mich mit meiner Ahnungslosigkeit gerade oute... :-)

Ich habe ein Form, in dem KEIN StringGrid vorhanden ist. Ich möchte Edit-Felder als Ausgabewerkzeug nutzen. Zum Besispiel wenn ich einen Lieferanten auswähle, dass die Edit-Felder Straße, PLZ, Ort, Branche etc. ausgefüllt werdenm mit Daten aus der DB. Dabei geht es mir nicht um das Query, sondern um die Schnittstelle zwischen MySQL und Delphi, mit der ich Edit-Felder befüllen.

Ich hoffe, dass ich mich verständlich ausgedrückt habe.

Vielen Dank im Voraus

Pfoto 15. Mai 2007 10:39

Re: Daten aus einem MySQL Server in Editfeld ausgeben
 
Hi!

ich habe auch mal ein kleines Programm geschrieben, das sich mit einer
mySQL-DB 4.1 verbindet; dazu verwendete ich eine mysql.pas, die eine
Schnittstelle zur libmySQL.dll liefert.
(mysql.pas wurde von Matthias Fichtner übersetzt, zu finden bei torry.net etc.)


Nachdem du diese Unit eingebunden hast, kannst du folgendermaßen die
Verbindung herstellen:


Delphi-Quellcode:
{ liest die Einstellungen aus einer INI-Datei }

procedure TFormMain.Connect;
var
  Ini: TIniFile;
begin
  try
    Ini:= TIniFile.Create(extractfilepath(Application.ExeName) + IniFilename);
    with mySQLDB do
    begin
      FMysql.Host := Ini.ReadString('Connection', 'Host', 'localhost');
      FMysql.port := Ini.ReadInteger('Connection', 'Port', 3306);
      FMysql.user := Ini.ReadString('Connection', 'User', 'root');
      FMysql.Db := Ini.ReadString('Connection', 'DB', 'DemoDB');
      FMysql.password := Ini.ReadString('Connection', 'Password', '');
      FMysql.UnixSocket := '';
      FMysql.UseNamedPipe := false;
      FMysql.UseSSL := false;
      FMysql.Compress := true;
      FMysql.TrySockets := false;
    end;
  finally
    Ini.Free;
  end;
end;
Dann eine Abfrage erstellen und das das Ergebnis wie gewünscht verarbeiten:
Delphi-Quellcode:

      if FMysql.Connect then
      begin
        { hier erfolgt die SELECT-Abfrage }
        with FResult do
        begin
          { Das Ergebnis in die Edit-Felder füllen }
          edFirmenname.Text:= FieldByName('Firmenname').AsString;
          { und weitere Felder ... } 
        end;
      end else
        ShowMessage('Fehler beim Verbinden: '+FMysql.LastError);
Ich hatte damals auch ein Tutorial dafür im Internet gefunden,
weiß die Adresse aber leider nicht mehr. Suche einfach mal...


Gruß
Pfoto

Ykcim 15. Mai 2007 21:19

Re: Daten aus einem MySQL Server in Editfeld ausgeben
 
Hallo Photo,

vielen Dank für Deine Antwort!

Eine Verbindung zu MySQL habe ich. Wenn ich eine Abfrage ausführe, bekomme ich auch die Ergebnisse in einem StringGrid ausgegeben(Die Procedure hatte ich gefunden). Was ich benötige und leider noch nicht gefunden habe, ist die Möglichkeit, ein einzelnen Wert, den meine Abfrage zurückliefert in ein Edit-Feld zu schreiben.

Das müsste doch für die meisten ganz einfache Routine sein. Könnt Ihr mir bitte weiterhelfen? :coder2:

Danke

Mackhack 15. Mai 2007 21:33

Re: Daten aus einem MySQL Server in Editfeld ausgeben
 
Hast du dir eigentlich mal meinen Beitrag (#2) angesehen? Da schreibe ich in Editfelder rein!!!

Ykcim 15. Mai 2007 21:41

Re: Daten aus einem MySQL Server in Editfeld ausgeben
 
HI Mackhack,

ich hatte mir DeinenBeitrag durchgelesen, aber leider nicht ganz nachvollziehen könne (ich Newby). Bitte sag mir doch, was BarCode ist? Heißt so die Spalte, der SQL DB?
Delphi-Quellcode:
EdtBarcode.Text := FieldByName('BarCode').AsString;
Ich habe es ausprobiert, aber ich bekomme die Fehlermeldung: Undeclared identifer: fieldbyname

Wo habe ich nicht zu ende gedacht?

Danke für Deine Gedult

Mackhack 16. Mai 2007 01:36

Re: Daten aus einem MySQL Server in Editfeld ausgeben
 
Hi,

also das .AsString ist eine Property vom TADSQuery was du oben siehst zwischen dem with und do. Das with do habe ich deshalb damit ich nicht vor jedem FieldByParam DatenModul.AdsQuery1 schreiben muss sondern Code und damit Tipparbeit sparen kann. Also zieh mal eine TQuery auf deine Form und dann sollte das klappen!

Wenn nicht frag einfach nochmal nach dazu sind wir ja in der DP!


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