Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / подстановка значения поля в конструкцию запроса like / 10 сообщений из 10, страница 1 из 1
20.01.2019, 14:35
    #39762050
bdvX
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
подстановка значения поля в конструкцию запроса like
Всем привет, столкнулся с проблемой интерпретации запроса из Access в код на Delphi

вот код запроса, который работает в среде Access
в конструкцию LIKE подставляется значение поля таблицы
Код: sql
1.
2.
3.
4.
5.
SELECT Cashbox1.OrderID
FROM 
(SELECT * FROM Cashbox WHERE CashboxType = 1) AS Cashbox1,
(SELECT * FROM Cashbox WHERE CashboxType = 4) AS Cashbox2
WHERE (Cashbox1.CashboxDate > Cashbox2.CashboxDate) AND (Cashbox2.Comments LIKE "*"&[Cashbox1.OrderID]&" - *")



пытаюсь переписать запрос в Delphi
Код: pascal
1.
2.
3.
4.
5.
'SELECT Cashbox1.OrderID ' +
'FROM ' +
'(SELECT * FROM Cashbox WHERE CashboxType = 1) AS Cashbox1, ' +
'(SELECT * FROM Cashbox WHERE CashboxType = 4) AS Cashbox2 ' +
'WHERE (Cashbox1.CashboxDate > Cashbox2.CashboxDate) AND (Cashbox2.Comments LIKE ' + QuotedStr('%') + '&[Cashbox1.OrderID]&' + QuotedStr(' - *') + ')';


результат запрос 0 записей
понимаю что проблема здесь
Код: pascal
1.
'&[Cashbox1.OrderID]&'

но как написать правильно ...
...
Рейтинг: 0 / 0
20.01.2019, 14:53
    #39762055
bdvX
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
подстановка значения поля в конструкцию запроса like
блин, нашел опечатку
не изменил закрывающий * на %

Код: pascal
1.
2.
3.
4.
5.
'SELECT Cashbox1.OrderID ' +
'FROM ' +
'(SELECT * FROM Cashbox WHERE CashboxType = 1) AS Cashbox1, ' +
'(SELECT * FROM Cashbox WHERE CashboxType = 4) AS Cashbox2 ' +
'WHERE (Cashbox1.CashboxDate > Cashbox2.CashboxDate) AND (Cashbox2.Comments LIKE ' + QuotedStr('%') + '&[Cashbox1.OrderID]&' + QuotedStr(' - %') + ')';
...
Рейтинг: 0 / 0
20.01.2019, 15:07
    #39762064
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
подстановка значения поля в конструкцию запроса like
Код: pascal
1.
+ '&'+VarToStr(Cashbox1.OrderID)+'&' +
...
Рейтинг: 0 / 0
20.01.2019, 15:19
    #39762072
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
подстановка значения поля в конструкцию запроса like
Код: pascal
1.
2.
3.
4.
5.
'WHERE (:D1 > :D2) AND (:C LIKE :ID)';
Query.ParamByName('D1').Value := Cashbox1.CashboxDate;
Query.ParamByName('D2').Value := Cashbox2.CashboxDate;
Query.ParamByName('C').Value := Cashbox2.Comments;
Query.ParamByName('ID').Value := Cashbox1.OrderID;
...
Рейтинг: 0 / 0
20.01.2019, 15:29
    #39762077
bdvX
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
подстановка значения поля в конструкцию запроса like
DimaBr, решение мной уже описано
если вы посмотрите внимательно на код, то видно что выборка производится из одной таблицы и из программы параметры не передаются. условия и значения берутся из самой таблицы в запросе
...
Рейтинг: 0 / 0
20.01.2019, 21:44
    #39762150
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
подстановка значения поля в конструкцию запроса like
Если все значения берутся их таблицы, то не понятна суть вопроса.
Одиночных кавычек (которые ограничивают string) в запросе нет.
...
Рейтинг: 0 / 0
20.01.2019, 21:45
    #39762151
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
подстановка значения поля в конструкцию запроса like
Код: pascal
1.
ShowMessage(Query.SQL.Text)


Показывает нужный запрос ???
...
Рейтинг: 0 / 0
20.01.2019, 22:10
    #39762156
Vlad F
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
подстановка значения поля в конструкцию запроса like
bdvXблин, нашел опечатку
не изменил закрывающий * на %

Код: pascal
1.
2.
3.
4.
5.
'SELECT Cashbox1.OrderID ' +
'FROM ' +
'(SELECT * FROM Cashbox WHERE CashboxType = 1) AS Cashbox1, ' +
'(SELECT * FROM Cashbox WHERE CashboxType = 4) AS Cashbox2 ' +
'WHERE (Cashbox1.CashboxDate > Cashbox2.CashboxDate) AND (Cashbox2.Comments LIKE ' + QuotedStr('%') + '&[Cashbox1.OrderID]&' + QuotedStr(' - %') + ')';


И это будет еще много раз, возможно всю твою карьеру, если не перейдешь, как правильно советуют, на использование параметров.
...
Рейтинг: 0 / 0
20.01.2019, 23:18
    #39762163
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
подстановка значения поля в конструкцию запроса like
Вместо двух подзапросов проще написать так
Код: sql
1.
2.
3.
4.
5.
6.
SELECT A.OrderID
FROM Cashbox as A, Cashbox AS B
WHERE A.CashboxType = 1 AND
      B.CashboxType = 4 AND
      A.CashboxDate > B.CashboxDate AND 
      B.Comments LIKE "*"&[A.OrderID]&" - *"
...
Рейтинг: 0 / 0
21.01.2019, 10:57
    #39762252
Василий 2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
подстановка значения поля в конструкцию запроса like
Зачем "переписывать" запрос в Delphi, если он самодостаточный?
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / подстановка значения поля в конструкцию запроса like / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]