Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Problem mit SQL Abfrage (https://www.delphipraxis.net/192198-problem-mit-sql-abfrage.html)

Justin 28. Mär 2017 09:08

Delphi-Version: 2007

Problem mit SQL Abfrage
 
Sehr geehrte Delphi Praxis Community,

wir sollen in der Schule ein Programm schreiben, womit man per Klick auf ein Button Einträge aus der Listbox in eine dbgrid anzeigen zu lassen.
Hierbei sind die listbox einträge identitäten, die sich auf eine db basieren..
Hierbei soll die ID den zugehörigen Name und Vorname anzeigen, die den Status 'Ja' besitzen.

Dazu mein bisheriger Quellcode:
Delphi-Quellcode:
procedure TForm2.Button2Click(Sender: TObject);
 var x:string;
begin
adoquery1.connection:=adoconnection1;
adotable2.recno:=listbox1.itemindex+1;
adoquery1.connection:=adoconnection1;
adoquery1.close;
adoquery1.active:=false;
adoquery1.sql.clear;
adoquery1.SQL.add('SELECT a.Name, a.Vorname FROM Arbeitnehmer as a, Berufsgruppen as b Where a.bgident="'+adotable2.fieldvalues['BGIdent']+'";');
adoquery1.open ;
adoquery1.active:=true;




end;

procedure TForm2.FormCreate(Sender: TObject);
var i:integer;
begin
listbox1.clear;
for i := 1 to adotable2.RecordCount do
  begin
   listbox1.itemindex:=i;
   adotable2.RecNo:=i;
   listbox1.Items.Add(adotable2.fieldvalues['BGIdent']);
  end;
So wie der Code ist, klappt er nicht richtig, da im db grid nichts angezeigt wird..

Ich hoffe auf etwas Hilfe, denn ich bin schon langsam am verzeifeln.

LG Justin

nahpets 28. Mär 2017 09:22

AW: Problem mit SQL Abfrage
 
Delphi-Quellcode:
procedure TForm2.Button2Click(Sender: TObject);
 var x:string;
begin
adoquery1.connection:=adoconnection1;
adotable2.recno:=listbox1.itemindex+1;
// adoquery1.connection:=adoconnection1; -- doppelt kann entfallen.
adoquery1.close;
// adoquery1.active:=false; -- mit Close bereits geschlossen, kann entfallen
adoquery1.sql.clear;
adoquery1.SQL.add('SELECT a.Name, a.Vorname FROM Arbeitnehmer as a, Berufsgruppen as b Where a.bgident="'+adotable2.fieldvalues['BGIdent']+'";');
adoquery1.open ;
// adoquery1.active:=true; -- mit Open bereits geöffnet, kann entfallen
SQL-Code:
SELECT a.Name, a.Vorname
FROM
  Arbeitnehmer as a,
  Berufsgruppen as b
Where a.bgident="BGIdent"
In der Where-Bedingung fehlt eine Verbindung zwischen Arbeitnehmer und Berufsgruppen.
SQL-Code:
SELECT a.Name, a.Vorname
FROM
  Arbeitnehmer as a,
  Berufsgruppen as b
Where a.SpalteDieAuchInBVorkommt = b.SpalteDieAuchInAVorkommt
and a.bgident="BGIdent"
Gibt es in der Tabelle Arbeitnehmer mit Sicherheit den Wert, der in adotable2.fieldvalues['BGIdent'] ausgewählt wurde?

mkinzler 28. Mär 2017 09:27

AW: Problem mit SQL Abfrage
 
Zuersteinmal würde ich den redundanten Code entfernen und Parameter verwenden.

Global Abfrage deklarieren und vorbereiten:
Delphi-Quellcode:
adoquery1.connection:=adoconnection1;
adoquery1.SQL.Text := 'SELECT a.Name, a.Vorname FROM Arbeitnehmer as a, Berufsgruppen as b Where a.bgident=:bgident';
Was steht in BGIdent? (Welcher Typ)

hoika 28. Mär 2017 09:31

AW: Problem mit SQL Abfrage
 
Hallo,

Zitat:

wir sollen in der Schule ein Programm schreiben, womit man per Klick auf ein Button Einträge aus der Listbox in eine dbgrid anzeigen zu lassen.
Fiese Aufgabenstellung, wenn es wirklich ein DBGrid sein soll.

Ein DBGrid zeigt immer den Inhalt eines DataSets (TXXXTable, TXXXQuery, TClientDataSet) an.
Wenn auf einen Button-Klick also etwas im DBGrid angezeigt werden soll,
muss es in die TXXXTable bzw. ins TClientDataSet.

Ein
DBGrid.DataSource.DataSet.Close;
DBGrid.DataSource.DataSet.Open;
sorgt danach für die Neuanzeige.

Wenn der Lehrer nichts von TTable oder TQuery erzählt hat, würde ich ein TClientDataSet benutzen.
Nachteil: Das Speichern ist schwerer.
Hat er auch was von "eingegebene Daten beim Start wieder anzeigen gesagt"?

p80286 28. Mär 2017 11:00

AW: Problem mit SQL Abfrage
 
So wie ich es verstanden habe, befinden sich in der Listbox Daten (bgintent ?), nach deren Auswahl eine Abfrage mit dem gewählten Datum als Parameter gestartet wird, deren Ergebnis im DB-Grid angezeigt wird.

Ich kann mich allerdings auch sehr irren.

Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:28 Uhr.

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