Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL-Abfrage: Alle Werte aus einer Spalte (https://www.delphipraxis.net/50606-sql-abfrage-alle-werte-aus-einer-spalte.html)

DF.A 28. Jul 2005 09:55

Datenbank: Access • Version: 2000 • Zugriff über: ODBC

SQL-Abfrage: Alle Werte aus einer Spalte
 
Hi, ich möchte mit einer Abfrage alle Werte einer Spalte ausgeben die eine bestimmte Bedingung erfüllen. Bis jetzt mache ich das so:
Delphi-Quellcode:
select Feldname from Meta_Daten where Datenbankname = :SpeichernDatenbankname and Tabellenname = :SpeichernTabellenname
Das Problem ist aber, das ich hier nicht alle Ergebnisse geliefet bekomme sonder nur eins (es müsste aber mehrere sein). Weiß jemand was ich verändern muss um alle Werte die diese Abfrage als Ergbnis ausgibt bekomme. Wäre nett wenn mir jemand helfen könnte. MfG DF.A

barf00s 28. Jul 2005 10:04

Re: SQL-Abfrage: Alle Werte aus einer Spalte
 
kA was dieser ":" macht, wenn es sowas wie 'like "%foobar%"' iss? dann mus danach vllt noch son ":"

Jasocul 28. Jul 2005 10:06

Re: SQL-Abfrage: Alle Werte aus einer Spalte
 
Lässt du dir das Ergebnis in einem DBGrid anzeigen?
@barf00s:
Das sind die Doppelpunkte vor einem Parameter. Die habe nnichts mit "like" zu tun.

barf00s 28. Jul 2005 10:08

Re: SQL-Abfrage: Alle Werte aus einer Spalte
 
ahso

DF.A 28. Jul 2005 10:20

Re: SQL-Abfrage: Alle Werte aus einer Spalte
 
Ich lasse mir über nen String in nem Memo anzeigen. Es wird immer nur der letzte passenden Wert ausgegeben.

Jasocul 28. Jul 2005 10:32

Re: SQL-Abfrage: Alle Werte aus einer Spalte
 
Ich hasse diese Raterei.
Machst du das etwa so:
Delphi-Quellcode:
while not query1.eof do
begin
  memo1.text := query1.fieldbyname('feldname').asstring;
  query1.next;
end;
Ansonsten zeig doch mal ein bisschen Source.

DF.A 28. Jul 2005 10:36

Re: SQL-Abfrage: Alle Werte aus einer Spalte
 
ok, also so mach ichs

Delphi-Quellcode:
Datenbankname := edtDatenbankname.Text;
  Tabellenname := edtTabellenname.Text;
  qry_Speichern.ParamByName('SpeichernDatenbankname').AsString := Datenbankname;
  qry_Speichern.ParamByName('SpeichernTabellenname').AsString := Tabellenname;
  qry_Speichern.ExecSQL;
  qry_Speichern.Close;

  with qry_Speichern do begin
        open;
        while not eof do begin
          str := '';
          for j := 0 to Fields.Count -1 do begin
            str := str + ';' + Fields[j].AsString;
          end;
        next;
      end;
      dbMetaDaten.Close;
      dbMetaDaten.Open;
    end;
    Memo1.Text := str;
in der Abfrage steht halt das besagte SQL-Statement.

WoGe 28. Jul 2005 10:39

Re: SQL-Abfrage: Alle Werte aus einer Spalte
 
Hallo,

Zitat:

Zitat von DF.A
Delphi-Quellcode:
select Feldname from Meta_Daten where Datenbankname = :SpeichernDatenbankname and Tabellenname = :SpeichernTabellenname
Das Problem ist aber, das ich hier nicht alle Ergebnisse geliefet bekomme sonder nur eins

Wenn ich mich richtig erinnere, muss im ODBC doch die Datenbank schon angegeben werden?
Daraus folgt: Im Resultset kann nur ein Wert existieren

mfg
wo

Jasocul 28. Jul 2005 10:45

Re: SQL-Abfrage: Alle Werte aus einer Spalte
 
Zitat:

Zitat von DF.A
ok, also so mach ichs

Delphi-Quellcode:
Datenbankname := edtDatenbankname.Text;
  Tabellenname := edtTabellenname.Text;
  qry_Speichern.ParamByName('SpeichernDatenbankname').AsString := Datenbankname;
  qry_Speichern.ParamByName('SpeichernTabellenname').AsString := Tabellenname;
  qry_Speichern.ExecSQL;
  qry_Speichern.Close;

  with qry_Speichern do begin
        open;
        while not eof do begin
          str := ''; // Hihi. Musst du vor die while-Schleife schreiben.
          for j := 0 to Fields.Count -1 do begin
            str := str + ';' + Fields[j].AsString;
          end;
        next;
      end;
      dbMetaDaten.Close;
      dbMetaDaten.Open;
    end;
    Memo1.Text := str;
in der Abfrage steht halt das besagte SQL-Statement.


rwachtel 28. Jul 2005 10:48

Re: SQL-Abfrage: Alle Werte aus einer Spalte
 
Mit Deiner Fields-Schleife sprichst Du die alle einzelnen Spalten an. Du willst aber nur eine Spalte haben:

Delphi-Quellcode:
str := str + ';' + Fields[0].AsString;
In Deinem ersten Beispiel ist Deine Schleife dennoch korrekt, da Du ja nur eine Spalte abfragst. Da Du aber explizit nach allen Werten aus einer Spalte gefragt hast, dachte ich, es zumindest Deinem Wortlaut nach zu erwähnen. :wink:

Ausserdem löschst Du Deine String-Variable str in jedem Zeilendurchlauf, ohne damit irgendetwas getan zu haben.

So iterierst Du korrekt über alle Zeilen und ermittelst alle Werte der Spalte 0:

Delphi-Quellcode:
while not qrySpeichern.Eof do
begin
  str := str + ';' + qrySpeichern.Fields[0].AsString;
  qrySpeichern.Next;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:35 Uhr.
Seite 1 von 2  1 2      

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