Re: Возврат массива из метода | |
---|---|
of63 Сообщений: 26001 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
Не придирайся. В фоксе конечно есть, есть определение зоны действия переменной, например PRIVATE Можно передать в функцию имя массива, в C-параметре ![]() |
Re: Возврат массива из метода | |
---|---|
akvvohinc Сообщений: 4560 Откуда: Москва Дата регистрации: 11.11.2008 |
Цитата:Всё перечисленное не является передачей массива в функцию: 1) "определение зоны действия переменной, например PRIVATE" - здесь ты вообще ничего не передаешь; 2) "можно передать в функцию имя массива" - здесь ты сам написал, что именно ты передаешь - имя массива, но не массив. ![]() |
Re: Возврат массива из метода | |
---|---|
Владимир Максимов Сообщений: 14146 Откуда: Москва Дата регистрации: 02.09.2000 |
Вы исходите из предположения, что существует некое универсальное решение, применимое всегда. В общем случае, даже для специализированных языков программирования - это не так. Не говоря уже о FoxPro, которое представляет из себя "сборную солянку" из разных подходов. Команда SELECT ... INTO ARRAY ... Здесь у Вас нет возможности получить некий retvalue, чтобы уточнить, было получено значение, путь и пустое, или не было никакого значения Наиболее простой способ это понять - предварительное формирование массива
С командой Select-SQL пример наглядный и всем понятный. Но все то же самое применимо и для любой другой функции работы с массивом. Просто там обычно очень сильно зависит от контекста задачи. Ну, например, тот же Alines(). Здесь понятно, что хотя бы один элемент массива будет всегда. Пусть и пустой. Что-то же в качестве строки для разбора было передано. Т.е. значение null не предполагается самой постановкой задачи. По этой причине Ваш подход "переопределять всегда" именно в данном конкретном случае будет уместен. Контекст использования именно данной функции такое допускает. Для функций вроде ADatabases() или AUsed() есть значение retvalue по которому можно судить о результате Но, в общем случае, нет универсального решения. В каждом конкретном случае надо разбираться отдельно. Не всегда есть возможность и необходимость вернуть дополнительный признак retvalue ![]() |
Re: Возврат массива из метода | |
---|---|
lemenev Автор Сообщений: 229 Дата регистрации: 23.06.2022 |
А как же _TALLY ? ![]() |
Re: Возврат массива из метода | |
---|---|
of63 Сообщений: 26001 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
> Команда SELECT ... INTO ARRAY ...
> Здесь у Вас нет возможности получить некий retvalue, чтобы уточнить, было получено значение, путь и пустое, или не было никакого значения Есть _TALLY - количество записей, полученных после "групповой" операции. Доб Упс. Леменев первый на страже понятий! ) Исправлено 1 раз(а). Последнее : of63, 22.12.24 17:40 ![]() |
Re: Возврат массива из метода | |
---|---|
of63 Сообщений: 26001 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
[quote lemenev][quote Владимир Максимов]Команда SELECT ... INTO ARRAY ...
FULL JOIN - он дает " было получено значение, путь и пустое, или не было никакого значения". Это все "просто" (о вопросе найден/не найден, основная трахатория это о "сумма отличается на 1 коп, почему? расскажи как ты насчитал этот 1 млн - без 1 коп? украл её ?) " Это серьезно, наще гос бережет народную копеечку. ) ![]() |
Re: Возврат массива из метода | |
---|---|
akvvohinc Сообщений: 4560 Откуда: Москва Дата регистрации: 11.11.2008 |
Нет, эта команда - никакой не пример, ведь мы обсуждали вызов функции, причем, изначально именно моей функции, а затем уже ALINES(). Я и написал, что в этих случаях не надо ничего создавать заранее и дополнительно контролировать. Но если где-то в программе вы обнаружите какую-то "неоднозначность с массивом", то ради бога - устраняйте её, кто ж против? Более того, я не против, если вы будете проверять и контролировать массив даже в тех случаях, где такой неоднозначности нет. А вы, я думаю, не будете возражать, если я в этих случаях буду доверять Фоксу, а проверять и контролировать не буду. ![]() Цитата:Тогда приведите пример такой функции. И если она существует, то и контролируйте массив, который она принимает или возвращает. Но при чём здесь остальные функции? Цитата:Может, я чего-то и не заметил, но я не помню, где я написал о каком-то решении как универсальном. Если возможно, то приведите цитату, на основании которой вы сделали такой вывод. Исправлено 1 раз(а). Последнее : akvvohinc, 22.12.24 19:23 ![]() |
Re: Возврат массива из метода | |
---|---|
akvvohinc Сообщений: 4560 Откуда: Москва Дата регистрации: 11.11.2008 |
Давайте проверим этот способ:
![]() |
Re: Возврат массива из метода | |
---|---|
akvvohinc Сообщений: 4560 Откуда: Москва Дата регистрации: 11.11.2008 |
Да, и в примечании к опции INTO ARRAY <array> так и написано: Цитата: Исправлено 1 раз(а). Последнее : akvvohinc, 22.12.24 20:00 ![]() |
Re: Возврат массива из метода | |
---|---|
of63 Сообщений: 26001 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
Переведи как ты понял
Я понимаю как - количество возвращенных записей Почитай про _TALLY, это хорошая внутрифоксовая глобальная переменная, и другие тоже. Ребята прогеры фокса тоже были озабочены отладкой своей конструкции, и неломыслиями, и вот остатки - _* и SYS(*) Исправлено 2 раз(а). Последнее : of63, 22.12.24 20:29 ![]() |
Re: Возврат массива из метода | |
---|---|
akvvohinc Сообщений: 4560 Откуда: Москва Дата регистрации: 11.11.2008 |
Цитата:Здесь про количество не написано - только о том, что посредством этой переменной можно узнать, возвратила ли команда хоть какое-то их количество. ![]() |
Re: Возврат массива из метода | |
---|---|
akvvohinc Сообщений: 4560 Откуда: Москва Дата регистрации: 11.11.2008 |
1) Мне понятно, что "хотя бы один элемент массива будет всегда", только потому, что так написано в описании функции. Но разработчики могли реализовать и другое её поведение. 2) По поводу null всё с точностью до наоборот - это значение предполагается "самой постановкой задачи". (хотя мне и не совсем понятно, что вы подразумеваете здесь под "постановкой задачи") ![]() |
Re: Возврат массива из метода | |
---|---|
of63 Сообщений: 26001 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
Практика показала, что _TALLY точно имеет значение 0...N - количество обработанных (возвращенных) записей после некоторых групповых операторов Fox. Список этих операторов - в описании фокса. ![]() |
Re: Возврат массива из метода | |
---|---|
PaulWist Сообщений: 14740 Дата регистрации: 01.04.2004 |
Добавлю код для более точного определения, что такое _TALLY
------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) ![]() |
Re: Возврат массива из метода | |
---|---|
lemenev Автор Сообщений: 229 Дата регистрации: 23.06.2022 |
PaulWist, в твоём примере происходит явное добавление в одну таблицу и неявное (в функции) в другую. Что ты хотел увидеть в _Tally? По-своему это верно. Тебе показывают, сколько всего добавилось строк в обе таблицы. Другой разговор, что с этой информацией делать.
Пример интересный. Я такого применения не знал. Мне кажется, что в команде
Исправлено 1 раз(а). Последнее : lemenev, 27.12.24 12:28 ![]() |
Re: Возврат массива из метода | |
---|---|
PaulWist Сообщений: 14740 Дата регистрации: 01.04.2004 |
Это пример того, что _Tally только в частном случае показывает сколько выбрано записей.
Лишняя запятая - говорит о том, что используется правило записи, те когда вся запись модифицирована (те все поля перечисленные в update помещены в запись), то следующим действием вызывается правило поля. Если "запятой нет" - говорит о том, что используется правило поля, те когда запись добавляется/модифицируется и конкретное поле получает какое-то значение, не важно старое или новое (фокс укладывает новые значения в поля последовательно), то следующим действием вызывается правило поля (например, в поле может быть только М/Ж, а была попытка записать А, то смысла заполнять последующие поля нет, можно генерить ошибку/откатывать транзакцию ). ------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) ![]() |
Re: Возврат массива из метода | |
---|---|
lemenev Автор Сообщений: 229 Дата регистрации: 23.06.2022 |
Спасибо за разъяснение. Но в Help об этом ничего нет: help.foxclub.ru
![]() |
Re: Возврат массива из метода | |
---|---|
akvvohinc Сообщений: 4560 Откуда: Москва Дата регистрации: 11.11.2008 |
В Help, действительно, нет. Но на деле получается, что можно у каждого поля таблицы использовать Check этого поля, и в любое место списка полей добавить ещё один (и только один) Check записи. Например, так
Похоже, что почти так, но логика, видимо, несколько сложнее. В том примере показывается не общее количество записей, добавленное этой командой в Test и Logs, а то количество, которое было добавлено в обе таблицы при добавлении последней из нескольких записей, добавляемых в Test (в том примере добавлялась всего одна запись, и поэтому логика была до конца не видна). Что это значит. Допустим, команда INSERT INTO Test добавит 5 записей в эту таблицу. Значит, Check-функция будет вызвана последовательно 5 раз. То есть на последнем, пятом шаге будет: 1) обнулена _TALLY (из-за нового SELECT SQL); 2) добавлено, допустим, 10 записей в таблицу Logs; 3) добавлена 1 запись в таблицу Test В результате _TALLY после этой команды будет равна 11. Но дело даже не в том, сколько записей добавлено в Logs, а в том количестве записей, которое возвращает команда SELECT внутри Check-функции. То есть если INSERT в ней убрать, а оставить только тот SELECT, то _TALLY всё равно вернёт 11. Итого формула для _TALLY в этом случае у меня получилась такой: 0 + (результат SELECT UNION при последнем вызове Check-функции) + 1 Если же внутри Check-функции никаких других SELECT выполняться не будет, то нечему будет сбрасывать предыдущее значение _TALLY - в результате _TALLY и покажет количество записей, добавленных в Test. (при этом можно увидеть, как после каждого вызова Check() _TALLY увеличивается на 1) . Этот верно лишь в тех случаях, когда в команде добавления указаны все поля (или все поля подразумеваются - как в APPEND BLANK) Если же в команде INSERT INTO указать лишь часть полей, то сначала выполнятся Check-функции этих полей (в порядке их физического расположения в таблице), а лишь затем функции для остальных полей (тоже в порядке их физического расположения в таблице). А если учесть, что внутри Check-функций могут быть команды (например, REPLACE), изменяющие значения других полей таблицы, то порядок, в котором Фокс укладывает новые значения в поля, может быть вообще "произвольным". ![]() Исправлено 6 раз(а). Последнее : akvvohinc, 28.12.24 06:55 ![]() |
Re: Возврат массива из метода | |
---|---|
krin Сообщений: 190 Дата регистрации: 08.02.2005 |
читаем хелп CREATE TABLE - SQL Command в части table validation rule а в CREATE CURSOR действительно об этом нет. и тянется это по крайней мере с VFP5 Help. но всегда есть "читай также CREATE TABLE" ![]() ![]() |
Re: Возврат массива из метода | |
---|---|
lemenev Автор Сообщений: 229 Дата регистрации: 23.06.2022 |
В Help по CREATE TABLE - SQL Command написано: CHECK lExpression1 Указывает правило проверки для поля. Параметр lExpression1 должен оцениваться в логическое выражение и может представляет собой пользовательскую функцию или хранимую процедуру. Visual FoxPro проверяет правило проверки, указанное в опции CHECK при добавлении пустой записи. CHECK lExpression2 Указывает правило проверки для таблицы. Параметр lExpression2 должен оцениваться в логическое выражение и может представлять собой пользовательскую функцию или хранимую процедуру.Это не очень соотносится с практикой. ![]() |
© 2000-2025 Fox Club  |