:: Visual Foxpro, Foxpro for DOS
Re: передать параметр
DmitryKn
Автор

Сообщений: 300
Дата регистрации: 06.04.2022
AndyNigmatec
Разберется, там с головой все в порядке )))

Спасибо, друг!
Ratings: 0 negative/0 positive
Re: передать параметр
DmitryKn
Автор

Сообщений: 300
Дата регистрации: 06.04.2022
of63
() Серега, не связывайся
ДмКныр параметер передал, надеюсь...

сам ты передал!
Ratings: 0 negative/0 positive
Re: передать параметр
DmitryKn
Автор

Сообщений: 300
Дата регистрации: 06.04.2022
PaulWist
...
Тут, либо private переменные, либо использовать/создавать курсор, в который класть значения, тогда проблем с областью видимости не будет.

с курсором да, а вот privat не получается. Возможно , неправильно объект создаю..
Ratings: 0 negative/0 positive
Re: передать параметр
AndyNigmatec

Сообщений: 1550
Откуда: Волгоград
Дата регистрации: 28.06.2015
DmitryKn
Идея была в том, что вот, я сделал класс, и в нем, например, метод oexec, который отправляет запрос серверу :

Таки про то вам и говорят - раз это отдельный класс и метод в нем - то ЧТО именно вы туда передаете в качестве параметров? Поскольку озвучивается "универсальный" метод - то не уверен что вы в него передаете параметры - и тогда да, могут проблемы с их видимостью.

я себе когда делал (давно уже))) "псевдоуниверсальный" аналогичный класс в таком методе сразу поставил прием нескольких параметров

PROCEDURE sqlexec
LPARAMETERS lcQueryText, lcCursorName, lcParam1, lcParam2, lcParam3, lcParam4, lcParam5
LOCAL lcOk
lcOk=0
IF !EMPTY(lcQueryText) AND !EMPTY(lcCursorName)
IF SQLEXEC(this.nConnect, lcQueryText, lcCursorName)>0
lcOk=1
ELSE
IF this.ShowError=1
AERROR(laInfo)
MESSAGEBOX("Query error:" + CHR(13) + m.laInfo[2], 0+48, 'Внимание!', 30000)
ENDIF
ENDIF
ENDIF
RELEASE laInfo
RETURN lcOk
ENDPROC
но если честно, практически не использовал - как-то мне проще непосредственно функцию =SQLEXEC() оказалось пользовать
Ratings: 0 negative/0 positive
Re: передать параметр
DmitryKn
Автор

Сообщений: 300
Дата регистрации: 06.04.2022
AndyNigmatec
DmitryKn
Идея была в том, что вот, я сделал класс, и в нем, например, метод oexec, который отправляет запрос серверу :
Таки про то вам и говорят - раз это отдельный класс и метод в нем - то ЧТО именно вы туда передаете в качестве параметров? Поскольку озвучивается "универсальный" метод - то не уверен что вы в него передаете параметры - и тогда да, могут проблемы с их видимостью.
Туда передается только строковая переменная, содержащая запрос и в нем уже всё-всё, и, если предполагается селект - имя курсора. И все.
Если в моей переменной с запросом tcQuery стоит среди прочего ?lcParameter, а в методе класса :
AndyNigmatec
LPARAMETERS lcQueryText, lcCursorName, lcParam1, lcParam2, lcParam3, lcParam4, lcParam5
допустим отдельно передам искомую переменную в lcParam1,
тогда в методе нужно будет дополнительно указывать:
lcParameter = lcParam1
А нужен этот lcParameter только для этой формы и больше , например, нигде. Хотя это не точно, но в начале пути так
Т.е. не красиво. И вот будет полтора десятка форм, и метод обрастет такой бородой, что вспоминать где чего откуда потребует дополнительной глюкозы.
Ratings: 0 negative/0 positive
Re: передать параметр
DmitryKn
Автор

Сообщений: 300
Дата регистрации: 06.04.2022
может тогда отказаться от класса , пока не далеко еще ушел, а в родительскую форму методов напихать и жить с этим дальше?
Ratings: 0 negative/0 positive
Re: передать параметр
PaulWist

Сообщений: 14601
Дата регистрации: 01.04.2004
DmitryKn
Туда передается только строковая переменная, содержащая запрос и в нем уже всё-всё, и, если предполагается селект - имя курсора. И все.
Если в моей переменной с запросом tcQuery стоит среди прочего ?lcParameter, а в методе класса :

