В процессе работы с БД иногда необходимо выполнить какие-то мелкие запросы.
Держать для этого где-то временную 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"') dotry
....
finally
Free; {не забудьте!}end;
.....
ifnot 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;
interfaceuses
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;
implementationuses
Forms;
function CreateTempQuery(SQLscript: TSQLscript): TQuery;
begin
Result := TQuery.Create(Application);
with Result dobegin
DatabaseName := InternalDBname;
{$IFDEF WIN32}
SQL.Text := SQLscript;
{$ELSE}
SQL.SetText(SQLscript);
{$ENDIF}end;
end;
function ExecuteSQL(SQLscript: TSQLscript): boolean;
beginwith CreateTempQuery(SQLscript) dobegintry
ExecSQL;
Result := True;
except
Result := False;
end;
Free;
end;
end;
function CheckExistence(SQLscript: TSQLscript): boolean;
beginwith GiveMeResultSET(SQLscript) dobegin
Result := not EOF;
Free;
end;
end;
function GiveMeResultSET(SQLscript: TSQLscript): TQuery;
begin
Result := CreateTempQuery(SQLscript);
with Result dotry
Open;
except
Free;
Result := nil;
end;
end;
function FastLookUP(SQLscript: TSQLscript): string;
beginwith GiveMeResultSET(SQLscript) dobegintry
Result := Fields[0].AsString;
except
Result := '';
end;
Free;
end;
end;
end.
Рады работать с динамическими запросами!
Модуль TmpQuery - это полезная единица для создания временных запросов и выполнения их в Delphi. Он предоставляет несколько полезных функций для упрощения процесса работы с базами данных.
Вот подробное описание каждой функции:
CreateTempQuery(SQLscript: TSQLScript): TQuery; - Создает объект временного запроса с указанным SQL-скриптом, но не выполняет его.
GiveMeResultSet(SQLscript: TSQLScript): TQuery; - Создает объект временного запроса и выполняет SQL-скрипт. Возвращаемый объект запроса открыт и готов к использованию.
CheckExistence(SQLscript: TSQLScript): boolean; - Возвращает True, если запрос возвращает хотя бы одну строку, и False в противном случае.
FastLookUp(SQLscript: TSQLScript): string; - Выполняет запрос и возвращает первое значение столбца (как строка) из результатов.
Модуль использует несколько констант и переменных:
InternalDBname: имя базы данных по умолчанию для временных запросов.
TSQLScript: тип alias для либо строки, либо PChar, в зависимости от платформы.
Чтобы использовать эти функции, вам нужно включить модуль TmpQuery в ваш проект и создать экземпляр его. Например:
usesTmpQuery;varS:string;begin// Создаем временный запрос с SQL-скриптомvarQuery:=CreateTempQuery('SELECT A.F1 FROM A, B WHERE A.F4 = B.F4 AND B.F9 = %d',[1]);try// Выполняем запрос и получаем результатQuery.Open;// Проверяем, возвращается ли какой-либо результатifnotCheckExistence(Query.SQL)thenShowMessage('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
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.