передать параметр | |
---|---|
DmitryKn Автор Сообщений: 300 Дата регистрации: 06.04.2022 |
Доброго всем праздничного дня!
Хочу передать переменную, выражение типа:
Это происходит не зависимо от оператора "?" , пробовал убирать, пробовал убирать префикс "m. " , но не избавился. Не подскажете ли, где мне чего поправить? Исправлено 6 раз(а). Последнее : DmitryKn, 09.05.23 16:48 |
Re: передать параметр | |
---|---|
akvvohinc Сообщений: 4224 Откуда: Москва Дата регистрации: 11.11.2008 |
Цитата:Особо не вчитывался, возможно, это просто описка здесь, на форуме. Но вижу, что сначала написано lcParameter, а позже - lcParametr. |
Re: передать параметр | |
---|---|
DmitryKn Автор Сообщений: 300 Дата регистрации: 06.04.2022 |
Да, описка здесь.
Исправлено 1 раз(а). Последнее : DmitryKn, 09.05.23 16:47 |
Re: передать параметр | |
---|---|
PaulWist Сообщений: 14625 Дата регистрации: 01.04.2004 |
Судя по всему, локальную переменную испольщуешь пр вызове метода, эта пепеменная там просто не видна.
------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) |
Re: передать параметр | |
---|---|
akvvohinc Сообщений: 4224 Откуда: Москва Дата регистрации: 11.11.2008 |
Цитата:Возможно, сначала переменная lcParameter не была описана, и по умолчанию становилась PRIVATE. Затем ты её описал как LOCAL, и внутри thisform.oObject.sqlexec она стала не видна. Если так, то передай и её как параметр. Исправлено 1 раз(а). Последнее : akvvohinc, 09.05.23 18:23 |
Re: передать параметр | |
---|---|
DmitryKn Автор Сообщений: 300 Дата регистрации: 06.04.2022 |
Спасибо за отклик в праздник!
Да, локальная. Но дело не в этом, объявил паблик, тоже самое ( и это же параметр, должен быть виден он в объект как параметр передается. И до какого-то момента был виден. Переставлю-ка я фокс, вчера глюк проскочил, может поэтому. Исправлено 1 раз(а). Последнее : DmitryKn, 09.05.23 20:01 |
Re: передать параметр | |
---|---|
Vedmak Сообщений: 5973 Откуда: CiTY Дата регистрации: 30.10.2003 |
Я тоже в начале использовал эту конструкцию со "ссылкой" на переменную "?m.<fieldname>" работало. Но в какой то момент тоже перестало. Я недельку провел в изысканиях... но терпение кончилось и просто переделал на явное указание значения поля. Не исключено вопрос совместитмости новых драйверов ODBC и "устаревшего" VFP. Но меня на долгие академические исследования не хватает. Вижу цели и обхожу препятствия. ))
Прилагаю свой класс для работы с MySQL. Основа это сознание объекта с полями из таблицы БД с заведомо неизвестной структурой. Методы: add_record - вставляем запись в таблицу и новая запись возвращается в приложение в виде объекта loRecord get_record - получаем запись из БД в виде объекта loRecord put_record - укладываем объекта loRecord в базу *ins_record - вставка объекта loRecord в таблицу не имеющей ID реализована, но в базовом проекте нет в этом надобности. покажу по запросу. Пример метода на форме обновления записи в справочнике: LPARAMETERS lnRecordId LOCAL loRec, loSign IF EMPTY( This.record_id ) IF !goSql.add_record( "country_list", @loRec) RETURN goApp.error_id = no_error ENDIF lnRecordId = loRec.id else IF !goSql.get_record( "country_list", This.record_id, @loRec) RETURN goApp.error_id = no_error ENDIF ENDIF IF !goSql.add_sign( loRec.sign, @loSign, sign_note_update ) RETURN goApp.error_id = no_error ENDIF loRec.sign = loSign.id loRec.name = This.txtName.Value loRec.code = This.txtCode.Value goSql.put_record( "country_list", loRec.id, loRec ) RETURN goApp.error_id = no_error P.S. sing_list - служебная таблица за регистрации факта обновления записи P.P.S. Извиняюсь на ошибки, новая клава без русских букв. ) Еще не прикупил наклейки. Моторика тоже не изменилась пока под новый девайс. ------------------ Говорить стоит лишь для тех, кто слушает. Исправлено 2 раз(а). Последнее : Vedmak, 09.05.23 20:59 |
Re: передать параметр | |
---|---|
PaulWist Сообщений: 14625 Дата регистрации: 01.04.2004 |
Это действие (убрать параметризированный запрос) приводит к тому, что ЛЮБОЙ запрос отдельно компилируется, забивая кэш процедур, вытесняя планы откомпилированных/параметризированных запросов. Пока запросов немного (до 1 транзакции/сек) можно наплевать и забыть, при высоконагруженной системе сразу возникнут тормоза выполнения запросов и разгрести их будет ой как непросто. И второе (главное), если надо вынуть/обновить/удалить/добавить на сервере 100 записей, то как будешь делать, 100 раз вызывать соответстующие методы класса Третье, если для DML таблицы потребуется запрос, когда не знаешь ID (например, обновление должно быть на основе 2-3 итд таблиц), то как обновить табличку?? (будешь сначала на клиенте получать ID, а затем в обратную сторону слать DML запросы) ?? И что делать, если надо вызвать ф-ию, хранимую процедуру?? И что делать, если нет прав на чтение таблиц?? И четвертое, где управление транзакциями?? PS как начальный опыт пойдёт, но в прод, слишком сыро. ------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) Исправлено 2 раз(а). Последнее : PaulWist, 09.05.23 21:44 |
Re: передать параметр | |
---|---|
DmitryKn Автор Сообщений: 300 Дата регистрации: 06.04.2022 |
Попробую переставить, а там видно будет.
|
Re: передать параметр | |
---|---|
Vedmak Сообщений: 5973 Откуда: CiTY Дата регистрации: 30.10.2003 |
Вот про высоко нагруженные системы я только краем зачерпнул на опыте в паре проектов. Совершено не знаю как это правильно выполнять. Отдельная тема. Мне не доводилось массово апдейтить таблицы где кол-во затронутых записей в сотнях+ мегабайтах. Одним "хапом" update до 500к в рамках одних транзакционных скобок выполняется. Хостер (MySQL) такую БД в ~100 Гб переваривает во вменяемые (для бизнеса) сроки. По факту накладная в +/- 500 позиций вообще не вопрос для MySQL 8.* в варианте инсталляции DeveloperStation.А что там на серверах... одному админу хостера известно. А вот вопрос со сложными SQL-запросами это действительно большая тема! Молодые получают образование (шаблоны) в ВУЗ-е сжато, а старики накапливают в поиске как привыкли. ------------------ Говорить стоит лишь для тех, кто слушает. |
Re: передать параметр | |
---|---|
akvvohinc Сообщений: 4224 Откуда: Москва Дата регистрации: 11.11.2008 |
Не передается (не хочется повторяться, но это опять "отсутствие базовых знаний"). Как параметр передается m.lcQuery, который является просто строкой. Чтобы lcParameter передался в sqlexec надо выполнить: thisform.oObject.sqlexec(m.lcQuery, m.lcParameter, '') Так что если m.lcParameter - действительно локальная переменная, то она не может быть видна в методе sqlexec. Если же она не локальная (Private или Public), то она будет видна в соответствии со своей областью видимости. (можно, но не стоит называть методы именем существующих функций, я sqlexec() имею в виду) Цитата:Лучше приведите скрин сообщения (или точный его текст без перевода). Что-то у меня есть сомнения, что речь обязательно идет о переменной lcParameter. Что вам мешает остановить выполнение перед командой SQLEXEC(m.lnConnect,m.lcQuery) и проверить значения всех полей/переменных, использующихся в lcQuery? Цитата:Маловероятно, что дело в Фоксе. |
Re: передать параметр | |
---|---|
akvvohinc Сообщений: 4224 Откуда: Москва Дата регистрации: 11.11.2008 |
Цитата:Непонятно, что здесь "изыскивать". Достаточно перед вызовом SQLEXEC проверить существование и значения всех полей/переменных, используемых в этой функции. |
Re: передать параметр | |
---|---|
AndyNigmatec Сообщений: 1574 Откуда: Волгоград Дата регистрации: 28.06.2015 |
Сдается мне проблема может быть в этом:
Вроде как читая написанное проблемы быть не должно, но ... сталкивался как-то с подобными непонятками. Предлагаю вам сделать так: 1. заводим на форме св-во для этого параметра, типа thisform.AddProperty("cMyParam",null) ну или инициализировав сразу нужным типом/значением 2.в InteractiveChange (например) этого texbox1 делаем - thisform.cMyParam=thisform.texbox1.value 3. в вашем запросе - m.lcQuery = 'execute procedure myProc ?cur.field1,?cur.field2,?thisform.cMyParam,?cur.field3' 100% будет работать ))) |
Re: передать параметр | |
---|---|
DmitryKn Автор Сообщений: 300 Дата регистрации: 06.04.2022 |
во вложении. В реале называлась lcpassw |
Re: передать параметр | |
---|---|
DmitryKn Автор Сообщений: 300 Дата регистрации: 06.04.2022 |
не прокатило, выдает такой же запрос, как на картинке в предыдущем посте, только уже, конечно, с thisform.сMyParam . Явно значение присваивал, thisform.cMyParam = '123' , тоже не помогло. |
Re: передать параметр | |
---|---|
DmitryKn Автор Сообщений: 300 Дата регистрации: 06.04.2022 |
решил так - добавил поле в курсор
запрос принял вид
Природа явления осталась загадкой. Исправлено 1 раз(а). Последнее : DmitryKn, 10.05.23 13:42 |
Re: передать параметр | |
---|---|
Владимир Максимов Сообщений: 14100 Откуда: Москва Дата регистрации: 02.09.2000 |
Так просили же посмотреть, существует ли переменная непосредственно перед выполнением SQLExec(). Если через отладчик не получается, то можно заглушку поставить
Исправлено 1 раз(а). Последнее : Владимир Максимов, 10.05.23 13:58 |
Re: передать параметр | |
---|---|
DmitryKn Автор Сообщений: 300 Дата регистрации: 06.04.2022 |
Есть такой термин - "эффект присутствия". Я ранее и public объявлял, и свойство в форму. Теперь, скрепя сердцем, ну сделаю еще раз, хотя и безполезно ... и вот, переменная существует и значение передается. Вы, Владимир, почаще заходите в мои темы, честное слово, одно присутствие помогает. Но если опять пропадет, у меня будет истерика. |
Re: передать параметр | |
---|---|
DmitryKn Автор Сообщений: 300 Дата регистрации: 06.04.2022 |
Большое спасибо всем, кто откликнулся.
|
Re: передать параметр | |
---|---|
AndyNigmatec Сообщений: 1574 Откуда: Волгоград Дата регистрации: 28.06.2015 |
Загадка природы блин
нехорошо это public делать ... может неожиданно помешать где-нито. |
© 2000-2024 Fox Club  |