AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Probleme mit SELECT

Ein Thema von Luciano · begonnen am 30. Mär 2004 · letzter Beitrag vom 30. Mär 2004
Antwort Antwort
Luciano

Registriert seit: 17. Dez 2003
Ort: Großostheim
126 Beiträge
 
Turbo Delphi für Win32
 
#1

Probleme mit SELECT

  Alt 30. Mär 2004, 11:09
Hi...

Ich habe dan ein Problem mit einer Select-Anfrage, die wie folgt aussieht

Delphi-Quellcode:
'( SELECT * FROM FAKTURIERUNG'+
' WHERE KONTRAKT_NR = '+QuotedStr(DataModule1.Q_PARTIEDAMPFKontrakt_nr.Value)+
' AND '+
'( SELECT * FROM FAKTRELA '+
' WHERE FAKTURIER_LFDNR = '+QuotedStr(IntToStr(DataModule1.Q_FAKTURIERUNGLfdnr.Value))+' ))';
Als Fehlermeldung kommt "Falsche Syntax in der Nähe von ')'"
Die SELECT Anweisung wird mit einer ADOQuery ausgeführt auf SQL 2000 Server.


Es sind 2 Tabellen die miteinander verknüpft sind und ich will davon nur bestimmt Daten dann in einem DBGrid ausgeben, was wohl weniger das Problem ist.

Vielleicht wäre das auch mit einem INNER JOIN möglich, oder besser möglich

Bin da nicht so helle...

Ich bin für jede Antwort dankbar!

Greets

Luciano
Mike Santangelo
  Mit Zitat antworten Zitat
Benutzerbild von Smokey
Smokey

Registriert seit: 10. Nov 2003
Ort: Puerto de la Cruz
158 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Probleme mit SELECT

  Alt 30. Mär 2004, 11:13
hm werd mal bisschen genauer, keine Ahnung, was du mit deinem SQL da erreichen willst, aber das der nicht geht ist schonmal recht klar )

Schreib mal die Tabellen hier rein, wie die aussehen (zumindest die teile auf die es ankommt) und was du dann genau in der anzeige haben möchtest.
Greif dir ein gutes Stück Fleisch auf deinem Weg nach draussen !!!
  Mit Zitat antworten Zitat
Cuchulainn

Registriert seit: 26. Aug 2003
182 Beiträge
 
Delphi 5 Enterprise
 
#3

Re: Probleme mit SELECT

  Alt 30. Mär 2004, 11:16
Herzlich willkommen bei DelphiPraxis

schließ mal vor dem AND die Klammer, die du vor dem ersten SELECT geöffnet hast.
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#4

Re: Probleme mit SELECT

  Alt 30. Mär 2004, 11:23
Da du dort 2 Tabellen aufgelistet hast, denke ich mal, dass du die Werte beider Abfragen untereinander in deiner ADOQuery ausgeben willst.
Der Spaß nennt sich UNION-SELECT. Damit es klappt muss auf jeden Fall eine Bedingung erfüllt sein:
  • Beide Unterabfragen müssen die gleiche Anzahl von Spalten haben, die wiederum in beiden Abfragen den gleichen Typ haben müssen.

Haben beide Tabellen die gleichen Spaltentypen & -Anzahl, dann könnte das so klappen:

Delphi-Quellcode:
With ADOQuery Do
Begin
  SQL.Text :=
    'SELECT *' + #10 +
    'FROM FAKTURIERUNG' + #10 +
    'WHERE KONTRAKT_NR = :i_Kontrakt' + #10 +
    'UNION' + #10 +
    'SELECT *' + #10 +
    'FROM FAKTRELA ''+' + #10 +
    'WHERE FAKTURIER_LFDNR = :i_LfdNr';
  // Parse Statement um Variablen zu erkennen
  Prepared := True;
  // Parameterzuweisung
  With Parameters Do
    ParamByName('i_KONTRAKT').Value := DataModule1.Q_PARTIEDAMPFKontrakt_nr.Value;
    ParamByName('i_LFDNR').Value := DataModule1.Q_FAKTURIERUNGLfdnr.Value;
  End;
  // Ausführen
  Open;
End;
  Mit Zitat antworten Zitat
Luciano

Registriert seit: 17. Dez 2003
Ort: Großostheim
126 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Probleme mit SELECT

  Alt 30. Mär 2004, 11:27
Also diese Tabellen habe ich

PARTIEDAMPF
-----------
Lfdnr <-- primary key
Kontrakt_nr <-- Soll im DBGrid angezeigt werden


FAKTURIERUNG
------------
Lfdnr <-- primary key
Kontrakt_nr <-- Verknüpfung zur Tabelle PARTIEDAMPF
Relation <-- Soll im ABGrid angezeigt werden



FAKTRELA
--------
Fakturier_lfdnr <-- Verknüpfung mit Tabelle FAKTURIERUNG
Faktor <-- Soll im DBGrid angezeigt werden

Diese Tabellen will ich mit einer ADOQuery dursuchen und dann diese Felder in einem DBGrid anzeigen lassen.

Vielleicht kann man damit jetzt etwas mehr anfangen, hoffe ich

Danke


Luciano
Mike Santangelo
  Mit Zitat antworten Zitat
Luciano

Registriert seit: 17. Dez 2003
Ort: Großostheim
126 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Probleme mit SELECT

  Alt 30. Mär 2004, 12:10
Thx Robert_G

