Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   SQL Anweisung klappt nicht ganz.. (https://www.delphipraxis.net/145404-sql-anweisung-klappt-nicht-ganz.html)

tdeck 31. Dez 2009 01:13

Datenbank: MSSQL • Version: 2005 • Zugriff über: DelphiQuery

SQL Anweisung klappt nicht ganz..
 
Hallo Leute,

habe ein kleines Problem, wahrscheinlich ist das nur ein einfacher Denkfehler in meiner gebildeten SQL-Anweisung:

SQL-Code:
SELECT *
FROM dbo.VORGANG
WHERE BELEGART = 'L'
AND UPPER(VORGANGNR) LIKE '%'+UPPER('Muster')+'%'
OR UPPER(BETREFF) LIKE '%'+UPPER('Muster')+'%'
OR UPPER(FREMDEAUFTNR) LIKE '%'+UPPER('Muster')+'%'
OR UPPER(FREMDEKOMNR) LIKE '%'+UPPER('Muster')+'%'
Ich möchte das ein Textteil "Muster" in den Feldern: VORGANGNR, BETREFF, FREMDAUFTNR, FREMDKOMNR
gesucht werden (Filter) aber eben nur die Daten angezeigt werden wo das Feld "BELEGART = 'L'" ist.
Irgendwie klappt das aber nicht er zeigt immer alle möglichen Inhalte BELEGART an.

Kann ich das so überhapt angehen, oder muss ich hier eine Unterabfrage benutzen?

Gruss
Thorsten

hoika 31. Dez 2009 07:04

Re: SQL Anweisung klappt nicht ganz..
 
Hallo,

du musst das doch klammern

SQL-Code:
SELECT *
FROM dbo.VORGANG
WHERE BELEGART = 'L'
AND (
UPPER(VORGANGNR) LIKE '%'+UPPER('Muster')+'%'
OR UPPER(BETREFF) LIKE '%'+UPPER('Muster')+'%'
OR UPPER(FREMDEAUFTNR) LIKE '%'+UPPER('Muster')+'%'
OR UPPER(FREMDEKOMNR) LIKE '%'+UPPER('Muster')+'%'
)
Ansonsten wirkt das OR immer.


Heiko

RWarnecke 31. Dez 2009 08:23

Re: SQL Anweisung klappt nicht ganz..
 
So könnte es eventuell auch funktionieren :
SQL-Code:
SELECT *
FROM dbo.VORGANG
WHERE BELEGART = 'L'
AND
VORGANGNR containing 'Muster'
OR BETREFF containing 'Muster')
OR FREMDEAUFTNR containing 'Muster'
OR FREMDEKOMNR containing 'Muster';

Jürgen Thomas 31. Dez 2009 09:50

Re: SQL Anweisung klappt nicht ganz..
 
CONTAINING ist Firebird-Dialekt, bei MS-SQL heißt es CONTAINS. Aber auch dabei müssen die Klammern gesetzt werden: AND ist eine engere Verknüpfung als OR.

Gruß und guten Rutsch! Jürgen

s.h.a.r.k 31. Dez 2009 10:31

Re: SQL Anweisung klappt nicht ganz..
 
Zitat:

Zitat von RWarnecke
So könnte es eventuell auch funktionieren :
SQL-Code:
SELECT *
FROM dbo.VORGANG
WHERE BELEGART = 'L'
AND
VORGANGNR containing 'Muster'
OR BETREFF containing 'Muster')    <-- hier ist eine Klammer zu viel ;)
OR FREMDEAUFTNR containing 'Muster'
OR FREMDEKOMNR containing 'Muster';

Zudem würde ich das so nicht machen, eben aus schon besagtem Grund. Was ist, wenn jemand auf einmal die DB wechseln will/muss. Da würde ich auf jeden Fall erst mal auf den Standard zurückgreifen.

Ergo würde ich obige Lösung mit der Klammerung präferieren.

tdeck 31. Dez 2009 11:30

