Войти
NeoBooker.ru
Добро пожаловать к нам в гости!
Наш сайт посвящён программе NeoBook, с помощью которой вы легко сможете создавать собственные мультимедиа-приложения без необходимости изучать сложные языки программирования! Зарегистрируйтесь, чтобы стать членом нашего сообщества.
  • Страница 1 из 1
  • 1
Модератор форума: Peter, DEMBEL, YURIY  
База данных. Засада - кавычки в поисковом запросе.
ВадимДата: Пт, 15 Апреля 2011, 17:21 | Сообщение # 1
Генератор идей
Как отделить кавычки встречающиеся в содержимом запроса от кавычек синтаксиса команды поиска?

Или, как сделать так, чтобы поиск работал корректно даже если в запросе есть содержимое с кавычками?

Или, как плагину NeoBookDBPro показать, какие кавычки относятся к синтаксису команды, а какие - просто символы для поиска?

Расшифрую вопрос. Поиск по схеме:

dbpQuery "база" "таблица" "[имя поля] = [переменная для содержимого активной ячейки]"

работает безотказно, НО только до того самого момента, пока в [переменной для содержимого активной ячейки] не обнаруживается запись с кавычками (например, в поле "Организация" оказывается подобная запись: ООО "Заправка в воздухе").
В результате формируется запрос, который некорректно впоследствии прочитывается (прога пишет, что не хватает оператора в запросе (понятное дело, раз кавычки истолковываются как часть синтаксиса самой команды поиска):

Анализ возможных решений:

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

2) Замена кавычек перед формированием запроса на эски-код [#34] не дал результата, в запросе все равно потом фигурируют кавычки и NeoBookDBPro учитывает их как часть синтаксиса команды dbpQuery.

3) Автозамена на другие символы или удаление кавычек перед формированием запроса тоже не подходит, поскольку поиск должен осуществляться по буквальному содержимому выделяемой пользователем ячейки таблицы (иначе команда просто не найдет ни одной записи, если вместо существующих записей - ООО "Заправка в воздухе" - будет искать несуществующую в базе запись - ООО Заправка в воздухе).

На данный момент код выглядит так:

Есть идеи, как научить команду dbpQuery отличать "свои" кавычки от "чужих"?

Прикрепления: 5413971.png (21.2 Kb) · 4569835.png (20.9 Kb)


Бесплатный онлайн курс программирования в VisualNEO Win (NeoBook)

Сообщение отредактировано
Вадим - Пт, 15 Апреля 2011, 17:22
 
СообщениеКак отделить кавычки встречающиеся в содержимом запроса от кавычек синтаксиса команды поиска?

Или, как сделать так, чтобы поиск работал корректно даже если в запросе есть содержимое с кавычками?

Или, как плагину NeoBookDBPro показать, какие кавычки относятся к синтаксису команды, а какие - просто символы для поиска?

Расшифрую вопрос. Поиск по схеме:

dbpQuery "база" "таблица" "[имя поля] = [переменная для содержимого активной ячейки]"

работает безотказно, НО только до того самого момента, пока в [переменной для содержимого активной ячейки] не обнаруживается запись с кавычками (например, в поле "Организация" оказывается подобная запись: ООО "Заправка в воздухе").
В результате формируется запрос, который некорректно впоследствии прочитывается (прога пишет, что не хватает оператора в запросе (понятное дело, раз кавычки истолковываются как часть синтаксиса самой команды поиска):

Анализ возможных решений:

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

2) Замена кавычек перед формированием запроса на эски-код [#34] не дал результата, в запросе все равно потом фигурируют кавычки и NeoBookDBPro учитывает их как часть синтаксиса команды dbpQuery.

3) Автозамена на другие символы или удаление кавычек перед формированием запроса тоже не подходит, поскольку поиск должен осуществляться по буквальному содержимому выделяемой пользователем ячейки таблицы (иначе команда просто не найдет ни одной записи, если вместо существующих записей - ООО "Заправка в воздухе" - будет искать несуществующую в базе запись - ООО Заправка в воздухе).

На данный момент код выглядит так:

Есть идеи, как научить команду dbpQuery отличать "свои" кавычки от "чужих"?


Автор - Вадим
Дата добавления - 15 Апреля 2011 в 17:21
ip19216811Дата: Пт, 15 Апреля 2011, 20:19 | Сообщение # 2
Любопытный
Когда то символы ' и " попались и мне на пути в MySQL ( правда не знаю какую БД юзаешь ты ), так вот насколько я понял в БД в самих полях спец.символы должны присутствовать только в виде мнемоник http://www.mexxs.net/reviews.php?file=39 :)
 
СообщениеКогда то символы ' и " попались и мне на пути в MySQL ( правда не знаю какую БД юзаешь ты ), так вот насколько я понял в БД в самих полях спец.символы должны присутствовать только в виде мнемоник http://www.mexxs.net/reviews.php?file=39 :)

