Autor Beitrag
sims1122
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Di 28.09.10 11:50 
Moin,

es stellt sich folgendes Problem:

Ich lese in meinem Programm eine Nummer ein, anhand derer ich eine SQL-Query mache, und gebe die Ergebnisse in einem DBGrid aus. So soll es ja auch sein, so wars erdacht.

Jetz soll ich das ganze aber für mehrere Nummern machen. Sprich, ich lese ein Memo ein, habe dann da die Nummern, und soll die Ergebnisse der Querys(ist immer nur ein Wert) dann quasi in Matrixform darstellen.

Gibt es da eine Möglichkeit, in ein DB-Grid die Results von nacheinander getätigten Querys einzufügen? .add oder irgendwie sowas?

Danke und Gruß

Max
JoelH
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 806
Erhaltene Danke: 17

Win10
Delphi Alexandria 11.2 Patch 1
BeitragVerfasst: Di 28.09.10 12:05 
hmm,

kommt jetzt auch auf den SQL-Dalekt an, aber du könntest zB. mit Union arbeiten und die Querys "zusammenkitten". Was aber wohl eher eh nicht nötig ist. Denn so wie es sich für mich darstellt selektierst du anscheinend nach IDs , also einer bestimmten Spalte der Datenbanktabelle. Von daher kannst du doch einfach in der WHERE Kalsues der Query alle IDs die in deinerm Memo stehen auf einmal auslesen, oder übersehe ich was?

_________________
mfg. Joel
Tranx
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 648
Erhaltene Danke: 85

WIN 2000, WIN XP
D5 Prof
BeitragVerfasst: Di 28.09.10 13:30 
Wie wäre es mit der Arbeit in 2 Tabellen:

Tabelle 1 z.B. Feld "ID" als AutoNr und Feld "Daten" als Text
Tabelle 2 Feld "Nr" als AutoNummer und "ID" als Integer

Dann ist die SQL-Abfrage der TQuery wie folgt:

SELECT `Tabelle2`.`ID`, `Tabelle1`.`Daten`
FROM `Tabelle1`, `Tabelle2`
WHERE `Tabelle1`.`ID` = `Tabelle2`.`ID`

Dann ist in Tabelle 1 alles Gespeichert, was Du an Daten hast
und in Tabelle2 alles, was Du auswählen willst.

Das TDBGrid hat dann als Quelle die TQuery und in der SQL-Eigenschaft der TQuery schreibst Du oben angegebene SQL-Abfrage. Das sollte funktionieren. Du musst natürlich die Tabellen in ihrer Struktur und Namen vorher festlegen und die SQL-Abfrage dahingehend anpassen.
sims1122 Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Mi 29.09.10 10:44 
Die Sache ist, dass die Form der Darstellung explizit gewünscht ist. Klar könnte ich einfach mit den entsprechenden OR Statements alle Identnummern in die SQL-Query einfügen. Aber es geht darum, explizit für eine identnummer zu sehen, wo sie verbaut ist. Ein Beispiel, wies jetzt aussieht:

Aktuell ist die GUI so, dass einfach über dem Grid stumpf ein Label mit der Identnummer gefüllt ist, nach der man gerad sucht (ist ja eh immer nur die eine) und darunter ist dann halt das Grid, wo ebenso stumpf die Nummer der Bauteile aufgereiht sind, in der diese Identnummer verbaut ist. Diese Darstellung will ich jetzt halt variabel oft haben...
zuma
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 660
Erhaltene Danke: 21

Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
BeitragVerfasst: Mi 29.09.10 11:47 
Du könntest das DBG-Grid anstelle mit dem Query mit einem ClientDataSet verbinden.
Das ClientDataSet kannst du dir in der von dir gewünschten Struktur erzeugen und es dann mit deinen n-Abfragen nacheinander befüllen.

1. Ein ClientDataSet einbauen entweder per OI oder im Code manuell und dieses dann erzeugen. etwa so:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure erzeugeClientdataSet; // aufruf einmal bei Programmstart
begin
 cds := TClientDataSet.Create(Self); // CDS-Objekt erzeugen
 with cds, Fielddefs do    // Struktur festlegen
 begin
  Add('IdentNr', ftInteger); 
  for i := 1 to maxBauteilnr do  // maxBauteilnr entweder ermitteln oder festlegen
   Add('Bauteilnr' + IntToStr(i), ftInteger);
  CreateDataSet; // CDS mit der Struktur erzeugen
 end;
 ds_Anzeige.DataSet := cds; // Datasource mit cds verbinden
end;


dann query lesen und Abfrageergebnis in cds übertragen
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
...
 cds.Append;
 cds.FieldByName('IdentNr').AsInteger := IdentNr;
 i := 1;
 while not Query.Eof do
 begin
  cds.FieldByName('Bauteilnr' + IntToStr(i)).AsInteger := Query.FieldByName(xFeldNameBauteilnr).AsInteger;
  inc(i);
  Query.Next;
 end;
 cds.Post;
...

_________________
Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6395
Erhaltene Danke: 149

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Mi 29.09.10 14:21 
ausblenden SQL-Anweisung
1:
2:
3:
Select *
  from Tabelle
 where id in ( -Hier die Liste der Nummern mit Komma getrennt- )

Die Nummernliste musst du dir dann zusammenbasteln und ins SQL-Statement einbauen.
Tranx
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 648
Erhaltene Danke: 85

WIN 2000, WIN XP
D5 Prof
BeitragVerfasst: Mi 29.09.10 16:17 
Wenn ich es richtig verstanden habe, sieht das so aus:

TMemo: Nummern, nach denen gesucht werden soll.

TDBGrid: Ausgabe der gefundenen Nummern.

Wenn das so ist- soweit ich es verstehe - dann ist es doch ganz einfach. Schreibe die Eintragungen des TMemo - wie ein Antworter oben schrieb, in eine Tabelle. Dann nimmst Du meine SQL-Abfrage und dann ist es egal, welche Nummern in TMemo stehen, es werden immer aus der Grundtabelle, in der alle Datensätze stehen, nur diejenigen herausgesucht, die mit den in der Abfragetabelle gespeicherten übereinstimmen.

Beispiel: in der Grundtabelle stehen die Nummern 1 - 10.000 mit ensprechenden zusätzlichen Daten.
in der Abfragetabelle (= TMemo) sind z.B. 3, 20, 45, 100, 400, 900, 1034
Dann haben die Tabellen folgende Inhalte:
Grundtabelle: 10000 Datensätze mit 1 .. 10000 in dem Feld "ID"
Abfragetabelle: 7 Datensätze mit 3, 20, 45, 100, 400, 900, 1034 im Feld "ID"

mit der SQL-Abfrage

Select ID FROM
Grundtabelle
WHERE GrundTabele.ID = Abfragetabelle.ID

sollte genau das passieren, was - wenn ich es richtig versteh, Du beabsichtigst, nämlich nur die Ausgabe der im TMemo bzw. der daraus resultiwerenden Abfragetabelle gespeicherten Datensätze aus der Grundtabelle