Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/98: Рейтинг темы: голосов - 98, средняя оценка - 4.50
5 / 5 / 2
Регистрация: 27.08.2011
Сообщений: 75

Если в БД встречается запись заключенная в кавычки, как изменить SQL запрос:

05.05.2012, 11:24. Показов 19204. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Например: ООО "Рога и копыта". Добавить квадратные скобки?
SQL
1
2
SELECT * FROM MyTable
WHERE (Organization LIKE "%' + Edit1.Text + '%")
Добавлено через 13 минут
Вот более полный код:
Delphi
1
2
3
4
5
6
7
8
procedure TfrmMain.btnSearchClick(Sender: TObject);
begin
  DM.qryMain.Close;
  DM.qryMain.SQL.Clear;
  DM.qryMain.SQL.Text := 'SELECT * FROM MyTable';
  DM.qryMain.SQL.Add(' WHERE (Organization Like "%' + edtSearch.Text + '%")');
  DM.qryMain.Open;
end;
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.05.2012, 11:24
Ответы с готовыми решениями:

Подстрока, заключенная в кавычки
Всем добрый день! Вот такая примерно задачка. Имеется string S1="This is the long string having some words \"in...

Как быть если встречается знак " ' " или сразу двойные кавычки
Делаю импорт из базы mysql -> xml -> access Формат xml такой <animal kind="1" nick="Колянчик" pass="ОВД...

Как сделать запрос UPDATE, если "мешают" кавычки
Добрый день. Необходимо сделать запрос: $results = $mysqli->query(" UPDATE mp_charact SET id_act=$_POST, price_rozn=$_POST,...

15
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
05.05.2012, 11:34
Geksod, квадратные скобки ставятся лишь в случае наличия пробелов в названии поля, а значениях они воспринимаются просто как данные и не более того
0
5 / 5 / 2
Регистрация: 27.08.2011
Сообщений: 75
05.05.2012, 11:41  [ТС]
Странно, по полю ФИО, допустим, поиск идет замечательно, но как только добавляю поиск по организациям, в которых названия в кавычках - еррор.
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
05.05.2012, 11:42
Geksod, ты бы лучше явил нам ошибку(в оригинале, переводить не надо)... и запрос, который его вызывает (сам текст, а не код, который его генерит)
0
5 / 5 / 2
Регистрация: 27.08.2011
Сообщений: 75
05.05.2012, 11:54  [ТС]
Текст ошибки, его даже переводить не надо
А кода как такового (если вы про это конечно) в ADOQuery нет, он добавляется следующим образом:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
const
  SQLTest =           'SELECT * FROM Table_Abonent';
...
 
procedure TfrmMain.btnSearchClick(Sender: TObject);
begin
  DM.qryMain.Close;
  DM.qryMain.SQL.Clear;
  DM.qryMain.SQL.Text := SQLTest;
  DM.qryMain.SQL.Add(' WHERE (FIO_Abonenta Like "%' + edtSearchFIO.Text + '%")');
  DM.qryMain.SQL.Add(' AND (Organization Like "%' + cbSearchOrganization.Text + '%")');
  DM.qryMain.Open;
end;
Делаю выбор из комбобокса организации, в названии которой нет двойных кавычек - работает. Другое - вызывает ошибку. Где-то надо что-то добавить (квадратные скобки отпали, значит нехватает еще кавычек)
Миниатюры
Если в БД встречается запись заключенная в кавычки, как изменить SQL запрос:  
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
05.05.2012, 12:08
Geksod, вам надо экранировать двойные кавычки(обычно это удваивание символа), т.к. они у вас являются разделителем для строки
2
5 / 5 / 2
Регистрация: 27.08.2011
Сообщений: 75
05.05.2012, 12:12  [ТС]
Цитата Сообщение от Lord_Voodoo Посмотреть сообщение
экранировать двойные кавычки(обычно это удваивание символа)
Извините, не совсем понял.
0
4217 / 3059 / 583
Регистрация: 21.01.2011
Сообщений: 13,203
05.05.2012, 12:16
Цитата Сообщение от Geksod
Извините, не совсем понял.
Покажу на примере Oracle, там строчные литералы заключаются в апострофы
Oracle 11 SQL
1
var1:= 'Д''Артаньян';
Апостроф в середине удваивается, чтобы Oracle его не принял за конец литерала
1
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
05.05.2012, 12:17
Geksod, вам квадратные скобки по идее не помогут... посмотрите в манах, как экранировать этот символ.

вам просто надо написать функцию, которая будет все найденные двойные кавычки удваивать... По крайней мере с одинарной кавычкой такой финт проходит, база ее начинает воспринимать как одинарную кавычку, а не границу строки... ..
0
5 / 5 / 2
Регистрация: 27.08.2011
Сообщений: 75
05.05.2012, 12:18  [ТС]
Попробовал удвоение, по типу:
Delphi
1
  DM.qryMain.SQL.Add(' AND (Table_Gorod.Nazvanie_Goroda Like ""%' + cbSearchGorod.Text + '%"")');
не помогло
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
05.05.2012, 12:19
Geksod, вот Grossmeister наглядно показал, что я имел ввиду...

Добавлено через 1 минуту
Geksod, погодите, а что вы сделали? экранировали начало и конец строки? вам же сказали, внутри строки, где это нужно... тут нахрапом не получится...

пример экранирования: ООО ""Рога и копыта""
0
5 / 5 / 2
Регистрация: 27.08.2011
Сообщений: 75
05.05.2012, 12:29  [ТС]
Заметил одну особенность: если в combobox ввести значение "рога", либо "копыта" (разумеется без кавычек) - запрос обрабатывается корректно. Но стоит только выбрать существующую запись в combobox'e (ООО "Рога и копыта") - исключение. Проблема на поверхности кроется
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
05.05.2012, 12:30
Geksod, слушай, проверь запрос с таким названием ООО ""Рога и копыта"" и скажи результат
0
5 / 5 / 2
Регистрация: 27.08.2011
Сообщений: 75
05.05.2012, 12:36  [ТС]
Цитата Сообщение от Lord_Voodoo Посмотреть сообщение
Geksod, слушай, проверь запрос с таким названием ООО ""Рога и копыта"" и скажи результат
Работает Похоже придется обрабатывать все-таки строку перед отправкой ее в запрос, как Вы и советовали это раньше.
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
05.05.2012, 12:40
Geksod, неужели я угадал?)))
1
5 / 5 / 2
Регистрация: 27.08.2011
Сообщений: 75
05.05.2012, 13:13  [ТС]
Цитата Сообщение от Lord_Voodoo Посмотреть сообщение
Geksod, неужели я угадал?)))
В яблочко!

