3 Stimmen

Parsen von Parametern aus einer Sql-Abfrage mit Delphi

Wie kann ich parsen und extrahieren die Parameter aus einer SQL-Abfrage mit Delphi?

Beispiel:

von dieser Abfrage

SELECT * FROM MyTable 
WHERE Field1=:Param1 
AND Field2=:Param2 
AND (Field3=:Param3 OR Field4=:Param4)

Ich möchte Folgendes erhalten

Param1 Parameter2 Nennwert3 Kennwert4

Vielen Dank im Voraus.

10voto

RRUZ Punkte 132753

@Salvador, Sie können die TParams.ParseSQL Funktion, um die Parameter zu erhalten.

siehe diesen einfachen Code

program Project241;

{$APPTYPE CONSOLE}

uses
  db, //for use TParams
  Classes,// 
  SysUtils;

procedure GetParamsFromSQL(SQL:string;Const ListParams:TStrings);
var
  ParamList: TParams;
  i: integer;
begin
 ListParams.Clear;//Clear the list
    ParamList := TParams.Create(nil);
    try
      ParamList.ParseSQL(SQL, True); //Force to create the params from the SQL
      for i := 0 to ParamList.Count - 1 do 
        ListParams.Add(ParamList[i].Name);
    finally
    ParamList.Free;
    end;
end;

var
  ParamList : TStrings;
begin
  ParamList:=TStringList.Create;
  try
    GetParamsFromSQL('SELECT * FROM MyTable WHERE Field1=:Param1 AND Field2=:Param2 AND (Field3=:Param3 OR Field4=:Param4)',ParamList);
    Writeln(ParamList.text);
    Readln;
  finally
  ParamList.Free;
  end;
end.

zurück:

Param1
Param2
Param3
Param4

0voto

Mason Wheeler Punkte 79858

Für eine einfache Abfrage wie diese können Sie einen einfachen Textlesealgorithmus wie den folgenden erstellen. Es funktioniert für Ihre spezifische Abfrage, und es könnte "gut genug" sein. Geben Sie einfach eine leere TStringList ein.

uses
  StrUtils;

procedure ExtractParams(input: string; output: TStrings);
var
  colon, endpoint: integer;
begin
  colon := pos(':', input);
  while colon <> 0 do
  begin
    input := RightStr(input, length(input) - colon);

    endpoint := 0;
    repeat
      inc(endpoint)
    until input[endpoint] in [' ', ')']; //add other characters here as necessary

    output.Add(LeftStr(input, endpoint - 1));
    colon := pos(':', input);
  end;
end;

Wenn Sie jedoch komplizierteres SQL-Parsing durchführen wollen, sollten Sie sich einen echten Parser ansehen. Werfen Sie einen Blick auf GOLD-Parser das auf der Grundlage von Sprachdefinitionsdateien mehrere verschiedene Sprachen, einschließlich SQL, analysieren kann. Auf der Website ist eine Delphi-Implementierung des Parsers verfügbar.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X