AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken SQL Anweisung klappt nicht ganz..
Thema durchsuchen
Ansicht
Themen-Optionen

SQL Anweisung klappt nicht ganz..

Ein Thema von tdeck · begonnen am 31. Dez 2009 · letzter Beitrag vom 31. Dez 2009
Antwort Antwort
tdeck

Registriert seit: 26. Jun 2006
Ort: Obertshausen
67 Beiträge
 
Delphi 11 Alexandria
 
#1

SQL Anweisung klappt nicht ganz..

  Alt 31. Dez 2009, 01:13
Datenbank: MSSQL • Version: 2005 • Zugriff über: DelphiQuery
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
Thorsten
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: SQL Anweisung klappt nicht ganz..

  Alt 31. Dez 2009, 07:04
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
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#3

Re: SQL Anweisung klappt nicht ganz..

  Alt 31. Dez 2009, 08:23
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';
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#4

Re: SQL Anweisung klappt nicht ganz..

  Alt 31. Dez 2009, 09:50
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
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#5

Re: SQL Anweisung klappt nicht ganz..

  Alt 31. Dez 2009, 10:31
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.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
tdeck

Registriert seit: 26. Jun 2006
Ort: Obertshausen
67 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: SQL Anweisung klappt nicht ganz..

  Alt 31. Dez 2009, 11:30
Hallo Heiko.

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
Thorsten
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#7

Re: SQL Anweisung klappt nicht ganz..

  Alt 31. Dez 2009, 11:36
Hm, eigentlich sollte die Query schon funktionieren. Hast du Sie nochmals getestet? Wie schickst du die Query an die DB?
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
tdeck

Registriert seit: 26. Jun 2006
Ort: Obertshausen
67 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: SQL Anweisung klappt nicht ganz..

  Alt 31. Dez 2009, 11:38
Hallo Heiko.
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
Thorsten
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#9

Re: SQL Anweisung klappt nicht ganz..

  Alt 31. Dez 2009, 11:42
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 = 'LAND
(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.

Auch von mir einen guten Rutsch ins neue Jahr.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#10

Re: SQL Anweisung klappt nicht ganz..

  Alt 31. Dez 2009, 13:23
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
Heiko
  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 02: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