AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit SQL Abfrage

Ein Thema von Justin · begonnen am 28. Mär 2017 · letzter Beitrag vom 28. Mär 2017
Antwort Antwort
Justin

Registriert seit: 23. Jan 2017
6 Beiträge
 
#1

Problem mit SQL Abfrage

  Alt 28. Mär 2017, 10:08
Delphi-Version: 2007
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
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#2

AW: Problem mit SQL Abfrage

  Alt 28. Mär 2017, 10:22
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?

Geändert von nahpets (28. Mär 2017 um 10:31 Uhr)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Problem mit SQL Abfrage

  Alt 28. Mär 2017, 10:27
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)
Markus Kinzler
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Problem mit SQL Abfrage

  Alt 28. Mär 2017, 10:31
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"?
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#5

AW: Problem mit SQL Abfrage

  Alt 28. Mär 2017, 12:00
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:59 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