| Autor |
Beitrag |
sims1122
Hält's aus hier
Beiträge: 6
|
Verfasst: 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
      
Beiträge: 806
Erhaltene Danke: 17
Win10
Delphi Alexandria 11.2 Patch 1
|
Verfasst: 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
      
Beiträge: 648
Erhaltene Danke: 85
WIN 2000, WIN XP
D5 Prof
|
Verfasst: 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 
Hält's aus hier
Beiträge: 6
|
Verfasst: 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
      
Beiträge: 660
Erhaltene Danke: 21
Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
|
Verfasst: 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:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure erzeugeClientdataSet; begin cds := TClientDataSet.Create(Self); with cds, Fielddefs do begin Add('IdentNr', ftInteger); for i := 1 to maxBauteilnr do Add('Bauteilnr' + IntToStr(i), ftInteger); CreateDataSet; end; ds_Anzeige.DataSet := cds; end; |
dann query lesen und Abfrageergebnis in cds übertragen
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
      
Beiträge: 6395
Erhaltene Danke: 149
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Mi 29.09.10 14:21
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
      
Beiträge: 648
Erhaltene Danke: 85
WIN 2000, WIN XP
D5 Prof
|
Verfasst: 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
|
|
|