![]() |
SQL-Abfrage
Hi,
irgendwie stehe ich auf dem Schlauch: Ich habe eine Tabelle in einer Access-Datenbank die wie folgt aussieht: Name, Geburtsdatum1, PartnerName, GeburtsdatumPartner, Straße, Hausnummer, PLZ, Ort usw. Ich brauch jetzt eine SQL-Abfrage, welches mir den Namen und das Geburtsdatum anzeigt und zwar untereinander. Beispiel: Datensätze in der obigen Tabelle sehen so aus: Müller, 01.01.1970,Meier,23.01.1966,Blastraße,5,80498,Münc hen Schmidt,30.06.1960,Schmitz,02.05.1986,Wiesenstraße ,5,40876 Köln Das Ergebnis soll dann so aussehen: Name Geburtsdatum Müller 01.01.1970 Meier 23.01.1966 Schmidt 30.06.1960 Schmitz 02.05.1986 Kann mir da einer weiterhelfen, wie das SQL-Statement aussehen muß. Vielen Dank Das S |
Re: SQL-Abfrage
Simples SELECT:
Code:
Die eckigen Klammern rühren daher, daß Name ein Schlüsselwort in SQL darstellt und du MS Access verwendest. Willst du Doppelte Anführungszeichen verwenden, mußt du die Schreibweise beachten.
SELECT [Name], Geburtsdatum1 FROM <Tabellenname> ORDER BY [Name]
Grüße Mikhal |
Re: SQL-Abfrage
Ähm..ich schätze mal
SQL-Code:
Greetz
SELECT Name, Geburtsdatum FROM <Tabellenname>
alcaeus [add]F***..zu langsam, ich sollte während der Arbeit nicht Kaffee trinken :mrgreen:[/add] |
Re: SQL-Abfrage
Für die Darstellung der Daten bist du selber verantwortlich. Eine Abfrage liefert dir nur eine Menge zurück. Wie du das dann darstellst, ist deine Sache.
|
Re: SQL-Abfrage
Oder eher:
SQL-Code:
und dann jeweils Name und Geburtsdatum1 in einer Zeile und PartnerName und GeburtsdatumPartner in der nächsten Zeile ausgeben.
SELECT [Name],Geburtsdatum1,PartnerName,GeburtsdatumPartner FROM <Tabellenname>
|
Re: SQL-Abfrage
Wie die Abfrage funktioniert, weiß ich. Aber wie kann ich im Grid die Ansicht eben untereinander gestalten
|
Re: SQL-Abfrage
Query mit einem DataSet verbinden, DBGrid mit eben diesem Dataset verbinden, Query.Open...
Grüße Mikhal |
Re: SQL-Abfrage
:wall: Also, entweder ich bin ein bißchen doof, oder ich habe mein Problem schlecht beschrieben.
Gut, das habe ich gemacht wie du gerade geschrieben hast, dann habe ich alle Felder in einer Zeile. Wie kann ich die Felder aber untereinander packen. Grüße Das S |
Re: SQL-Abfrage
Also ich habe dein Problem verstanden.
Wenn deine Datenbank "Union" kennt, kannst du das lösen. Dann könntest du aber noch ein Sortierungsproblem bekommen, weil dann die Partner nicht mehr direkt untereinander stehen. Aber auch das kann man tricksen. Ansonsten musst du die Darstellung der Daten schon selbst in die Hand nehmen. Dafür wäre dann das TStringGrid eine Lösung. |
Re: SQL-Abfrage
Hallo,
wenn ich das richtig verstanden habe möchte Das S aus einem Datensatz zwei machen. Ich glaube nicht das das mit TQuery, TDatasource und TDBGrid funktioniert. Warum sollte es denn überhaupt funktionieren? Die Datensatzstruktur verstößt gegen alle Regeln der Normalisierung, die mir gerade in den Sinn kommen. Wenn Du die Datensatzstruktur nicht ändern kannst, wird Dir wohl nichts anderes übrigbleiben, als die Abfrage auf ein objektrelationales Modell zu mappen und die Ausgabe selber zu erzeugen. D.h. bilde die Datensatzstruktur mit einem Objekt ab und verwalte die Objekte mit TList. |
Re: SQL-Abfrage
Vielen Dank, genau das habe ich gemeint
|
Re: SQL-Abfrage
Sollte das nicht ganz einfach so zu lösen sein?
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var row : Integer; begin Query1.Close; Query1.SQL.Text := 'SELECT [Name], Geburtsdatum1,PartnerName, GeburtsdatumPartner' + + #10+ 'FROM <Tabellenname> ORDER BY [Name]'; Query1.Open; StringGrid1.RowCount := Query1.RecordCount + StringGrid1.FixedRows; row := 1; While not (Query1.Eof) do begin StringGrid1.Cells[1,row] := Query1.FieldByName ('name').AsString; StringGrid1.Cells[2,row] := Query1.FieldByName ('Geburtsdatum1').AsString; Inc (row); StringGrid1.Cells[1,row] := Query1.FieldByName ('PartnerName').AsString; StringGrid1.Cells[2,row] := Query1.FieldByName ('GeburtsdatumPartner').AsString; Inc (row); Query1.Next; end; end; |
Re: SQL-Abfrage
Moin,
ich kenn jetzt ACCESS nicht sehr gut, habe aber vor Kurzem hier gelesen, dass ACCESS auch Stored Procedures hat. In dem Falle, wäre das 'ne Möglichkeit. Unter Firebird würde das in etwa so aussehen :
SQL-Code:
Das ganze kann dann mit einem
CREATE PROCEDURE SP10
RETURNS ( OUT_NAME VARCHAR (50), OUT_DATUM DATE) AS declare variable tmp_nname varchar (50); declare variable tmp_ndatum date; declare variable tmp_pname varchar (50); declare variable tmp_pdatum date; BEGIN /* Auslesen aller Records in tmp-variablen */ for select nname, ndatum,pname,pdatum from tabelle1 into :tmp_nname, :tmp_ndatum, :tmp_pname, :tmp_pdatum do begin /* für jeden record die Ausgabe-variablen mit Name und Datum belegen und den Wert mit suspend ausgeben */ out_name = :tmp_nname; out_datum = :tmp_ndatum; suspend; /* für jeden record die Ausgabe-variablen mit Partnernamen und Datum belegen und den Wert mit suspend ausgeben */ out_name = :tmp_pname; out_datum = :tmp_pdatum; suspend; end END
SQL-Code:
ausgelesen werden.
select * from SP10
Tschüss, Lutz |
Re: SQL-Abfrage
Welche Delphi-Version hast Du?
Bei Delphi 7 Arch geht das so: * ADO-Connection auf Access-Datenbank legen * ADO-Query mit ADO-Connection verbinden * SQL-Code bei ADOQuery schreiben (z.b. select * from adressen) * DataSource mit ADO-Query verbinden * DBGrid mit DataSource verbinden * Doppelklick auf DBGrid * Eigene Columns definieren und bei Fieldname eben die entsprechenden Felder auswählen Du kannst aber das SQL-Statement auch so legen, daß eben nur die gewünschten Felder zurückgeliefert werden - dann füllt sich die DBGrid von alleine. Für Sortierung etc. eben ORDER etc. verwenden. Für Gruppierungen GROUP BY. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:38 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