Добавлено через 29 минут
Незнаю зачем, но выкладываю решение:
Delphi
1
2
3
4
5
6
7
8
procedure TfrmMain.btnSearchClick(Sender: TObject);
begin
  DM.qryMain.Close;
  DM.qryMain.SQL.Clear;
  DM.qryMain.SQL.Text := 'SELECT * FROM MyTable';
  DM.qryMain.SQL.Add(' WHERE (Organization Like "%' + AddQuoteToText(edtSearch.Text) + '%")');
  DM.qryMain.Open;
end;
, где:
Delphi
1
2
3
4
function AddQuoteToText(Text: string): string;
begin
  Result:=StringReplace(Text,'"','""',[rfReplaceAll]);
end;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.05.2012, 13:13
Помогаю со студенческими работами здесь

Как создать и изменить запрос (текущая запись) с кнопки на форме ?
ООгромнейшая просьба ко всем, подскажите как или ткните в тему носом (просто зашиваюсь на работе, не программист, но пришлось взяться)....

Какую премию получит брокер, если сумма заключенная за этот составляет Z евро?
III) Брокерская компания, по результатам года платит работникам премию в размере X% из суммы, которую брокер заключил за этот год, если...

Как правильно составить SQL-запрос по текстовому полю, если в поисковом критерии присутствует апостроф?
Как правильно составить SQL-запрос по текстовому полю, если в поисковом критерии присутствует апостроф? ssearch='colin's power' strSQL=...

Если запись в столбце существует, то ничего не делать, если запись отсутствует, то записать нужное значение. Как реализовать?
Если запись в столбце существует, то ничего не делать, если запись отсутствует, то записать нужное значение. Как реализовать?

Запрос(Макрос) - просуммировать выручку если организатор встречается два раза
Мне нужно первый мой запрос(Пример на скрине) Заменить на второй. То-есть просуммировать выручку если организатор встречается два раза. И...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru