Создание правильной SQL-строки

Вопросы программирования и использования MSEide + MSEgui.

Модератор: Модераторы

Создание правильной SQL-строки

Сообщение t-ea » 28.07.2009 17:55:23

Есть ли в mse (или в fpc) стандартная функция которая из поданной ей на вход простой строки формирует синтаксически правильную SQL-строку, то есть дублирует кавычки/апострофы, экранирует escape-символы и т.п.?
t-ea
новенький
 
Сообщения: 98
Зарегистрирован: 22.09.2006 00:22:34

Re: Создание правильной SQL-строки

Сообщение debi12345 » 28.07.2009 21:43:53

1) sql_str:= tmsesqlquery.fieldtosql(tmse{type}field);
2) sql_str:= tmse{type}field.assql;

Ессно, адаптирповано под синтаксис кокретного БД-сервера.
Из опыта : вариант 1) надежнее.

ПС:
Для записи BLOB-значений "голый" SQL-не проканает - придется "заливать" бинарные данные через параметрический SQL-запроc.
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5759
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Re: Создание правильной SQL-строки

Сообщение t-ea » 28.07.2009 22:28:33

Нет, у меня строки читаются из файла а не из DB-полей, и сейчас столкнулся с такой ситуацией, что в некоторых строках содержится много обратных сплешей с апострофами. Пока написал свою функцию, но она просто удваивает встречающиеся служебные символы.
Хотелось бы пользоваться стандартными функциями если они есть.

P.S.: А чем .asSQL ненадёжна? А то для формирования строки из полей я использую именно её.
t-ea
новенький
 
Сообщения: 98
Зарегистрирован: 22.09.2006 00:22:34

Re: Создание правильной SQL-строки

Сообщение debi12345 » 29.07.2009 01:17:46

Ну тогда самописка под кокретный синтаксис, хотя в принципе можно взять за прототип код вышеуказанных функций.

P.S.: А чем .asSQL ненадёжна?

Во млин, не помню уже - вроде был какой-то прикол и Мартин вариант 1) посоветовал тогда :)

А то для формирования строки из полей я использую именно её.

Для строк она подходит, но вот для других типов есть зависимости от сервера, например :
1) BOOLEAN= 't'/'f' (PostgreSQL), 1/0(SQlite3)
2) NUMERIC/BCD = value*10000 (SQlite3)
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5759
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Re: Создание правильной SQL-строки

Сообщение Attid » 29.07.2009 09:14:21

t-ea
а параметизированные запросы не помогут ? или у тебя в файле готовый SQL запрос ?
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Re: Создание правильной SQL-строки

Сообщение t-ea » 30.07.2009 00:02:53

Оказавается что это скорее всего из-за MSSQL, так как в Firebird записи вставляются нормально. Почему-то MSSQL строки нечётным количеством обратных слешей не хочет вставлять в базу. Буду искать дальше что не так…

По параметризированным запросам: раньше какие-то запросы тоже не обрабатывались, и чтобы не гадать стал сам собирать SQL-запрос, а сейчас так и осталось.
t-ea
новенький
 
Сообщения: 98
Зарегистрирован: 22.09.2006 00:22:34

Re: Создание правильной SQL-строки

Сообщение Attid » 30.07.2009 11:53:57

t-ea писал(а):По параметризированным запросам: раньше какие-то запросы тоже не обрабатывались,

не верю (с) или использовал бажные компоненты
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Re: Создание правильной SQL-строки

Сообщение t-ea » 31.07.2009 00:44:32

Attid писал(а):не верю

Чему? Тому что SQL-команда не выполнялась?
Было такое, и для того чтобы видеть побуквенно какая команда получается, пришлось оставить самостоятельную сборку SQL-строки, и искать что где не так, а потом руки не дошли — работает и ладно… Тем более что раньше я параметрами вообще не пользовался.

А по поводу моей проблемы:
Как оказалось проблема в таком коде mse (msedb.pas):
Код: Выделить всё
           if p^='\' then Inc(p,2) // make sure we handle \' and \\ correct
           else Inc(p);


Теперь меня интересует как сказать mse что обрабатывать SQL-команду ему не надо, а надо её просто выполнить?
Переключение параметра ParseSQL у msesqlquery не помогло, а дальше не знаю.
t-ea
новенький
 
Сообщения: 98
Зарегистрирован: 22.09.2006 00:22:34

Re: Создание правильной SQL-строки

Сообщение debi12345 » 31.07.2009 11:20:49

Теперь меня интересует как сказать mse что обрабатывать SQL-команду ему не надо, а надо её просто выполнить?

Connection.ExecuteDirect(<ваша команда>);

Кстати, этой же командой удобно заказывать блокировки таблиц в событии BeforeApplyUpdate.

Переключение параметра ParseSQL у msesqlquery не помогло, а дальше не знаю.

AFAIK, эта команда предназначена для IDE - чтобы оно выделило 1) параметры 2) названия и типы полей и 3) название таблицы - чтобы автоматом выстроить SQL-команды модификации этой таблицы (тогда пользователю не надо париться с обновлениями -все будет сделано автоматом по ApplyUpdates+Commit[Retaining]). Если запрос многотабличный, то автоматом команды модификации не построишь - поэтому датасет переводится в ReadOnly, если не заданы SQL(Insert/DElete/UPdate) OnApplyRecUpdate (то есть когда программер говорит "сам пропишу модификации").
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5759
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Re: Создание правильной SQL-строки

Сообщение hibaaryan » 07.01.2015 16:07:38

либо создавать через .create(self)
и копировать все свойства

печально, столько "лишних" строк ...
hibaaryan
незнакомец
 
Сообщения: 1
Зарегистрирован: 07.01.2015 15:40:30


Вернуться в MSEide + MSEgui

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 21

Рейтинг@Mail.ru