Ну напиши вместо ?lcParameter --> ?lcParam1


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: передать параметр
DmitryKn
Автор

Сообщений: 300
Дата регистрации: 06.04.2022
PaulWist
DmitryKn
Туда передается только строковая переменная, содержащая запрос и в нем уже всё-всё, и, если предполагается селект - имя курсора. И все.
Если в моей переменной с запросом tcQuery стоит среди прочего ?lcParameter, а в методе класса :

Ну напиши вместо ?lcParameter --> ?lcParam1

Даже не знаю, что и сказать.. Только - спасибо!

на поверхности же лежало, как же это я так затупил :doom:

Ну зато столько вариантов и подходов изучено
Ratings: 0 negative/0 positive
Re: передать параметр
AndyNigmatec

Сообщений: 1550
Откуда: Волгоград
Дата регистрации: 28.06.2015
Здесь вам видней как удобнее организовать ... как вариант передавать в такой метод кроме непосредственно строки запроса еще параметр-объект в котором уже задавать кол-во, имена и значения передаваемых параметров ... но тогда перед вызовом этого метода нужно будет этот объект готовить.
Ratings: 0 negative/0 positive
Re: передать параметр
AndyNigmatec

Сообщений: 1550
Откуда: Волгоград
Дата регистрации: 28.06.2015
вот вам навскидку вариант с объектом ... не по фен-шую, но для демонстрации пойдет думаю




Исправлено 1 раз(а). Последнее : AndyNigmatec, 11.05.23 17:56
Ratings: 0 negative/0 positive
Re: передать параметр
DmitryKn
Автор

Сообщений: 300
Дата регистрации: 06.04.2022
Спасибо большое за примеры, очень помогает.
Я свой класс на вашем примере ваял.
В данном конкретном случае, после откровения от PaulWist , оставлю все как есть, класс и в него параметры.

Еще есть масса вопросов с проверкой соединения, SQLIDLEDISCONNECT() и все такое прочее. Но это я позже отдельную тему создам.
Ratings: 0 negative/0 positive
Re: передать параметр
akvvohinc

Сообщений: 4201
Откуда: Москва
Дата регистрации: 11.11.2008
PaulWist
Тут, либо private переменные, либо использовать/создавать курсор
Ну, это не весь список возможностей - вместо множества переменных можно передавать объект или массив.

DmitryKn
Если передавать параметр отдельно , то его нужно как-то внутри доставать и называть, чтобы в запросе вычислялось его значение
Только вы понимаете, что имеете в виду под "доставать, называть и вычислять значение" по отношению к параметру.

Параметр уже:
1) имеется без "доставания"
2) имеет имя без "называния"
3) имеет значение без "вычисления"

И я вам написал, что потребуется изменить - только добавить параметр с именем lcParameter в команду PARAMETERS
Неужели сложно проверить?

DmitryKn
Предполагалось, что это будет в таком виде для всех вообще запросов: select, update, insert
Какое отношение имя команды и их количество имеет к вашей проблеме?
Научитесь передавать параметры в одну - считайте, что научились передавать в любую.

DmitryKn
с курсором да, а вот privat не получается. Возможно , неправильно объект создаю
Возможно всё, что угодно.
Но пока вы не покажете проблемный код, любые советы будут просто гаданием.

Но мой прогноз - дело не в объекте, а по-прежнему в том, что вы отказываетесь разобраться с видимостью переменных.
Поэтому напишите по памяти или спишите откуда-то, в каких программах/методах/процедурах/функциях относительно места определения (создания) будет видна PRIVATE переменная?

DmitryKn
допустим отдельно передам искомую переменную в lcParam1,
тогда в методе нужно будет дополнительно указывать:
lcParameter = lcParam1
А нужен этот lcParameter только для этой формы и больше , например, нигде.
Так вы просто используйте в команде SQLEXEC не lcParameter, а lcParam1.
И то же - со всеми формами, использующими этот объект.
Ratings: 0 negative/0 positive
Re: передать параметр
AndyNigmatec

Сообщений: 1550
Откуда: Волгоград
Дата регистрации: 28.06.2015
DmitryKn
Спасибо большое за примеры, очень помогает.

Только не принимайте класс что набросал выше как рабочий - это просто пример для визуализации сказанного.

Как минимум в этом примере я бы еще отказался от макроподстановки имен параметров, а подменил бы их уже элементами свойства-массива - так и правильнее, и нет нужды разбирать типы переменных (кому ставить кавычки кому нет и т.п.)
Ratings: 0 negative/0 positive
Re: передать параметр
DmitryKn
Автор

