![]() |
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:
So wie der Code ist, klappt er nicht richtig, da im db grid nichts angezeigt wird..
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; Ich hoffe auf etwas Hilfe, denn ich bin schon langsam am verzeifeln. LG Justin |
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:
In der Where-Bedingung fehlt eine Verbindung zwischen Arbeitnehmer und Berufsgruppen.
SELECT a.Name, a.Vorname
FROM Arbeitnehmer as a, Berufsgruppen as b Where a.bgident="BGIdent"
SQL-Code:
Gibt es in der Tabelle Arbeitnehmer mit Sicherheit den Wert, der in adotable2.fieldvalues['BGIdent'] ausgewählt wurde?
SELECT a.Name, a.Vorname
FROM Arbeitnehmer as a, Berufsgruppen as b Where a.SpalteDieAuchInBVorkommt = b.SpalteDieAuchInAVorkommt and a.bgident="BGIdent" |
AW: Problem mit SQL Abfrage
Zuersteinmal würde ich den redundanten Code entfernen und Parameter verwenden.
Global Abfrage deklarieren und vorbereiten:
Delphi-Quellcode:
Was steht in BGIdent? (Welcher Typ)
adoquery1.connection:=adoconnection1;
adoquery1.SQL.Text := 'SELECT a.Name, a.Vorname FROM Arbeitnehmer as a, Berufsgruppen as b Where a.bgident=:bgident'; |
AW: Problem mit SQL Abfrage
Hallo,
Zitat:
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"? |
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 20:55 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