AGB  ·  Datenschutz  ·  Impressum  







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

SQL Parser in Delphi

Ein Thema von Tyrael Y. · begonnen am 17. Feb 2004 · letzter Beitrag vom 17. Feb 2004
Antwort Antwort
Tyrael Y.

Registriert seit: 28. Jul 2003
Ort: Stuttgart
1.093 Beiträge
 
Delphi 2007 Professional
 
#1

SQL Parser in Delphi

  Alt 17. Feb 2004, 12:37
Ich müsste für SQL-Queries rauskriegen, was im Statement hinter der WHERE-Klausel steht, um
diese Inforamtionen im weiteren Verlauf zu verwenden.

Ne einfache Lösung über Pos(), klappt in den meisten Fällen, aber..

... der Tabellenname könnte z.B. BlaSülzWhere oder BlaWhereSülz oder WhereBla heißen
... ein Feldname könnte genauso aufgebaut sein

..dies kann ich von vorherein leider nicht voraussetzen.

Hat einer von euch vielleicht eine Idee, wie man das geschickt lösen könnte?
Levent Yildirim
Erzeugung von Icons aus Bildern:IconLev
  Mit Zitat antworten Zitat
Benutzerbild von Leuselator
Leuselator

Registriert seit: 18. Mär 2003
Ort: Berlin
589 Beiträge
 
Delphi 8 Architect
 
#2

Re: SQL Parser in Delphi

  Alt 17. Feb 2004, 13:40