Re: SQL Anweisung klappt nicht ganz..
 
Hallo Heiko.

Zitat:

Zitat von hoika
Hallo,

du musst das doch klammern

SQL-Code:
SELECT *
FROM dbo.VORGANG
WHERE BELEGART = 'L'
AND (
UPPER(VORGANGNR) LIKE '%'+UPPER('Muster')+'%'
OR UPPER(BETREFF) LIKE '%'+UPPER('Muster')+'%'
OR UPPER(FREMDEAUFTNR) LIKE '%'+UPPER('Muster')+'%'
OR UPPER(FREMDEKOMNR) LIKE '%'+UPPER('Muster')+'%'
)
Ansonsten wirkt das OR immer.


Heiko

Das mit den Klammern dachte ich mir auch so, hatte es so auch schon getestet, aber dann bekomme ich eine Fehlermeldung, ich meine der Wortlaut war etwa so "ungültiges Zeichen near AND"

Ich teste es nochmal, ansonsten teste ich mal die Lösung von RWarnecke.

Erstmal Danke für die schnellen Antworten, ich wünsche euch allen "Ein frohes neues Jahr und einen guten Rutsch"

Gruß
Thorsten

Aber ich teste es noch mal, notfalls

s.h.a.r.k 31. Dez 2009 11:36

Re: SQL Anweisung klappt nicht ganz..
 
Hm, eigentlich sollte die Query schon funktionieren. Hast du Sie nochmals getestet? Wie schickst du die Query an die DB?

tdeck 31. Dez 2009 11:38

Re: SQL Anweisung klappt nicht ganz..
 
Hallo Heiko.
Zitat:

Zitat von hoika
Hallo,

du musst das doch klammern

SQL-Code:
SELECT *
FROM dbo.VORGANG
WHERE BELEGART = 'L'
AND (
UPPER(VORGANGNR) LIKE '%'+UPPER('Muster')+'%'
OR UPPER(BETREFF) LIKE '%'+UPPER('Muster')+'%'
OR UPPER(FREMDEAUFTNR) LIKE '%'+UPPER('Muster')+'%'
OR UPPER(FREMDEKOMNR) LIKE '%'+UPPER('Muster')+'%'
)
Ansonsten wirkt das OR immer.


Heiko

Habe es gerade getestet, jetzt geht es mit Deiner Lösung. Vieleicht hatte ich doch einen Fehler in meiner Klammerung.
Vielen Dank

Gruß
Thorsten

RWarnecke 31. Dez 2009 11:42

Re: SQL Anweisung klappt nicht ganz..
 
Zitat:

Zitat von Jürgen Thomas
CONTAINING ist Firebird-Dialekt, bei MS-SQL heißt es CONTAINS. Aber auch dabei müssen die Klammern gesetzt werden: AND ist eine engere Verknüpfung als OR.

Hier nochmal die korrigierte Fassung :
SQL-Code:
SELECT *
FROM dbo.VORGANG
WHERE BELEGART = 'L' AND
(VORGANGNR contains 'Muster'
OR BETREFF contains 'Muster'
OR FREMDEAUFTNR contains 'Muster'
OR FREMDEKOMNR contains 'Muster');
Danke nochmal an Jürgen. Ich hoffe jetzt habe ich nicht wieder etwas übersehen. :duck:

Auch von mir einen guten Rutsch ins neue Jahr. :party:

hoika 31. Dez 2009 13:23

Re: SQL Anweisung klappt nicht ganz..
 
Hallo,

geht doch ;)

Ich denke dabei immer an Delphi,
also am besten noch ne Klammer um BELEGART = 'L',
auch wenn es jetzt schon geht.

SQL-Code:
SELECT *
FROM dbo.VORGANG
WHERE
(BELEGART = 'L')
   AND
(VORGANGNR contains 'Muster'
OR BETREFF contains 'Muster'
OR FREMDEAUFTNR contains 'Muster'
OR FREMDEKOMNR contains 'Muster');

Heiko


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:01 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