Автор - ip19216811
Дата добавления - 15 Апреля 2011 в 20:19
ВадимДата: Пт, 15 Апреля 2011, 20:50 | Сообщение # 3
Генератор идей
Quote (ip19216811)
правда не знаю какую БД юзаешь ты
Access
Quote (ip19216811)
в самих полях спец.символы должны присутствовать только в виде мнемоник
Ой! Это что за зверь! scared
Запрос вида
dbpQuery "Kultura" "Result" "fORGANIZATION = [#34]ООО "Заправка в воздухе"[#34]"
выдает ошибку синтаксиса... Что-то я не так делаю или не то... :D
ip19216811, спасибо за новую инфу!
Наверное и применение спец.символов в Access где-то должно быть описано... Надо погуглить...

Добавлено (15 Апрель 2011, 20:50)
---------------------------------------------
Э-э... а вот форум принял мнемоники и выдал вместо них (в последнем моем примере) знаки кавычек, так что не видно, что я вместо них применил мнемоники.


Бесплатный онлайн курс программирования в VisualNEO Win (NeoBook)
 
Сообщение
Quote (ip19216811)
правда не знаю какую БД юзаешь ты
Access
Quote (ip19216811)
в самих полях спец.символы должны присутствовать только в виде мнемоник
Ой! Это что за зверь! scared
Запрос вида
dbpQuery "Kultura" "Result" "fORGANIZATION = [#34]ООО "Заправка в воздухе"[#34]"
выдает ошибку синтаксиса... Что-то я не так делаю или не то... :D
ip19216811, спасибо за новую инфу!
Наверное и применение спец.символов в Access где-то должно быть описано... Надо погуглить...

Добавлено (15 Апрель 2011, 20:50)
---------------------------------------------
Э-э... а вот форум принял мнемоники и выдал вместо них (в последнем моем примере) знаки кавычек, так что не видно, что я вместо них применил мнемоники.


Автор - Вадим
Дата добавления - 15 Апреля 2011 в 20:50
ip19216811Дата: Пт, 15 Апреля 2011, 21:15 | Сообщение # 4
Любопытный
Quote (Вадим)
Запрос вида
dbpQuery "Kultura" "Result" "fORGANIZATION = [#34]ООО "Заправка в воздухе"[#34]"

mda двойная кавычка это

