Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL-Abfrage (https://www.delphipraxis.net/39499-sql-abfrage.html)

Das S 3. Feb 2005 15:04


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

mikhal 3. Feb 2005 15:14

Re: SQL-Abfrage
 
Simples SELECT:
Code:
SELECT [Name], Geburtsdatum1 FROM <Tabellenname> ORDER BY [Name]
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.

Grüße
Mikhal

alcaeus 3. Feb 2005 15:15

Re: SQL-Abfrage
 
Ähm..ich schätze mal

SQL-Code:
SELECT Name, Geburtsdatum FROM <Tabellenname>
Greetz
alcaeus

[add]F***..zu langsam, ich sollte während der Arbeit nicht Kaffee trinken :mrgreen:[/add]

Luckie 3. Feb 2005 15:17

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.

Sanchez 3. Feb 2005 15:22

Re: SQL-Abfrage
 
Oder eher:

SQL-Code:
SELECT [Name],Geburtsdatum1,PartnerName,GeburtsdatumPartner FROM <Tabellenname>
und dann jeweils Name und Geburtsdatum1 in einer Zeile und PartnerName und GeburtsdatumPartner in der nächsten Zeile ausgeben.

Das S 4. Feb 2005 06:52

Re: SQL-Abfrage
 
Wie die Abfrage funktioniert, weiß ich. Aber wie kann ich im Grid die Ansicht eben untereinander gestalten

mikhal 4. Feb 2005 06:55

Re: SQL-Abfrage
 
Query mit einem DataSet verbinden, DBGrid mit eben diesem Dataset verbinden, Query.Open...

Grüße
Mikhal

Das S 4. Feb 2005 07:03

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

Jasocul 4. Feb 2005 07:13

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.

Jens Schumann 4. Feb 2005 07:17

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.

Das S 4. Feb 2005 07:19

Re: SQL-Abfrage
 
Vielen Dank, genau das habe ich gemeint

Sharky 4. Feb 2005 07:52

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;

lume96 4. Feb 2005 08:13

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:
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
Das ganze kann dann mit einem
SQL-Code:
select * from SP10
ausgelesen werden.

Tschüss,
Lutz

Catbytes 4. Feb 2005 08:30

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 18:38 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