Сообщений: 300
Дата регистрации: 06.04.2022
akvvohinc
...
Но мой прогноз - дело не в объекте, а по-прежнему в том, что вы отказываетесь разобраться с видимостью переменных.
Поэтому напишите по памяти или спишите откуда-то, в каких программах/методах/процедурах/функциях относительно места определения (создания) будет видна PRIVATE переменная?
...

Специально справился у Клепинина, согласно ему переменные PRIVAT будут видны в программе, где их объявили, и в программах, вызванных из нее.

мой код я по сути приводил, но еще более детально :

Это код на начало всего разговора, так вот тут c PRIVATE не работает, вернее, дает запрос на ввод руками, как на картинке, которую я раньше выкладывал. Т.е. в вызванном из thisform.save() методе thisform.odbfb.oexec() переменная m.lcParameter не видна, хотя по определению выше должна была. При чем сразу непродолжительное время работало, и вдруг начало выдавать запросы на ввод руками, откуда и весь вопрос.
С PUBLIC все работает.

На самом деле проблемы уже нет, с общей помощью найдены несколько вариантов, а использован будет вариант с параметром, как в последнем предложении вашего поста.



Исправлено 1 раз(а). Последнее : DmitryKn, 11.05.23 19:16
Ratings: 0 negative/0 positive
Re: передать параметр
AndyNigmatec

Сообщений: 1550
Откуда: Волгоград
Дата регистрации: 28.06.2015
Не бросайте насовсем создание своих полууниверсальных классов - это основа вашего будущего "фреймворка"

У каждого даже любителя - он, энтот свой собственный фреймворк в той или иной форме есть!



Исправлено 2 раз(а). Последнее : AndyNigmatec, 11.05.23 19:40
Ratings: 0 negative/0 positive
Re: передать параметр
akvvohinc

Сообщений: 4201
Откуда: Москва
Дата регистрации: 11.11.2008
DmitryKn
Это код на начало всего разговора, так вот тут c PRIVATE не работает
Вот работающий аналог вашего кода.
Сравните и найдите, что у вас не так, то есть почему PRIVATE переменная не видна в методе класса.

Ratings: 0 negative/0 positive
Re: передать параметр
DmitryKn
Автор

Сообщений: 300
Дата регистрации: 06.04.2022
akvvohinc
DmitryKn
Это код на начало всего разговора, так вот тут c PRIVATE не работает
Вот работающий аналог вашего кода.
Сравните и найдите, что у вас не так, то есть почему PRIVATE переменная не видна в методе класса.


Должен признать, что такая манера написания кода для меня очень, мягко скажем, не привычна. Я ведь не профессионал, я пользуюсь конструкторами.
И я не смог найти того отличия, из-за которого у меня не работает так, как ожидается (.
Если вы меня ткнете носом в него, я буду вам признателен за науку.
Ratings: 0 negative/0 positive
Re: передать параметр
akvvohinc

Сообщений: 4201
Откуда: Москва
Дата регистрации: 11.11.2008
Цитата:
Если вы меня ткнете носом в него, я буду вам признателен за науку.
По представленному здесь коду мне не удалось определить, в чем дело.
Но если вы выложите файлы вашей формы и класса, то попробую понять, где та собака...
Ratings: 0 negative/0 positive
Re: передать параметр
DmitryKn
Автор

Сообщений: 300
Дата регистрации: 06.04.2022
Просто вырванные с мясом из проекта файлы как есть? Просто скопировать и выложить?



Исправлено 1 раз(а). Последнее : DmitryKn, 12.05.23 18:18
Ratings: 0 negative/0 positive
Re: передать параметр
akvvohinc

Сообщений: 4201
Откуда: Москва
Дата регистрации: 11.11.2008
DmitryKn
Просто вырванные с мясом из проекта файлы как есть? Просто скопировать и выложить?
Да.
Заархивируйте Form.scx, Form.sct и файл (файлы) класса, залейте архив куда-нибудь, если здесь прикрепить не получится, и опубликуйте ссылку.
Можете всё это сделать не в теме, а через ЛС или мой email (есть в профиле).



Исправлено 1 раз(а). Последнее : akvvohinc, 12.05.23 20:10
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 12 (Гостей: 12)

© 2000-2024 Fox Club 
Яндекс.Метрика