Das Beispiel geht von der Annahme aus, das einem WHERE zwingend ein Leerzeichen folgt (leider kann dem WHERE ein #13#10 vorangehen):

Delphi-Quellcode:
var
  FirstPos,
  LastPos : Integer;
  UGotTheFirst,
  UGotTheLast,
  ThereAreMany : Boolean;
  QueryText : String;
begin
  FirstPos := 0;
  LastPos := 0;
  FirstPos := pos('WHERE ',UPPERCASE(QueryText));
  UGotTheFirst := (FirstPos > 0);
  LastPos := FirstPos;
  while pos('WHERE ',copy(UPPERCASE(QueryText),LastPos,MaxInt)) > 0
    do LastPos := pos('WHERE ',copy(UPPERCASE(QueryText),LastPos,MaxInt));
  UGotTheLast := (LastPos > 0);
  ThereAreMany := (FirstPos <> LastPos);
end;
Gruß
Tim Leuschner
Programmierer = moderner Sysiphos: stets wenn er meint, den Stein seiner Dummheit auf den Berg des Wissens gewuchtet zu haben, erblickt er einen völlig neuen Aspekt und der Dummfels poltert mit Getöse zurück ins Tal der Unwissenheit...
  Mit Zitat antworten Zitat
Tyrael Y.

Registriert seit: 28. Jul 2003
Ort: Stuttgart
1.093 Beiträge
 
Delphi 2007 Professional
 
#3

Re: SQL Parser in Delphi

  Alt 17. Feb 2004, 14:07
Danke dir für deinen Hilfeversuch, aber deine While-Schleife solltest du vielleicht nochmal überdenken, da Sie nicht gerade sehr schnell ist und letztendlich auch kein Ergebnis für mein Problem liefert.

danke trotzdem
Levent Yildirim
Erzeugung von Icons aus Bildern:IconLev
  Mit Zitat antworten Zitat
Alexander

Registriert seit: 28. Aug 2002
Ort: Oldenburg
3.513 Beiträge
 
Turbo Delphi für .NET
 
#4

Re: SQL Parser in Delphi

  Alt 17. Feb 2004, 14:54
Mhm. Aber Leuselator hat dir doch den richtigen Weg genannt, such einfach nach WHERE mit vorangestellten und nachgestellten Leerzeichen, statt einfach nach WHERE.

PS: Du musst auch wie Leuselator es geacmht, alles auf GROSS oder klein Buchstaben bringen, weil man ja das WHERE schreiben kann wie man will
Alexander
  Mit Zitat antworten Zitat
Tyrael Y.

Registriert seit: 28. Jul 2003
Ort: Stuttgart
1.093 Beiträge
 
Delphi 2007 Professional
 
#5

Re: SQL Parser in Delphi

  Alt 17. Feb 2004, 15:22
Ein einfaches Gegenbeispiel wann es nicht klappen kann:

SELECT * FROM "Test" WHERE("ID" = '123')

Levent Yildirim
Erzeugung von Icons aus Bildern:IconLev
  Mit Zitat antworten Zitat
Benutzerbild von Leuselator
Leuselator

Registriert seit: 18. Mär 2003
Ort: Berlin
589 Beiträge
 
Delphi 8 Architect
 
#6

Re: SQL Parser in Delphi

  Alt 17. Feb 2004, 15:33
Lass das Leerzeichen halt weg.
Wenn Du meinen Code dann noch so änderst, funktioniert er auch (ausserdem ist die Whileschleife keineswegs langsam - sie wird maximal so oft durchlaufen, wie "Where" im statement vorkommt-1, d.h. bei einem "Where" wird sie nichtmal starten)!
Delphi-Quellcode:
var
  FirstPos,
  LastPos : Integer;
  UGotTheFirst,
  UGotTheLast,
  ThereAreMany : Boolean;
  QueryText : String;
begin
  FirstPos := 0;
  LastPos := 0;
  FirstPos := pos('WHERE',UPPERCASE(QueryText));
  UGotTheFirst := (FirstPos > 0);
  LastPos := FirstPos;
  while pos('WHERE',copy(UPPERCASE(QueryText),LastPos+5,MaxInt)) > 0
    do LastPos := LastPos+5+pos('WHERE',copy(UPPERCASE(QueryText),LastPos+5,MaxInt));
  UGotTheLast := (LastPos > 0);
  ThereAreMany := (FirstPos <> LastPos);
end;
Gruß
Tim Leuschner
Programmierer = moderner Sysiphos: stets wenn er meint, den Stein seiner Dummheit auf den Berg des Wissens gewuchtet zu haben, erblickt er einen völlig neuen Aspekt und der Dummfels poltert mit Getöse zurück ins Tal der Unwissenheit...
  Mit Zitat antworten Zitat
Tyrael Y.

Registriert seit: 28. Jul 2003
Ort: Stuttgart
1.093 Beiträge
 
Delphi 2007 Professional
 
#7

Re: SQL Parser in Delphi

  Alt 17. Feb 2004, 15:59
ehm, also..

..wenn du zB. ein SQL-Staement hättest das folgendermaßen aussieht:

SELECT "FromWhere" FROM "WhereAbouts" WHERE("WhereLocal" = 'Northwhere')
Edit: Es könnte auch genausogut ohne anführungszeichen geschrieben worden sein
-> SELECT FromWhere FROM WhereAbouts WHERE(WhereLocal = Northwhere)

..ich gebe zu ist ein Extrembeisspiel

und letztendlich wäre das von mir gewünschte Ergebnis 'WHERE("LocalWhere" = 'Northwhere')'

...mit deiner Möglichkeit wäre die zurückgegebene Position nicht gleich meiner Wunschmenge

danke dir trotzdem für deine Mühe
Levent Yildirim
Erzeugung von Icons aus Bildern:IconLev
  Mit Zitat antworten Zitat
Benutzerbild von Leuselator
Leuselator

Registriert seit: 18. Mär 2003
Ort: Berlin
589 Beiträge
 
Delphi 8 Architect
 
#8

Re: SQL Parser in Delphi

  Alt 17. Feb 2004, 17:24
Es schreit, es zappelt und es wird fürchterlich an den Haaren herbeigezogen
Also im Ernst: Beim Schreiben von SQLStatements und erst recht bei der Benennung von Tabellen und Feldern sollte man doch wenigstens die Finger von reservierten ausdrücken lassen und ein paar Formatierungsstandards einhalten. Aber wie dem auch sei - einzige Alternative ist, wirklich einen SQL-parser zu schreiben - und das ist 'ne Menge Arbeit, nach deren Sinn man schonmal fragen dürfte.
Viel Glück bei der Lösung und Gruß aus Berlin
Tim Leuschner
Programmierer = moderner Sysiphos: stets wenn er meint, den Stein seiner Dummheit auf den Berg des Wissens gewuchtet zu haben, erblickt er einen völlig neuen Aspekt und der Dummfels poltert mit Getöse zurück ins Tal der Unwissenheit...
  Mit Zitat antworten Zitat
Tyrael Y.

Registriert seit: 28. Jul 2003
Ort: Stuttgart
1.093 Beiträge
 
Delphi 2007 Professional
 
#9

Re: SQL Parser in Delphi

  Alt 17. Feb 2004, 17:30
Das Problem ist, ich kann nicht voraussetzen was für Statements abgegeben werden und muss wie der gute Murphy vom schlimmsten Fall ausgehen.

Danke noch mal vielmals für deine Mühe.

Ich werde wahrscheinlich einen Freeware-Parser nutzen.
Muss mal gucken, was es da alles gibt.


Viele Grüße
Tyrael
Levent Yildirim
Erzeugung von Icons aus Bildern:IconLev
  Mit Zitat antworten Zitat
Benutzerbild von trifid
trifid

Registriert seit: 12. Sep 2003
297 Beiträge
 
#10

Re: SQL Parser in Delphi

  Alt 17. Feb 2004, 21:27
schau mal unter
http://www.delphi-groups.de/YaBBSe/i...threadid=17611
  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 11:33 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