![]() |
Probleme mit SELECT
Hi...
Ich habe dan ein Problem mit einer Select-Anfrage, die wie folgt aussieht
Delphi-Quellcode:
Als Fehlermeldung kommt "Falsche Syntax in der Nähe von ')'"
'( 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))+' ))'; 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 |
Re: Probleme mit SELECT
hm werd mal bisschen genauer, keine Ahnung, was du mit deinem SQL da erreichen willst, aber das der nicht geht ist schonmal recht klar :o)
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. |
Re: Probleme mit SELECT
Herzlich willkommen bei DelphiPraxis :D
schließ mal vor dem AND die Klammer, die du vor dem ersten SELECT geöffnet hast. |
Re: Probleme mit SELECT
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:
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; |
Re: Probleme mit SELECT
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 |
Re: Probleme mit SELECT
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 :-D Greets Luciano |
Re: Probleme mit SELECT
Noch nicht so ganz, aber ich rate mal :o)
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:
wenn du nur für ein Objekt willst, hängste noch ein :
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 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) |
Re: Probleme mit SELECT
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. |
Re: Probleme mit SELECT
:? 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 :roll: 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 :freak: 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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:24 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