Как удобнее работать с динамически формируемыми запросами

{codecitation class=»brush: pascal; gutter: false;» width=»600px»}

Автор: Nomadic

В процессе работы с БД иногда необходимо выполнить какие-то мелкие запросы. Держать для этого где-то временную Query меня лично ломает, посему ловите творение (под Delphi) — модуль для создания временных TQuery и работы с ними.

примеры использования:

var

S: string;

S := FastLookUp(format(‘select A.F1 from A,B where A.F4=B.F4 and

B.F9=%d’, [1]));

with GiveMeResultSet(‘select*from A where F1=»777″‘) do

try

….

finally

Free; {не забудьте!}

end;

…..

if not ExecuteSQL(‘delete from A’) then

ShowMessage(‘Something Wrong’);

…..

Сам модуль идёт ниже

{

Temporary Queries Creatin’ and handlin’

(c) 1997-98 by Volok Alexander (D1/D2)

creation date: 30.10.1997

last update : 17.06.1998

}

unit TmpQuery;

interface

uses

DBTables;

const

InternalDBname = ‘MAIN’; {Изменять по вкусу — TDataBase.DataBaseName}

type

TSQLScript = {$IFDEF WIN32}string{$ELSE}PChar{$ENDIF};

{Создаст куери с текстом запроса, но не откроет его}

function CreateTempQuery(SQLscript: TSQLscript): TQuery;

{Создаст куери и откроет запрос — не забудьте прибить}

function GiveMeResultSET(SQLscript: TSQLscript): TQuery;

{Проверит непустоту выборки, заданной …}

function CheckExistence(SQLscript: TSQLscript): boolean;

{Вытащит аж одно значение(лукап) из выборки, заданной …}

function FastLookUP(SQLscript: TSQLscript): string;

{Выполнит запрос и сообщит результат}

function ExecuteSQL(SQLscript: TSQLscript): boolean;

implementation

uses

Forms;

function CreateTempQuery(SQLscript: TSQLscript): TQuery;

begin

Result := TQuery.Create(Application);

with Result do

begin

DatabaseName := InternalDBname;

{$IFDEF WIN32}

SQL.Text := SQLscript;

{$ELSE}

SQL.SetText(SQLscript);

{$ENDIF}

end;

end;

function ExecuteSQL(SQLscript: TSQLscript): boolean;

begin

with CreateTempQuery(SQLscript) do

begin

try

ExecSQL;

Result := True;

except

Result := False;

end;

Free;

end;

end;

function CheckExistence(SQLscript: TSQLscript): boolean;

begin

with GiveMeResultSET(SQLscript) do

begin

Result := not EOF;

Free;

end;

end;

function GiveMeResultSET(SQLscript: TSQLscript): TQuery;

begin

Result := CreateTempQuery(SQLscript);

with Result do

try

Open;

except

Free;

Result := nil;

end;

end;

function FastLookUP(SQLscript: TSQLscript): string;

begin

with GiveMeResultSET(SQLscript) do

begin

try

Result := Fields[0].AsString;

except

Result := »;

end;

Free;

end;

end;

end.

{/codecitation}

Добавить комментарий