Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

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

Delphi , Базы данных , SQL

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

Автор: 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.

Рады работать с динамическими запросами!

Модуль TmpQuery - это полезная единица для создания временных запросов и выполнения их в Delphi. Он предоставляет несколько полезных функций для упрощения процесса работы с базами данных.

Вот подробное описание каждой функции:

  1. CreateTempQuery(SQLscript: TSQLScript): TQuery; - Создает объект временного запроса с указанным SQL-скриптом, но не выполняет его.
  2. GiveMeResultSet(SQLscript: TSQLScript): TQuery; - Создает объект временного запроса и выполняет SQL-скрипт. Возвращаемый объект запроса открыт и готов к использованию.
  3. CheckExistence(SQLscript: TSQLScript): boolean; - Возвращает True, если запрос возвращает хотя бы одну строку, и False в противном случае.
  4. FastLookUp(SQLscript: TSQLScript): string; - Выполняет запрос и возвращает первое значение столбца (как строка) из результатов.

Модуль использует несколько констант и переменных:

  • InternalDBname: имя базы данных по умолчанию для временных запросов.
  • TSQLScript: тип alias для либо строки, либо PChar, в зависимости от платформы.

Чтобы использовать эти функции, вам нужно включить модуль TmpQuery в ваш проект и создать экземпляр его. Например:

uses TmpQuery;

var
  S: string;
begin
   // Создаем временный запрос с SQL-скриптом
  var Query := CreateTempQuery('SELECT A.F1 FROM A, B WHERE A.F4 = B.F4 AND B.F9 = %d', [1]);

  try
     // Выполняем запрос и получаем результат
    Query.Open;

     // Проверяем, возвращается ли какой-либо результат
    if not CheckExistence(Query.SQL) then
      ShowMessage('No results found');

     // Получаем первое значение столбца (быстрый поиск)
    S := FastLookUp('SELECT F1 FROM A WHERE F1 = "777"');
  finally
     // Не забывайте освободить объект запроса!
    Query.Free;
  end;
end.

В этом примере мы создаем временный запрос с SQL-скриптом, выполняем его и получаем результат. Мы также используем функцию CheckExistence для проверки, возвращается ли какой-либо результат, а затем используем функцию FastLookUp для быстрого поиска значения из первого столбца результата.

В целом, этот модуль упрощает процесс работы с динамическими запросами в Delphi, делая его более эффективным и надежным.

В статье рассказывается о модуле TmpQuery для создания временных запросов в Delphi, который позволяет удобно работать с динамически формируемыми запросами.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: SQL ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 12:07:50/0.0058450698852539/1