Распознавать тип параметров определяемого пользователем sql, который будет использоваться в Delphi TQuery во время выполнения.

Я пишу приложение delphi (7 ver) и в каком-то месте хочу выполнять параметризованные запросы (для BDE и Paradox), которые будут загружены пользователем во время выполнения в TQuery. Эти запросы будут храниться в текстовых файлах (один текстовый файл для одного запроса). Затем приложение создаст для любого параметра запроса один элемент управления вводом (Tedit), чтобы пользователь мог принимать значения. Также будет кнопка для выполнения запроса. Мой вопрос: как я могу распознать тип данных параметра запроса? Есть ли способ получить этот тип без причины, чтобы каким-то образом включить его в текстовый файл, содержащий запрос?


person Hb-IT    schedule 01.10.2014    source источник
comment
Как правило, вы должны Prepare выполнить запрос, а затем повторить его Params и проверить только что повторенный параметр DataType. Но я понятия не имею, может ли TQuery проанализировать запрос и из метаданных базовой таблицы определить тип данных столбца (пытаясь забыть свое разочарование от BDE).   -  person TLama    schedule 01.10.2014
comment
Благодарю за ваш ответ. Как я вижу, на Tquery нет информации о типе данных его параметров после подготовки.   -  person Hb-IT    schedule 01.10.2014
comment
BDE и Paradox в настоящее время не являются хорошим стартом для приложения...   -  person iPath ツ    schedule 01.10.2014


Ответы (3)


  1. Создайте второй запрос из первого, но измените его предложение where, чтобы исключить строки.

    ВЫБЕРИТЕ * ИЗ MYTABLE, ГДЕ PKFIELD IS NULL

  2. Назовите свои параметры, чтобы вы могли установить их типы данных из типов полей этого второго запроса.

Я понимаю, что это работает только для относительно простых случаев, но это должно помочь вам.

person Hugh Jones    schedule 01.10.2014
comment
Спасибо, не могли бы вы привести пример? - person Hb-IT; 01.10.2014

Преимущество использования параметра заключается в том, что вам не нужно знать его тип данных. Используйте строковое значение из tedit "select * from mytable where myfield = :param1" "parambyname('param1').asstring := edit1.text"

person Richard Dowie    schedule 01.10.2014

Я сделал это с базой данных MySQL. вы должны определить некоторые параметры, например: SELECT * FROM MyTable WHERE MyField=[ANNEE]; в этом случае у меня есть другая таблица, называемая balise, которая выглядит так

"ID" "BALISE" "CAPTION" "DEFAULT_VALUE" "CNDT" "COMPOSANT" "1" "ANNEE" "Année" "2014" "Properties.MaxValue=2014||Properties.MinValue=2007" 1;

во время выполнения это означает, что: Создайте в моей панели TLablel с заголовком Année Создайте в той же строке другой компонент типа 1 (в моем случае это означает TcxSpinEdit), этот компонент имеет значение по умолчанию 2014, имеет два свойства Max Value = 2014 и минимальное значение = 2007 (я использую RTTI для изменения этого значения параметров, в Delphi ver7 используйте TypeInfo).

Другая кнопка с функцией Actualise, эта функция имеет исходный запрос, должна просмотреть созданный мной массив TBalise, взять значение (в моем случае взять TcxSpinEdit(MyObject).Value) и заменить его в копии моего query (AnsiReplaceStr(Requete, '[ANNEE]', MyValue)), поэтому у меня есть окончательный запрос для его выполнения.

У меня есть модуль в полном проекте, я работал с этим методом, и он работает нормально.

person BMS    schedule 01.10.2014