Ich denke mal das das funktionieren würde aber ich bekomme noch eine kleine Fehlermeldung.

Die Spalte Kontrakt_nr ist vom Typ VARCHAR und dann sagt mit Delphi das er VARCHAR nicht in INTEGER konvertieren kann, was wohl klar ist, weil der Aufbau der Spalte Kontrakt_nr sieht so aus xxxx/xx/xx x= beliebige Zahl und den Slash (/) als Trennzeichen.


Erstmal wollte vielen Dank sagen für die wirklich verdammt schnellen Antworten

Greets

Luciano
Mike Santangelo
  Mit Zitat antworten Zitat
Benutzerbild von Smokey
Smokey

Registriert seit: 10. Nov 2003
Ort: Puerto de la Cruz
158 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Probleme mit SELECT

  Alt 30. Mär 2004, 12:18
Noch nicht so ganz, aber ich rate mal )

Wenn du nun alle Daten anzeigen willst (wo du es hintergeschrieben hast)
von EINER Lfdnr aus PARTIEDAMPF (also alle daten für genau dieses Ding aus Partiedampf) dann gehts so :

SQL-Code:
SELECT
   PARTIEDAMPF.Kontrakt_nr,
   FAKTURIERUNG.Kontrakt_nr,
   FAKTRELA.Faktor
FROM
   PARTIEDAMPF,
   FAKTURIERUNG,
   FAKTRELA
WHERE
   PARTIEDAMPF.Kontrakt_nr = FAKTURIERUNG.Kontrakt_nr
AND
   FAKTURIERUNG.Lfdnr = FAKTRELA.Fakturier_lfdnr
wenn du nur für ein Objekt willst, hängste noch ein :
AND PARTIEDAMPF.Kontrakt_nr = 'xyz' dran.

Darüber, dass du Tabellen nicht über ihre Primary Keys verknüpfst (Partie dampf zu Fakturierung), lasse ich mich mal nicht aus ;o)
Greif dir ein gutes Stück Fleisch auf deinem Weg nach draussen !!!
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#8

Re: Probleme mit SELECT

  Alt 30. Mär 2004, 12:30
Ein UNION-SELECT wäre hier völlig unangebracht.
Smokeys Lösung würde wohl genau das machen, was du willst.
Seinem Einwand wegen prim. Key <> verknüpftes Feld schließe ich mich an.
  Mit Zitat antworten Zitat
Luciano

Registriert seit: 17. Dez 2003
Ort: Großostheim
126 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Probleme mit SELECT

  Alt 30. Mär 2004, 13:05
Wegen dem Primary Key... OK aber da muß ich einiges umstellen, irgendetwas hatte ich mir dabei gedacht, aber was wohl Naja... mal sehen ob ich das noch hinbekomme...

Jetzt mal so wie ich das gelöst habe... zumindest so wie es einigermaßen funktioniert. Ich hatte nicht alles gepostet, ich wollte eigentlich nur einen Ansatz wissen...

Nachmal vielen Dank für eure Hilfe... Ich hoffe ich kann auch mal helfen aber mein wissen beschränkt sich bis jetzt nur auf Fragen

Hier jetzt das Resultat, ich habe noch eine Tabellen mehr mit eingebracht. Wäre das auch mit einem JOIN gegangen? Nur so als Frage, da es jetzt funktioniert will ich es nicht noch einmal umschreiben... bin etwas unter Zeitdruck

Greets

Luciano

Delphi-Quellcode:
 Anfrage2 := '( SELECT '+
             ' FAKTURIERUNG.KONTRAKT_NR, '+
             ' FAKTURIERUNG.LFDNR, '+
             ' FAKTRELA.FAKTURIER_LFDNR, '+
             ' FAKTRELA.LFDNR, '+
             ' FAKTRELA.RELATION1, '+
             ' VONNACH.FAKTRELA_LFDNR, '+
             ' VONNACH.LFDNR, '+
             ' VONNACH.SUMME, '+
             ' FAKTFAKTOR.VONNACH_LFDNR, '+
             ' FAKTFAKTOR.LFDNR '+
             ' FROM '+
             ' FAKTURIERUNG, FAKTRELA, VONNACH, FAKTFAKTOR '+
             ' WHERE '+
             ' FAKTURIERUNG.KONTRAKT_NR = '+QuotedStr(DataModule1.Q_PARTIEDAMPFKontrakt_nr.Value)+
             ' AND FAKTRELA.FAKTURIER_LFDNR = FAKTURIERUNG.LFDNR '+
             ' AND VONNACH.FAKTRELA_LFDNR = FAKTRELA.LFDNR '+
             ' AND FAKTFAKTOR.VONNACH_LFDNR = VONNACH.LFDNR )';

      //ShowMessage(Anfrage2);

      with DataModule1.Q_TEST do
        begin
          Close;
          SQL.Clear;
          SQL.Add(Anfrage2);
          Open;
        end;

    with DBGrid21 do
      begin
        Columns.Add;
        Columns[0].FieldName := 'KONTRAKT_NR';
        Columns[0].Title.Caption := 'Kontraktnr.';

        Columns.Add;
        Columns[1].FieldName := 'SUMME';
        Columns[1].Title.Caption := 'Fakturiersatz';

        Columns.Add;
        Columns[2].FieldName := 'RELATION1';
        Columns[2].Title.Caption := 'Relation';
      end;
Mike Santangelo
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:30 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