powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как передавать строковые параметры с разной длиной?
22 сообщений из 22, страница 1 из 1
Как передавать строковые параметры с разной длиной?
    #39313320
njgjh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
FB2.1 Fibplus 6.9.6
Выполняю:

DS1.ParamByName('FIL').AsString := 'Aa';
DS1.Refresh();

DS1.ParamByName('FIL').AsString := 'Bb';
DS1.Refresh();

DS1.ParamByName('FIL').AsString := 'Aaa';
DS1.Refresh(); - тут ошибка переполнения

Вроде как где-то для параметра резервируется место только для 2-х символов.
Как это обойти?
...
Рейтинг: 0 / 0
Как передавать строковые параметры с разной длиной?
    #39313326
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
njgjhКак это обойти?
Увеличить размер поля FIL.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как передавать строковые параметры с разной длиной?
    #39313327
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
njgjh,

запрос какой? схема таблиц в запросе какая? кодировки БД/таблицы/столбца и соединения какие?
...
Рейтинг: 0 / 0
Как передавать строковые параметры с разной длиной?
    #39313345
njgjh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arioch,

select * from NOMENKL N
where upper(N.N_TOVAR) LIKE upper(coalesce(:FIL,'%z'))

в этом случае я могу передать в параметре только 2 символа

select * from NOMENKL N
where upper(N.N_TOVAR) LIKE upper(coalesce(:FIL,'%'))

а в этом - только 1 символ

Что это за хрень?
...
Рейтинг: 0 / 0
Как передавать строковые параметры с разной длиной?
    #39313351
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
njgjh,

1. используй cast(:FIL AS VARCHAR(3)) ну или сколько там тебе максимум потребуется
2. читай про containing и starting with
...
Рейтинг: 0 / 0
Как передавать строковые параметры с разной длиной?
    #39313358
njgjh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис, спасибо тебе, добрый человек - помогло.
...
Рейтинг: 0 / 0
Как передавать строковые параметры с разной длиной?
    #39313361
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
njgjhЧто это за хрень?
Какую написал, такая и хрень. Нафига там UPPER, да ещё и COALESCE?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как передавать строковые параметры с разной длиной?
    #39313407
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
njgjhЧто это за хрень?

https://ru.wikipedia.org/wiki/Схема_базы_данных

но в твоем случае дело было в запросе действительно
...
Рейтинг: 0 / 0
Как передавать строковые параметры с разной длиной?
    #39313448
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
njgjhselect * from NOMENKL N
where upper(N.N_TOVAR) LIKE upper(coalesce(:FIL, '%z' ))О-пля, красотища-то какая! Ляпотища!!!... Как сказал бы Ньютон наш - Исаак: "Дайте мне поле подлиннее и я наверну эту базу SQL-inject'ом!". И зачем только разработчики FBPlus и fbclient.dll предусмотрели параметризацию? Вот же глупые...
...
Рейтинг: 0 / 0
Как передавать строковые параметры с разной длиной?
    #39313455
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А, этож LIKE... Сразу не разглядел.
...
Рейтинг: 0 / 0
Как передавать строковые параметры с разной длиной?
    #39313457
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Rdb Dev!
You wrote on 22 сентября 2016 г. 14:14:07:

Rdb DevДайте мне поле подлиннее и я наверну эту базу SQL-inject'ом!
и куда ты тут инжектить собрался?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как передавать строковые параметры с разной длиной?
    #39313458
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий,

В инжектор.
...
Рейтинг: 0 / 0
Как передавать строковые параметры с разной длиной?
    #39313460
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спросонья чего только не померещиться... Мне стыдно.

njgjh, попробуй так:
Код: plsql
1.
2.
3.
SELECT *
  FROM NOMENKL N
  WHERE Upper(N.N_TOVAR) LIKE Upper(Coalesce(Cast(:FIL AS TYPE OF COLUMN NOMENKL.N_TOVAR),'%z'))
...
Рейтинг: 0 / 0
Как передавать строковые параметры с разной длиной?
    #39313465
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийи куда ты тут инжектить собрался?Уже никуда. Пару минут назад глаза "продрал", вот и мерещится всякое...
...
Рейтинг: 0 / 0
Как передавать строковые параметры с разной длиной?
    #39313527
njgjh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нужен совет - придется програмно вставлять в запрос неизвестное кол-во операторов LIKE, н-р:
Код: sql
1.
where N.N_TOVAR LIKE '%туф%' or N.N_TOVAR LIKE '%черн%' or N.N_TOVAR LIKE '%муж%'



С помощи параметра как приводил в примере выше это сделать наверное не получится. Но помнится мне что в фибах как-то можно было изменять программно условие where, но как это делалось увы в доках не нашел. Или может есть какой другой простой способ?
...
Рейтинг: 0 / 0
Как передавать строковые параметры с разной длиной?
    #39313545
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
njgjh, в "фибах" есть только опция poNoForceIsNull. Произвольное количество параметров лепиться ручками и выбор реализации ограничен лишь вашей фантазией и навыком.
...
Рейтинг: 0 / 0
Как передавать строковые параметры с разной длиной?
    #39313567
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
njgjhНужен совет - придется програмно вставлять в запрос неизвестное кол-во операторов LIKE, н-р:
Код: sql
1.
where N.N_TOVAR LIKE '%туф%' or N.N_TOVAR LIKE '%черн%' or N.N_TOVAR LIKE '%муж%'



какой запрос интересный...

www.sql.ru/forum/784106-4/firebird-i-sphinx ?
...
Рейтинг: 0 / 0
Как передавать строковые параметры с разной длиной?
    #39313582
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devв "фибах" есть только опция poNoForceIsNull.
Там есть ещё макросы. Но аффтару хватит и TpFIBQuery.SQL.Add.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как передавать строковые параметры с разной длиной?
    #39313602
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov, да, у TStringList неплохой функционал, но я бы накидывал значения параметров во временную таблицу с ограничением существования строк временем жизни транзакции и дергал бы их в этой транзакции из селективной ХП для FOR SELECT.
...
Рейтинг: 0 / 0
Как передавать строковые параметры с разной длиной?
    #39313630
njgjh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rdb_dev, зачем так все усложнять? Я люблю когда все просто - нашел в фибах DS1.MainWhereClause
меня устраивает.
Всем спасибо!
...
Рейтинг: 0 / 0
Как передавать строковые параметры с разной длиной?
    #39313904
dedRasta
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
njgjhпомнится мне что в фибах как-то можно было изменять программно условие where

CONDITIONS

Их можно много задать, по ходу каждое из них включать и отключать
...
Рейтинг: 0 / 0
Как передавать строковые параметры с разной длиной?
    #39313919
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
njgjh, по мне так гораздо проще создать временную таблицу, ХП с двумя FOR SELECT, вложенными один в другой и прикрутить в приложении к TFIBDataSet временной таблицы обычный TDBGrid для накидывания параметров запроса, чем париться с построением в цикле WHERE, обработкой подготовки запроса и накидыванием в цикле значений нумерованных параметров.
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как передавать строковые параметры с разной длиной?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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