Количество параметров процедуры. | |
---|---|
hztp_serg Автор Сообщений: 577 Откуда: Хмельницкий Дата регистрации: 19.06.2007 |
Подскажите пожалуйста, есть ли ограничение на количество передаваемых параметров вызываемой процедуры? Пример:
|
Re: Количество параметров процедуры. | |
---|---|
Taran Сообщений: 13623 Откуда: Красноярск Дата регистрации: 16.01.2008 |
С Днём рождения кстати! Хоть слегка и опоздав. Всех благ! Исправлено 1 раз(а). Последнее : Taran, 30.01.20 18:01 |
Re: Количество параметров процедуры. | |
---|---|
hztp_serg Автор Сообщений: 577 Откуда: Хмельницкий Дата регистрации: 19.06.2007 |
Спасибо! Неожиданно, но приятно! |
Re: Количество параметров процедуры. | |
---|---|
hztp_serg Автор Сообщений: 577 Откуда: Хмельницкий Дата регистрации: 19.06.2007 |
Так и есть, документация гласит:
Буду благодарен за совет. |
Re: Количество параметров процедуры. | |
---|---|
Taran Сообщений: 13623 Откуда: Красноярск Дата регистрации: 16.01.2008 |
Либо в вызывающем куске создаешь массив, заполняешь и передаешь его по ссылке. Т.е. @
Либо, что мне больше нравится Создаешь объект на основе empty и добавляешь на нем свойства с тебуемыми значениями. Тогда получаются именованные параметры. Накладные расходы по времени надо смотреть. |
Re: Количество параметров процедуры. | |
---|---|
hztp_serg Автор Сообщений: 577 Откуда: Хмельницкий Дата регистрации: 19.06.2007 |
Принцип понятен, буду пробовать.
Спасибо большое! |
Re: Количество параметров процедуры. | |
---|---|
akvvohinc Сообщений: 4203 Откуда: Москва Дата регистрации: 11.11.2008 |
Просто как вариант - не передавать всю кучу значений как параметры, а пользоваться внешними объектами - PRIVATE-переменными, свойствами внешних объектов, полями таблиц/курсоров.
Иногда, особенно в уже готовом большом приложении, бывает лень (или не хватает времени) сделать все "по уму" и проще/быстрее добавить пару внешних переменных в требуемое место, чем проводить ревизию всей кучи вызовов данной функции. Появится время/желание - переделать "нормально". PS Сам не писал и у других пока не встречал приложений, в которых бы все функции работали только с параметрами и ничего не брали извне напрямую. Исправлено 1 раз(а). Последнее : akvvohinc, 30.01.20 19:17 |
Re: Количество параметров процедуры. | |
---|---|
sphinx Сообщений: 31166 Откуда: Каменск-Уральски Дата регистрации: 22.11.2006 |
Была у меня такая "проблема" - коллеги посоветовали или подход поменять, или параметры строкой передавать, или массивом. Выбрал первое.
------------------ "Veni, vidi, vici!"(с) |
Re: Количество параметров процедуры. | |
---|---|
Taran Сообщений: 13623 Откуда: Красноярск Дата регистрации: 16.01.2008 |
Зачем плохому учить? Ищи потом по всему проекту связи. Функция должна быть максимально изолирована и оперировать только явно заданными параметрами. Ну максимум если это метод класса, то свойствами класса. Параметров конечно многовато. Но тут можно много говорить о подходе. А оно надо? |
Re: Количество параметров процедуры. | |
---|---|
_vit Сообщений: 5173 Дата регистрации: 29.07.2002 |
Либо иммитировать си-шную структуру/структуры типа:
|
Re: Количество параметров процедуры. | |
---|---|
sphinx Сообщений: 31166 Откуда: Каменск-Уральски Дата регистрации: 22.11.2006 |
Мне кажется интересной идея создать класс на базе Custom (или Empty) и все передаваемые параметры передавать через свойства этого объекта.
Есть еще такая идейка - сформировать текст запроса в том месте, откуда идет попытка вызвать процедуру с большим числом параметров, например так:
и передать его в процедуру одной строкой. Раз это ИНТЕРМЕХ ;) - то там относительно небольшие объемы данных в базах - если сравнивать с биллингом телекоммуникационных компаний или с операциями банка). ------------------ "Veni, vidi, vici!"(с) |
Re: Количество параметров процедуры. | |
---|---|
sphinx Сообщений: 31166 Откуда: Каменск-Уральски Дата регистрации: 22.11.2006 |
Именно про это и писал, и тоже на Custom! ------------------ "Veni, vidi, vici!"(с) |
Re: Количество параметров процедуры. | |
---|---|
lulgu Сообщений: 1838 Дата регистрации: 30.11.2016 |
В структурах указывается тип данных, не значения. В Фоксе для таких целей предназначен уже упоминавшийся класс EMPTY: loEmpty = CREATEOBJECT('Empty') ADDPROPERTY(loEmpty,'prop1',luValue1) *** ADDPROPERTY(loEmpty,'prop32',luValue32) ЗЫ. С другой стороны, функцию с количеством передаваемых параметров более десятка в VFP надо еще умудриться написать. Исправлено 3 раз(а). Последнее : lulgu, 30.01.20 23:37 |
Re: Количество параметров процедуры. | |
---|---|
Burn Сообщений: 5640 Откуда: Днепр Дата регистрации: 02.01.2002 |
Я предпочитаю создавать курсор и передавать его имя - все таки у нас СУБД с найтивными таблицами а не какое-то Си со структурами
Исправлено 1 раз(а). Последнее : Burn, 30.01.20 23:48 |
Re: Количество параметров процедуры. | |
---|---|
lulgu Сообщений: 1838 Дата регистрации: 30.11.2016 |
Вы также путаетесь в понятиях. В данном случае речь идет о передаче параметров, курсоров не напасетесь. Что касается структур, то в других языках они записываются в текстовом виде. Аналогично запишите структуры в текстовом формате, напишите функцию для работы с ними, и вы также сможете работать со структурами как в каком-то СИ, при необходимости. |
Re: Количество параметров процедуры. | |
---|---|
akvvohinc Сообщений: 4203 Откуда: Москва Дата регистрации: 11.11.2008 |
Maximum # of tables open at one time - 65535. А сколько в среднем ожидается функций с числом параметров более максимума? |
Re: Количество параметров процедуры. | |
---|---|
akvvohinc Сообщений: 4203 Откуда: Москва Дата регистрации: 11.11.2008 |
. Кстати, несмотря на написанное в хелпе ограничение на число параметров, я когда-то проверял это значение - оно равно 27 (в FPD оно было равно 25, если я не ошибаюсь) А вообще, если говорить строго, то число параметров у функции может быть гораздо большим, чем 27 (не выяснял, есть ли ограничение, а если есть, то чему оно равно). Но передать в функцию более 27 аргументов пока не получалось. |
Re: Количество параметров процедуры. | |
---|---|
lulgu Сообщений: 1838 Дата регистрации: 30.11.2016 |
Ну, столько вам не понадобится. После пары курсоров расскажете, как решаете нюансы с разными типами данных, передачей параметров по ссылке, с массивами, объектами и т.п.. Параметры они ведь в фоксе "резиновые", а поля в курсоре нет. Например, простое - какова будет длина поля для параметров типа "имя файла"? Вряд ли курсор будет альтернативой классу EMPTY, проще некуда. |
Re: Количество параметров процедуры. | |
---|---|
akvvohinc Сообщений: 4203 Откуда: Москва Дата регистрации: 11.11.2008 |
Всё это вполне решалось как-то в FPD, когда этой альтернативы не было. Например, знать длину поля для параметра типа "имя файла" не нужно, запишем его в memo. Передача по ссылке? - автор сам решает, менять ему значения полей или нет. Массив? Ссылки на объекты? - то, что нельзя или неудобно - передаем как обычный параметр. Через таблицы же мог вестись и обмен данными между приложениями на FPD и VFP. Но я и не призывал к обязательному использованию курсоров для передачи "параметров", не писал, что это лучше или не хуже - просто в большинстве ситуаций (простой набор большого количества скалярных переменных) особой разницы нет, а заполнить поля таблицы/курсора значениями одноименных переменных, а затем "бросить" их обратно - программирования не требует. Необходимость задавать типы полей? Вспомнить тип передаваемых параметров лишним не будет, а иногда и поможет избежать ошибок. |
Re: Количество параметров процедуры. | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Использовать курсоры для передачи параметров в процедуры - 100% говнокод.
Даже массивом по ссылке их передать и то выглядит гораздо лучше. Или в мега-строку напихать (хоть бы из того-же курсора существующего в точке вызова при помощи CursorToXML). Встраивать параметры в строку запроса в виде теста - это SQL иньекция - так делать не следует. Следует использовать параметры как параметры. А если уж по какой-то причине только так, то как минимум нужно подставляемую строку "очистить" от потенциально небезопасных символов или конструкций - если она хоть каким-то образом получается от пользователя, а не забита в коде программы (для запроса к фоксовым таблицам - от макросов, кавычек, вызовов функций и т.п.) ------------------ WBR, Igor |
© 2000-2024 Fox Club  |