AGB  ·  Datenschutz  ·  Impressum  







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

SQLCmd Manipulation

Ein Thema von Gruber_Hans_12345 · begonnen am 31. Jul 2013 · letzter Beitrag vom 31. Jul 2013
Antwort Antwort
Seite 1 von 2  1 2      
Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.439 Beiträge
 
Delphi 2007 Professional
 
#1

SQLCmd Manipulation

  Alt 31. Jul 2013, 10:47
Hallo ich suche eine library oder co, mit der ich einfach und leicht SQL commands bearbeiten kann.

Im aktuellen Fall habe ich eine SQL Command und muss dort neue WHERE Klauseln dynamisch hinzufügen ... aber das ist ledier gar nicht so leicht

Code:
SELECT A.ID, (SELECT FIRST 1 B.ID FROM TABB B WHERE B.X = A.X)
, A.TEST
FROM TABA A
WHERE A.ID IN (SELECT C.ID FROM TABC C WHERE C.Y = A.Y) AND A.DELETED = 0
UNION
SELECT D.ID, (SELECT FIRST 1 B.ID FROM TABB B WHERE B.X = D.X)
, D.TEST
FROM TABD D
WHERE D.ID IN (SELECT C.ID FROM TABC C WHERE C.Y = D.Y) AND D.DELETED = 0
nun will dynamisch eine neue WHERE Klausel einfügen in diesem Fall 2 mal in jedem Union zweig

Code:
SELECT A.ID, (SELECT FIRST 1 B.ID FROM TABB B WHERE B.X = A.X)
, A.TEST
FROM TABA A
WHERE (---NEUE WHERE ---) AND (A.ID IN (SELECT C.ID FROM TABC C WHERE C.Y = A.Y) AND A.DELETED = 0)
UNION
SELECT D.ID, (SELECT FIRST 1 B.ID FROM TABB B WHERE B.X = D.X)
, D.TEST
FROM TABD D
WHERE (---NEUE WHERE ---) AND (D.ID IN (SELECT C.ID FROM TABC C WHERE C.Y = D.Y) AND D.DELETED = 0)
kennt wer eine Library für soetwas?
Gruss Hans

2B or not 2B, that is FF
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#2

AW: SQLCmd Manipulation

  Alt 31. Jul 2013, 11:03
Suchst du vielleicht einen SQL-Parser?
  Mit Zitat antworten Zitat
Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.439 Beiträge
 
Delphi 2007 Professional
 
#3

AW: SQLCmd Manipulation

  Alt 31. Jul 2013, 11:05
ja sowas ähnliches nur halt was auch gleich eine Manipulation ermöglicht ...
Gruss Hans

2B or not 2B, that is FF
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: SQLCmd Manipulation

  Alt 31. Jul 2013, 11:06
Ganz simpel und einfach?

Delphi-Referenz durchsuchenStringReplace

SQL-Code:
SELECT A.ID, (SELECT FIRST 1 B.ID FROM TABB B WHERE B.X = A.X)
, A.TEST
FROM TABA A
WHERE (%WHEREADD%) AND (A.ID IN (SELECT C.ID FROM TABC C WHERE C.Y = A.Y) AND A.DELETED = 0)
UNION
SELECT D.ID, (SELECT FIRST 1 B.ID FROM TABB B WHERE B.X = D.X)
, D.TEST
FROM TABD D
WHERE (%WHEREADD%) AND (D.ID IN (SELECT C.ID FROM TABC C WHERE C.Y = D.Y) AND D.DELETED = 0)
Delphi-Quellcode:
function ModifyWhereAdd(const SqlCmd, WhereAdd : string) : string;
var
  LReplacePattern : string;
begin
  if ( WhereAdd = '' ) then
    LReplacePattern := '1=1'
  else
    LReplacePattern := WhereAdd;

  Result := StringReplace( SqlCmd, '(%WHEREADD%)', '( ' + LReplacePattern + ' )', [ rfReplaceAll, rfIgnoreCase ] );
end;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.439 Beiträge
 
Delphi 2007 Professional
 
#5

AW: SQLCmd Manipulation

  Alt 31. Jul 2013, 11:26
jein

es kann sein das ich zufällig gar keinen Filter hinzufügen will, oder das es aber 4 filter werden die dynamisch hinzugefügt werden sollen, dann versagt das einfache simple StringReplace

Und das größte Problem ist, das ich diese SQL Commands nicht so umändern kann, da die aus einem bestehenden System kommen ...
Gruss Hans

2B or not 2B, that is FF
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: SQLCmd Manipulation

  Alt 31. Jul 2013, 11:46
Wieso sollte das versagen?

Wenn kein Filter, dann mit "(1=1)" ersetzen.

Wenn du dynamisch mehrere Bedingungen haben möchtest, dann definiere dir eine Klasse, die diese Bedingungen entgegennehmen kann und dann für die Ersetzung zusammenbaut und per StringReplace dort einsetzt.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.439 Beiträge
 
Delphi 2007 Professional
 
#7

AW: SQLCmd Manipulation

  Alt 31. Jul 2013, 11:59
Wieso sollte das versagen?

Wenn kein Filter, dann mit "(1=1)" ersetzen.

Wenn du dynamisch mehrere Bedingungen haben möchtest, dann definiere dir eine Klasse, die diese Bedingungen entgegennehmen kann und dann für die Ersetzung zusammenbaut und per StringReplace dort einsetzt.

mein Hauptproblem ist aber das ich dieses (%WHEREADD%) wiederum dynamisch in die SQL Commands reinbringen müsste, da ich ja bestehende SQL Command bekomme die ich verarbeiten muss ... und dann bin ich ja wieder im selben dilemma ....
Gruss Hans

2B or not 2B, that is FF
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: SQLCmd Manipulation

  Alt 31. Jul 2013, 12:38
Ok, aber von der Beschreibung her macht dieser

http://sourceforge.net/projects/gasqlparser/

doch einen guten Eindruck
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#9

AW: SQLCmd Manipulation

  Alt 31. Jul 2013, 12:42
Also ohne Parser oder die Verwendung von Pattern im Basis SQL hast Du da schlechte Karten.

Vielleicht hab ich das falsch im Kopf, aber irgendjemand hat hier neulich nach Aufbau von Union Views gefragt, warst Du das?
Annahme:
So oder so, es ist der Erste Union View im Projekt, sonst würdest Du hier nicht mit der Frage aufschlagen.

Vorschlag:
Baue das Union SQL in einen View ein. Alle minimalen Where Bedinungen von Anfang an aufnehmen, alle Felder, die ggF. gefiltert werden mit ins SQL Select rein.

Im Ergebnis hast Du wieder nur eine Where Clause.
Haken an der Sache dürfte ggF. die Performance sein, da alle möglichen Felder für Where Kriterien mit geschleift werden müssen und natürlich immer über alles "gefiltert" wird.
Gruß, Jo
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#10

AW: SQLCmd Manipulation

  Alt 31. Jul 2013, 16:39
Ich kann Deine Einwände nicht so ganz nach vollziehen.
Du hast einen AbfrageText vorgegeben
Code:
Select irgendwas
from irgendwo
where irgendeinebedingung
Daraus machs Du
Code:
Select irgendwas
from irgendwo
where 1=1
  and irgendeinebedingung
  and irgendwasneues
and irgendwasneues wir durch Deine zusätzlichen Bedingungen ersetzt

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 16:20 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