Code
"  или    " , а не [#34]

Попробуй отправить запрос так

Code
dbpQuery "Kultura" "Result" "fORGANIZATION = "ООО "Заправка в воздухе"""

или так

Code
dbpQuery "Kultura" "Result" "fORGANIZATION =  "ООО "Заправка в воздухе    """

Quote (Вадим)
Э-э... а вот форум принял мнемоники и выдал вместо них (в последнем моем примере) знаки кавычек, так что не видно, что я вместо них применил мнемоники.

Елки даже в коде преобразует мнемонику , сейчас текстовичек прикреплю

Прикрепления: 12345.rar (0.2 Kb)


Сообщение отредактировано
ip19216811 - Пт, 15 Апреля 2011, 21:18
 
Сообщение
Quote (Вадим)
Запрос вида
dbpQuery "Kultura" "Result" "fORGANIZATION = [#34]ООО "Заправка в воздухе"[#34]"

mda двойная кавычка это

Code
"  или    " , а не [#34]

Попробуй отправить запрос так

Code
dbpQuery "Kultura" "Result" "fORGANIZATION = "ООО "Заправка в воздухе"""

или так

Code
dbpQuery "Kultura" "Result" "fORGANIZATION =  "ООО "Заправка в воздухе    """

Quote (Вадим)
Э-э... а вот форум принял мнемоники и выдал вместо них (в последнем моем примере) знаки кавычек, так что не видно, что я вместо них применил мнемоники.

Елки даже в коде преобразует мнемонику , сейчас текстовичек прикреплю


Автор - ip19216811
Дата добавления - 15 Апреля 2011 в 21:15
ВадимДата: Пт, 15 Апреля 2011, 22:00 | Сообщение # 5
Генератор идей
Quote (ip19216811)
кавычка это
Не, в NB есть глобальная переменная - [#34] (означает кавычки), она как раз используется тогда, когда нельзя использовать кавычки, чтобы не натолкнуться на проблемы с синтаксисом.

Попробовал примеры из текстовика (спасибо!), но не помогло. И в самой базе видны мнемоники вместо кавычек и поиск выдает ошибки (даже если крайние мнемоники заменить на [#34]).

Добавлено (15 Апрель 2011, 22:00)
---------------------------------------------
Если я правильно понял, то если пользователь вводит в поле ввода кавычки, прога при сохранении в базу заменяет их на мнемоники и хранит в базе в таком виде, верно?

Прикрепления: 6331907.png (63.8 Kb)


Бесплатный онлайн курс программирования в VisualNEO Win (NeoBook)
 
Сообщение
Quote (ip19216811)
кавычка это
Не, в NB есть глобальная переменная - [#34] (означает кавычки), она как раз используется тогда, когда нельзя использовать кавычки, чтобы не натолкнуться на проблемы с синтаксисом.

Попробовал примеры из текстовика (спасибо!), но не помогло. И в самой базе видны мнемоники вместо кавычек и поиск выдает ошибки (даже если крайние мнемоники заменить на [#34]).

Добавлено (15 Апрель 2011, 22:00)
---------------------------------------------
Если я правильно понял, то если пользователь вводит в поле ввода кавычки, прога при сохранении в базу заменяет их на мнемоники и хранит в базе в таком виде, верно?


Автор - Вадим
Дата добавления - 15 Апреля 2011 в 22:00
ip19216811Дата: Пт, 15 Апреля 2011, 22:16 | Сообщение # 6
Любопытный
Quote (Вадим)
Не, в NB есть глобальная переменная - [#34] (означает кавычки), она как раз используется тогда, когда нельзя использовать кавычки, чтобы не натолкнуться на проблемы с синтаксисом.

pardon просто по аналогии с MySQL посоветовал, в нем внутри полей вместо символов которые используются для указания полей должны быть заменены на мнемонику, по этому скорее всего и в данном случае есть какой то заменитель но наверное не вида [#34], сам по суди вдруг ты эту БД будешь просматривать не с помощью своей программы и код [#34] будет выведен не в виде двойной кавычки, а как [#34]. Вот тут походу http://forum.ixbt.com/topic.cgi?id=26:39429 кто то уже ломал голову над этим, и самый простой выход ему советовали заменить двойные кавычки одинарными

Добавлено (15 Апрель 2011, 22:16)
---------------------------------------------

Quote (Вадим)
Если я правильно понял, то если пользователь вводит в поле ввода кавычки, прога при сохранении в базу заменяет их на мнемоники и хранит в базе в таком виде, верно?

В MySQL да, так как иначе потом при импорте MySQL дампа будут косяки, и тут либо как написано в ссылке выше поступи (там замени на одинарные кавычки, или кавычки являющиеся частью данных удвой как показано в примере там же) или же рой инфу

Сообщение отредактировано
ip19216811 - Пт, 15 Апреля 2011, 22:19
 
Сообщение
Quote (Вадим)
Не, в NB есть глобальная переменная - [#34] (означает кавычки), она как раз используется тогда, когда нельзя использовать кавычки, чтобы не натолкнуться на проблемы с синтаксисом.

pardon просто по аналогии с MySQL посоветовал, в нем внутри полей вместо символов которые используются для указания полей должны быть заменены на мнемонику, по этому скорее всего и в данном случае есть какой то заменитель но наверное не вида [#34], сам по суди вдруг ты эту БД будешь просматривать не с помощью своей программы и код [#34] будет выведен не в виде двойной кавычки, а как [#34]. Вот тут походу http://forum.ixbt.com/topic.cgi?id=26:39429 кто то уже ломал голову над этим, и самый простой выход ему советовали заменить двойные кавычки одинарными

Добавлено (15 Апрель 2011, 22:16)
---------------------------------------------

Quote (Вадим)
Если я правильно понял, то если пользователь вводит в поле ввода кавычки, прога при сохранении в базу заменяет их на мнемоники и хранит в базе в таком виде, верно?

В MySQL да, так как иначе потом при импорте MySQL дампа будут косяки, и тут либо как написано в ссылке выше поступи (там замени на одинарные кавычки, или кавычки являющиеся частью данных удвой как показано в примере там же) или же рой инфу


Автор - ip19216811
Дата добавления - 15 Апреля 2011 в 22:16
ВадимДата: Пт, 15 Апреля 2011, 22:32 | Сообщение # 7
Генератор идей
Quote (ip19216811)
или кавычки являющиеся частью данных удвой как показано в примере там же) или же рой инфу
...так удвоенные и отображаются в сетке...

Но должен же плагин NeoBookDBPro как-то справляться с кавычками в данных! crazy

Ладно, буду рыть, куда тут денешься, из подводной лодки...


Бесплатный онлайн курс программирования в VisualNEO Win (NeoBook)
 
Сообщение
Quote (ip19216811)
или кавычки являющиеся частью данных удвой как показано в примере там же) или же рой инфу
...так удвоенные и отображаются в сетке...

Но должен же плагин NeoBookDBPro как-то справляться с кавычками в данных! crazy

Ладно, буду рыть, куда тут денешься, из подводной лодки...


Автор - Вадим
Дата добавления - 15 Апреля 2011 в 22:32
ip19216811Дата: Пт, 15 Апреля 2011, 22:39 | Сообщение # 8
Любопытный
Quote (Вадим)
...так удвоенные и отображаются в сетке...

Попробуй сделать именно как в том примере что по ссылке, если применить к твоему то по ходу так

Code

dbpQuery "Kultura" "Result" "fORGANIZATION = ООО ""Заправка в воздухе"""

ПыСы не уверен что перед ООО в твоем варианте должна стоять двойная кавычка, если там должна по умолчанию стоять двойная кавычка то пробуй так

Code

dbpQuery "Kultura" "Result" "fORGANIZATION = "ООО ""Заправка в воздухе""""


Сообщение отредактировано
ip19216811 - Пт, 15 Апреля 2011, 22:41
 
Сообщение
Quote (Вадим)
...так удвоенные и отображаются в сетке...

Попробуй сделать именно как в том примере что по ссылке, если применить к твоему то по ходу так

Code

dbpQuery "Kultura" "Result" "fORGANIZATION = ООО ""Заправка в воздухе"""

ПыСы не уверен что перед ООО в твоем варианте должна стоять двойная кавычка, если там должна по умолчанию стоять двойная кавычка то пробуй так

Code

dbpQuery "Kultura" "Result" "fORGANIZATION = "ООО ""Заправка в воздухе""""

Автор - ip19216811
Дата добавления - 15 Апреля 2011 в 22:39
mishemДата: Пт, 15 Апреля 2011, 22:41 | Сообщение # 9
Эксперт форума
Вадим, здесь наверно тебе как раз и сможет помочь SQL запрос. Тереби Юру.
Попробуй еще заключит в (). мож поможет, хотя вряд ли.


Не хочешь читать хелп?

Если хелп и форум не помогли, тогда все ответы здесь



Если вы думаете, что сможете — вы сможете, если думаете, что нет — вы правы.
 
СообщениеВадим, здесь наверно тебе как раз и сможет помочь SQL запрос. Тереби Юру.
Попробуй еще заключит в (). мож поможет, хотя вряд ли.

Автор - mishem
Дата добавления - 15 Апреля 2011 в 22:41
YURIYДата: Пт, 15 Апреля 2011, 22:42 | Сообщение # 10
WebMaster
Зашёл сюда на минутку. Подробно не вникал в тему, но обычно двойные кавычки экранируются, чтобы отделиться от строки самого запроса. Делается это с помощью слэша:

\"

То есть: "Здесь запрос, а вот - кавычка: \""

 
СообщениеЗашёл сюда на минутку. Подробно не вникал в тему, но обычно двойные кавычки экранируются, чтобы отделиться от строки самого запроса. Делается это с помощью слэша:

\"

То есть: "Здесь запрос, а вот - кавычка: \""


Автор - YURIY
Дата добавления - 15 Апреля 2011 в 22:42
mishemДата: Пт, 15 Апреля 2011, 22:44 | Сообщение # 11
Эксперт форума
Еще что можно попробовать. У тебя эти поля типа строкового? Переназначить поля и сделать их МЕМО. Тогда при поиске не надо будет заключать в кавычки. Может быть так и прокатит.

Не хочешь читать хелп?

Если хелп и форум не помогли, тогда все ответы здесь



Если вы думаете, что сможете — вы сможете, если думаете, что нет — вы правы.
 
СообщениеЕще что можно попробовать. У тебя эти поля типа строкового? Переназначить поля и сделать их МЕМО. Тогда при поиске не надо будет заключать в кавычки. Может быть так и прокатит.

Автор - mishem
Дата добавления - 15 Апреля 2011 в 22:44
ВадимДата: Пт, 15 Апреля 2011, 23:30 | Сообщение # 12
Генератор идей
Quote (YURIY)
"Здесь запрос, а вот - кавычка: \""

Не прокатывает, к сожалению. Запрос, вида:

dbpExecSQL "Kultura" "SELECT * FROM Result WHERE fORGANIZATION = ООО \"Заправка в воздухе\"" ""

вызывает у дебаггера удивление, в отношении третьего параметра.

Как и такой запрос:

.dbpExecSQL "Kultura" "SELECT * FROM Result WHERE fORGANIZATION = [#34]ООО \"Заправка в воздухе\"[#34]" ""

Quote (mishem)
Попробуй еще заключит в ()
Попробовал и это, заключил кавычки самих данных в скобки - не помогло.

Но ведь должны же они как-то экранироваться то в конце концов! scared

Quote (mishem)
У тебя эти поля типа строкового? Переназначить поля и сделать их МЕМО.

Да, строкового. Сейчас попробую!

Добавлено (15 Апрель 2011, 23:21)
---------------------------------------------
mishem, с memo тоже не прокатило.
Результат такой же в точности, как и с типом string (пишет, что не хватает оператора, т.е. видит кавычки как управляющие символы, а не просто как часть данных...).

Добавлено (15 Апрель 2011, 23:30)
---------------------------------------------



Бесплатный онлайн курс программирования в VisualNEO Win (NeoBook)
 
Сообщение
Quote (YURIY)
"Здесь запрос, а вот - кавычка: \""

Не прокатывает, к сожалению. Запрос, вида:

dbpExecSQL "Kultura" "SELECT * FROM Result WHERE fORGANIZATION = ООО \"Заправка в воздухе\"" ""

вызывает у дебаггера удивление, в отношении третьего параметра.

Как и такой запрос:

.dbpExecSQL "Kultura" "SELECT * FROM Result WHERE fORGANIZATION = [#34]ООО \"Заправка в воздухе\"[#34]" ""

Quote (mishem)
Попробуй еще заключит в ()
Попробовал и это, заключил кавычки самих данных в скобки - не помогло.

Но ведь должны же они как-то экранироваться то в конце концов! scared

Quote (mishem)
У тебя эти поля типа строкового? Переназначить поля и сделать их МЕМО.

Да, строкового. Сейчас попробую!

Добавлено (15 Апрель 2011, 23:21)
---------------------------------------------
mishem, с memo тоже не прокатило.
Результат такой же в точности, как и с типом string (пишет, что не хватает оператора, т.е. видит кавычки как управляющие символы, а не просто как часть данных...).

Добавлено (15 Апрель 2011, 23:30)
---------------------------------------------


Автор - Вадим
Дата добавления - 15 Апреля 2011 в 23:30
Alex3AДата: Сб, 16 Апреля 2011, 02:52 | Сообщение # 13
Друг клуба ММВ
Вадим, попробуй одинарные кавычки, может прокатит, чет помню с мускулом вроде прокатывало.
А мож еще попробуй через переменную, да и почитай какофф синтаксис и правила написания sql в применяемой базе.
 
СообщениеВадим, попробуй одинарные кавычки, может прокатит, чет помню с мускулом вроде прокатывало.
А мож еще попробуй через переменную, да и почитай какофф синтаксис и правила написания sql в применяемой базе.

Автор - Alex3A
Дата добавления - 16 Апреля 2011 в 02:52
СергейДата: Сб, 16 Апреля 2011, 04:36 | Сообщение # 14
Необукер
Вадим, я тоже бодался с такой бедой, сейчас не помню чем закончилось решение, но вроде эта беда самаго плагина. Толи он удаляет слеши, то ли слешует еще раз сам, короче вывод я сделал такой: что вся замарока в плагине и его обработка твоих sql запросов, т.к. в пхп подобный запрос со слешами проходит без проблем.
Как обошел этот момент не помню redface
Возможно, через функцию Петра StrToAsii, помню, что применял, но оставил или нет незнаю
Либо с подменой ковычек на другие символы...
 
СообщениеВадим, я тоже бодался с такой бедой, сейчас не помню чем закончилось решение, но вроде эта беда самаго плагина. Толи он удаляет слеши, то ли слешует еще раз сам, короче вывод я сделал такой: что вся замарока в плагине и его обработка твоих sql запросов, т.к. в пхп подобный запрос со слешами проходит без проблем.
Как обошел этот момент не помню redface
Возможно, через функцию Петра StrToAsii, помню, что применял, но оставил или нет незнаю
Либо с подменой ковычек на другие символы...

Автор - Сергей
Дата добавления - 16 Апреля 2011 в 04:36
ВадимДата: Вс, 17 Апреля 2011, 23:13 | Сообщение # 15
Генератор идей
Quote (Alex3A)
попробуй одинарные кавычки
Спасибо, Alex3A! Прокатывает с апострофом ('), в т.ч. двойным ('') и обратным апострофом (`), в т.ч. двойным (``):

dbpQuery "Kultura" "Result" "fORGANIZATION = [#34]ООО ''Заправка в воздухе''[#34]"

dbpQuery "Kultura" "Result" "fORGANIZATION = [#34]ООО ``Заправка в воздухе``[#34]"

Причем dbpQuery работает точно также как и dbpExecSQL.

В случае с двойным апострофом вообще для пользователя разницы никакой не будет, это замечательно! Нужно будет лишь организовать автозамену при вводе - если двойные кавычки, то заменять на двойной апостроф. Таким образом в базу попадут не реальные кавычки, а два апострофа вместо каждой двойной кавычки. По крайней мере, это пока единственный рабочий способ - позволяет сохранить (хотя бы визуально) кавычки и осуществлять поиск с использованием данных содержащих такие "квазикавычки".

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

Но может я что не так делал... Попробовал варианты запросов (предполагая найти запись: ООО "Заправка в воздухе"):

окружив обратными апострофами:
dbpQuery "Kultura" "Result" "fORGANIZATION = [#34]ООО `"`Заправка в воздухе`"`[#34]"

dbpExecSQL "Kultura" "SELECT * FROM Result WHERE fORGANIZATION = [#34]ООО `"`Заправка в воздухе`"`[#34]" ""

окружив апострофами:
dbpExecSQL "Kultura" "SELECT * FROM Result WHERE fORGANIZATION = [#34]ООО '"'Заправка в воздухе'"'[#34]" ""

Во всех случаях дебагер отмечает ошибку в третьем параметре.

Мне кажется, что должен быть какой-то способ экранировать кавычку...

Сергей,

Quote (Сергей)
Как обошел этот момент не помню. Возможно, через функцию Петра StrToAsii
Сергей, можешь заглянуть в тот проект или вспомнить логику как ты поборол кавычки?


Бесплатный онлайн курс программирования в VisualNEO Win (NeoBook)
 
Сообщение
Quote (Alex3A)
попробуй одинарные кавычки
Спасибо, Alex3A! Прокатывает с апострофом ('), в т.ч. двойным ('') и обратным апострофом (`), в т.ч. двойным (``):

dbpQuery "Kultura" "Result" "fORGANIZATION = [#34]ООО ''Заправка в воздухе''[#34]"

dbpQuery "Kultura" "Result" "fORGANIZATION = [#34]ООО ``Заправка в воздухе``[#34]"

Причем dbpQuery работает точно также как и dbpExecSQL.

В случае с двойным апострофом вообще для пользователя разницы никакой не будет, это замечательно! Нужно будет лишь организовать автозамену при вводе - если двойные кавычки, то заменять на двойной апостроф. Таким образом в базу попадут не реальные кавычки, а два апострофа вместо каждой двойной кавычки. По крайней мере, это пока единственный рабочий способ - позволяет сохранить (хотя бы визуально) кавычки и осуществлять поиск с использованием данных содержащих такие "квазикавычки".

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

Но может я что не так делал... Попробовал варианты запросов (предполагая найти запись: ООО "Заправка в воздухе"):

окружив обратными апострофами:
dbpQuery "Kultura" "Result" "fORGANIZATION = [#34]ООО `"`Заправка в воздухе`"`[#34]"

dbpExecSQL "Kultura" "SELECT * FROM Result WHERE fORGANIZATION = [#34]ООО `"`Заправка в воздухе`"`[#34]" ""

окружив апострофами:
dbpExecSQL "Kultura" "SELECT * FROM Result WHERE fORGANIZATION = [#34]ООО '"'Заправка в воздухе'"'[#34]" ""

Во всех случаях дебагер отмечает ошибку в третьем параметре.

Мне кажется, что должен быть какой-то способ экранировать кавычку...

Сергей,

Quote (Сергей)
Как обошел этот момент не помню. Возможно, через функцию Петра StrToAsii
Сергей, можешь заглянуть в тот проект или вспомнить логику как ты поборол кавычки?

Автор - Вадим
Дата добавления - 17 Апреля 2011 в 23:13
DEMBELДата: Пн, 18 Апреля 2011, 00:37 | Сообщение # 16
Наш дизайнер
Quote (Вадим)
Мне кажется, что должен быть какой-то способ экранировать кавычку...

обязан быть такой способ, ты еще раз пошерсти в гугле, там народ тоже интересуется

По уму предлагают задавать параметрический запрос

еще попробуй каждую одинарную кавычку заменить двойной

Добавлено (18 Апрель 2011, 00:35)
---------------------------------------------
тут еще чтото микрософт напереводил...

Добавлено (18 Апрель 2011, 00:37)
---------------------------------------------

Quote (DEMBEL)
еще попробуй каждую одинарную кавычку заменить двойной

типа

FROM Result WHERE fORGANIZATION = "ООО ""Заправка в воздухе"""

замени на #34 либо только крайние кавычки самого запроса, либо вообще все.


Как задавать вопросы

Win7x64 SP1 Neobook v5.70 (Trial)
WinXP SP3 Neobook v5.62
 
Сообщение
Quote (Вадим)
Мне кажется, что должен быть какой-то способ экранировать кавычку...

обязан быть такой способ, ты еще раз пошерсти в гугле, там народ тоже интересуется

По уму предлагают задавать параметрический запрос

еще попробуй каждую одинарную кавычку заменить двойной

Добавлено (18 Апрель 2011, 00:35)
---------------------------------------------
тут еще чтото микрософт напереводил...

Добавлено (18 Апрель 2011, 00:37)
---------------------------------------------

Quote (DEMBEL)
еще попробуй каждую одинарную кавычку заменить двойной

типа

FROM Result WHERE fORGANIZATION = "ООО ""Заправка в воздухе"""

замени на #34 либо только крайние кавычки самого запроса, либо вообще все.


Автор - DEMBEL
Дата добавления - 18 Апреля 2011 в 00:37
ВадимДата: Пн, 18 Апреля 2011, 00:45 | Сообщение # 17
Генератор идей
Quote (DEMBEL)
обязан быть такой способ, ты еще раз пошерсти в гугле, там народ тоже интересуется
Пошерстим, почешем, авось вычешем...

По первой ссылке не смог выйти на тему, полупустую страницу показывает с текстом:

Quote (DEMBEL)
еще попробуй каждую одинарную кавычку заменить двойной

Это не понял, расшифруй, если не трудно. В базу сейчас идут итак двойные, если после ввода пользователем ничего с ними не делать. Соответственно при запросе нечего менять - одинарных нет.
Quote (DEMBEL)
типа FROM Result WHERE fORGANIZATION = "ООО ""Заправка в воздухе""" замени на #34 либо только крайние кавычки самого запроса, либо вообще все.

А, вот ты о чем. Нет, я всё это перепробовал, прежде чем вопрос на форуме запостить. И все эски-коды перепробовал - с прямыми, обратными и вывернутыми наизнанку кавычками :)
На твой запрос прога скажет: "третий параметр не содержит оператор".

Тыкс, почитаю пока по второй ссылке (спасибо!)...


Бесплатный онлайн курс программирования в VisualNEO Win (NeoBook)
 
Сообщение
Quote (DEMBEL)
обязан быть такой способ, ты еще раз пошерсти в гугле, там народ тоже интересуется
Пошерстим, почешем, авось вычешем...

По первой ссылке не смог выйти на тему, полупустую страницу показывает с текстом:

Quote (DEMBEL)
еще попробуй каждую одинарную кавычку заменить двойной

Это не понял, расшифруй, если не трудно. В базу сейчас идут итак двойные, если после ввода пользователем ничего с ними не делать. Соответственно при запросе нечего менять - одинарных нет.
Quote (DEMBEL)
типа FROM Result WHERE fORGANIZATION = "ООО ""Заправка в воздухе""" замени на #34 либо только крайние кавычки самого запроса, либо вообще все.

А, вот ты о чем. Нет, я всё это перепробовал, прежде чем вопрос на форуме запостить. И все эски-коды перепробовал - с прямыми, обратными и вывернутыми наизнанку кавычками :)
На твой запрос прога скажет: "третий параметр не содержит оператор".

Тыкс, почитаю пока по второй ссылке (спасибо!)...


Автор - Вадим
Дата добавления - 18 Апреля 2011 в 00:45
DEMBELДата: Пн, 18 Апреля 2011, 00:50 | Сообщение # 18
Наш дизайнер
http://it.toolbox.com/wiki....ries%3F

Добавлено (18 Апрель 2011, 00:49)
---------------------------------------------
первый раз такое вижу, ссылка не открывается с другого домена...

Добавлено (18 Апрель 2011, 00:50)
---------------------------------------------
поищи по сайту на предмет How do I escape single quotes in SQL queries?


Как задавать вопросы

Win7x64 SP1 Neobook v5.70 (Trial)
WinXP SP3 Neobook v5.62
 
Сообщениеhttp://it.toolbox.com/wiki....ries%3F

Добавлено (18 Апрель 2011, 00:49)
---------------------------------------------
первый раз такое вижу, ссылка не открывается с другого домена...

Добавлено (18 Апрель 2011, 00:50)
---------------------------------------------
поищи по сайту на предмет How do I escape single quotes in SQL queries?


Автор - DEMBEL
Дата добавления - 18 Апреля 2011 в 00:50
ВадимДата: Пн, 18 Апреля 2011, 23:49 | Сообщение # 19
Генератор идей
Quote (DEMBEL)
поищи по сайту на предмет How do I escape single quotes in SQL queries?

ОК!

Добавлено (18 Апрель 2011, 01:24)
---------------------------------------------
Там приводится следующее решение (удвоение кавычек):

"Это строка, которая включает в себя" "текст в кавычках" "в середине"

"Это строка, которая заканчивается" "текстом в кавычках" ""

Но в NB это не прокатывает. Кавычки однозначно трактуются как управляющий символ.
Например, вызывают ошибку в третьем параметре следующие запросы (обрамление в [#34] требуется, поскольку строковые данные содержат пробел):

dbpExecSQL "Kultura" "SELECT * FROM Result WHERE fORGANIZATION = [#34]ООО ""Заправка в воздухе""[#34]" ""

dbpExecSQL "Kultura" "SELECT * FROM Result WHERE fORGANIZATION = [#34]ООО ""Заправка в воздухе"[#34]" ""

Но раз должен (по логике вещей) быть экранирующий символ, то остается видимо проверить эту гипотезу простым перебором всех символов, подставляя их перед двойной кавычкой... %)

Как делать параметрический запрос я не врубился... %)

Может быть еще есть способ с функциями "реплейс" в запросе, но как с ними работать мне тоже непонятно пока что...

Наверное нужно просто задавать вопрос разработчикам NB о том, как экранировать кавычки и другие спецсимволы...

Добавлено (18 Апрель 2011, 23:30)
---------------------------------------------

Quote (Вадим)
Наверное нужно просто задавать вопрос разработчикам NB
Ура!!! dance
Разрабы ответили (да хранят их небо и добрые люди!!), решение оказалось до смешного простым :D . Наверное единственный вариант, какой я не пробовал :) (и лишь потому, что оголтело следовал инструкциям в справке). Оказывается, нужно всё содержимое активной ячейки помещать в одинарные кавычки (не зря про них Алекс вспоминал!), а глобальную переменную [#34] использовать для того, чтобы закодировать кавычки, имеющиеся в самих данных:

Например, чтобы найти запись ООО "Заправка в воздухе" запрос будет выглядеть так:

dbpQuery "Kultura" "Result" "fORGANIZATION = 'ООО [#34]Заправка в воздухе[#34]'"

При динамическом формировании составного запроса (чтобы работало "наложение фильтров"), это означает, что нужно будет составлять запрос с учетом содержимого (если в переменной активной ячейки есть кавычки, то заменять их на глобальную переменную [#34] и помещать всё содержимое в одинарные кавычки (апостроф):

Добавлено (18 Апрель 2011, 23:49)
---------------------------------------------



Бесплатный онлайн курс программирования в VisualNEO Win (NeoBook)

Сообщение отредактировано
Вадим - Пн, 18 Апреля 2011, 23:44
 
Сообщение
Quote (DEMBEL)
поищи по сайту на предмет How do I escape single quotes in SQL queries?

ОК!

Добавлено (18 Апрель 2011, 01:24)
---------------------------------------------
Там приводится следующее решение (удвоение кавычек):

"Это строка, которая включает в себя" "текст в кавычках" "в середине"

"Это строка, которая заканчивается" "текстом в кавычках" ""

Но в NB это не прокатывает. Кавычки однозначно трактуются как управляющий символ.
Например, вызывают ошибку в третьем параметре следующие запросы (обрамление в [#34] требуется, поскольку строковые данные содержат пробел):

dbpExecSQL "Kultura" "SELECT * FROM Result WHERE fORGANIZATION = [#34]ООО ""Заправка в воздухе""[#34]" ""

dbpExecSQL "Kultura" "SELECT * FROM Result WHERE fORGANIZATION = [#34]ООО ""Заправка в воздухе"[#34]" ""

Но раз должен (по логике вещей) быть экранирующий символ, то остается видимо проверить эту гипотезу простым перебором всех символов, подставляя их перед двойной кавычкой... %)

Как делать параметрический запрос я не врубился... %)

Может быть еще есть способ с функциями "реплейс" в запросе, но как с ними работать мне тоже непонятно пока что...

Наверное нужно просто задавать вопрос разработчикам NB о том, как экранировать кавычки и другие спецсимволы...

Добавлено (18 Апрель 2011, 23:30)
---------------------------------------------

Quote (Вадим)
Наверное нужно просто задавать вопрос разработчикам NB
Ура!!! dance
Разрабы ответили (да хранят их небо и добрые люди!!), решение оказалось до смешного простым :D . Наверное единственный вариант, какой я не пробовал :) (и лишь потому, что оголтело следовал инструкциям в справке). Оказывается, нужно всё содержимое активной ячейки помещать в одинарные кавычки (не зря про них Алекс вспоминал!), а глобальную переменную [#34] использовать для того, чтобы закодировать кавычки, имеющиеся в самих данных:

Например, чтобы найти запись ООО "Заправка в воздухе" запрос будет выглядеть так:

dbpQuery "Kultura" "Result" "fORGANIZATION = 'ООО [#34]Заправка в воздухе[#34]'"

При динамическом формировании составного запроса (чтобы работало "наложение фильтров"), это означает, что нужно будет составлять запрос с учетом содержимого (если в переменной активной ячейки есть кавычки, то заменять их на глобальную переменную [#34] и помещать всё содержимое в одинарные кавычки (апостроф):

Добавлено (18 Апрель 2011, 23:49)
---------------------------------------------


Автор - Вадим
Дата добавления - 18 Апреля 2011 в 23:49
Alex3AДата: Вт, 19 Апреля 2011, 10:19 | Сообщение # 20
Друг клуба ММВ
Quote (Вадим)
Оказывается, нужно всё содержимое активной ячейки помещать в одинарные кавычки (не зря про них Алекс вспоминал!),

Подобное встречается в некоторых языках програмирования, в том же php, где текст между одними кавычками интерпритируется, а между другими нет, по этому и послал тебя изучать синтаксис. В системах с разным синтаксисом нужно еще поизголятся, пока составиш строку удовлетворяющую и одного и другого. :D
 
Сообщение
Quote (Вадим)
Оказывается, нужно всё содержимое активной ячейки помещать в одинарные кавычки (не зря про них Алекс вспоминал!),

Подобное встречается в некоторых языках програмирования, в том же php, где текст между одними кавычками интерпритируется, а между другими нет, по этому и послал тебя изучать синтаксис. В системах с разным синтаксисом нужно еще поизголятся, пока составиш строку удовлетворяющую и одного и другого. :D

Автор - Alex3A
Дата добавления - 19 Апреля 2011 в 10:19
ВадимДата: Вс, 08 Мая 2011, 23:29 | Сообщение # 21
Генератор идей
Обнаружился важный нюанс с обработкой кавычек в поисковом запросе, а именно, когда нужно применить подстановочный символ "%".

Хочу поделиться решением. Может сэкономит кому-то несколько часов жизни :)

Если запрос содержит кавычки (которые как было показано выше нужно в таком случае заменить на [#34]) и, кроме того, если нужно использовать оператор LIKE с подстановочным символом %, то не следует применять глобальную переменную [#34] для закавычивания запроса ([#34]%[findX]%[#34]), вместо нее необходимо использовать одинарные кавычки ('%[findX]%').



Бесплатный онлайн курс программирования в VisualNEO Win (NeoBook)

Сообщение отредактировано
Вадим - Вс, 08 Мая 2011, 23:40
 
СообщениеОбнаружился важный нюанс с обработкой кавычек в поисковом запросе, а именно, когда нужно применить подстановочный символ "%".

Хочу поделиться решением. Может сэкономит кому-то несколько часов жизни :)

Если запрос содержит кавычки (которые как было показано выше нужно в таком случае заменить на [#34]) и, кроме того, если нужно использовать оператор LIKE с подстановочным символом %, то не следует применять глобальную переменную [#34] для закавычивания запроса ([#34]%[findX]%[#34]), вместо нее необходимо использовать одинарные кавычки ('%[findX]%').


Автор - Вадим
Дата добавления - 08 Мая 2011 в 23:29
  • Страница 1 из 1
  • 1
Поиск: