powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / execscript передача параметра
7 сообщений из 7, страница 1 из 1
execscript передача параметра
    #37450557
Valli377
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, помогите, пожалуйста, разобраться с следующим вопросом

Delphi + ADOCommand + VFPOleDB provider.
Имеется DBF таблица ~ 700 тыс. записей и индексом по ключевому полю.
Подключаюсь к таблице. В Delphi через ADOCommand пытаюсь выполнить следующий скрипт:

Код: plaintext
1.
2.
3.
ADOCommand.CommandType := cmdText;
ADOCommand.CommandText := 'execscript("parameter nod"+chr(13)+"SELECT _mdt"+chr(13)+"SET ORDER TO REF_IDX"+chr(13)+"retval=SEEK(nod)"+chr(13)+"RETURN retval", nod)';
ADOCommand.Execute;

Параметр retval возвращает необходимое значение, но при использовании параметра nod, команда выполняется с ошибкой "Variable 'NOD' is not found".

Вопрос: как правильно передать параметр в execscript?
Заранее спасибо за ответы!
...
Рейтинг: 0 / 0
execscript передача параметра
    #37450689
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Напрямую подставить значение в символьную строку.

Код: plaintext
ADOCommand.CommandText := 'execscript("...",' + '123' + ')';

Не знаю, как корректно в Delphi сложить символьные строки.

Ругань идет на последний параметр. Тот, значение которого, должно быть вставлено в ExecScript(). Т.е. вместо последнего nod надо подставить его значение. Ну, должно получиться что-то вроде такого

Код: plaintext
execScript("parameter nod ... RETURN retval",  123 )
...
Рейтинг: 0 / 0
execscript передача параметра
    #37450690
Sergey Sizov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valli377Здравствуйте, помогите, пожалуйста, разобраться с следующим вопросом

Delphi + ADOCommand + VFPOleDB provider.
Имеется DBF таблица ~ 700 тыс. записей и индексом по ключевому полю.
Подключаюсь к таблице. В Delphi через ADOCommand пытаюсь выполнить следующий скрипт:

Код: plaintext
1.
2.
3.
ADOCommand.CommandType := cmdText;
ADOCommand.CommandText := 'execscript("parameter nod"+chr(13)+"SELECT _mdt"+chr(13)+"SET ORDER TO REF_IDX"+chr(13)+"retval=SEEK(nod)"+chr(13)+"RETURN retval", nod)';
ADOCommand.Execute;

Параметр retval возвращает необходимое значение, но при использовании параметра nod, команда выполняется с ошибкой "Variable 'NOD' is not found".

Вопрос: как правильно передать параметр в execscript?
Заранее спасибо за ответы!И где тут передача параметра? И с чего взяли, что 'execscript создает функцию с параметром?
...
Рейтинг: 0 / 0
execscript передача параметра
    #37450992
Valli377
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМНапрямую подставить значение в символьную строку.

Код: plaintext
ADOCommand.CommandText := 'execscript("...",' + '123' + ')';

Не знаю, как корректно в Delphi сложить символьные строки.


Да, строчку скомпоновать не сложно, все работает. Но все дело в том, что при изменении свойства CommandText уничтожаются параметры и параметр "retval" приходится создавать заново. Параметр создать не сложно, но при этом страдает производительность (по таблице динамически строится дерево).

Параметр retval (тип параметра pdReturnValue) успешно возвращает результат, но вот как передать параметр??? Синтаксис функции execscript должен позволять это:

ExecScript(cExpression [, eParameter1, eParameter2, ...])

eParameter1, eParameter2, ...
Optional. Specify parameters passed to a script that has a parameter statement in first line
...
Рейтинг: 0 / 0
execscript передача параметра
    #37451236
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как бы Вы передали параметр в команду Select-SQL?

Не проверял. Поэтому - без гарантий. Но, теоретически, должно быть что-то вроде такого

Код: plaintext
1.
2.
3.
4.
ADOCommand.CommandText := 'execscript("parameter nod"+chr(13)' + 
                                      '+"SELECT _mdt"+chr(13)' + 
                                      '+"SET ORDER TO REF_IDX"+chr(13)' + 
                                      '+"retval=SEEK(nod)"+chr(13)' + 
                                      '+"RETURN retval", ?)';

Обозначение места параметра в команде - это вопросительный знак. Само значение параметра формируется через ADODB.PARAMETER и наполняется конкретным значением непосредственно перед выполнением

=================

А зачем Вы вообще используете "навигационные" команды поиска? Насколько я вижу, то, что Вам надо, можно получить запросом вида

Код: plaintext
select count(*) from _mdt where ... = nod

Если запрос вернул 0, то нет ни одной записи. Если значение отличное от 0, то что-то есть.
...
Рейтинг: 0 / 0
execscript передача параметра
    #37451474
Valli377
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМА как бы Вы передали параметр в команду Select-SQL?

Не проверял. Поэтому - без гарантий. Но, теоретически, должно быть что-то вроде такого

Код: plaintext
1.
2.
3.
4.
ADOCommand.CommandText := 'execscript("parameter nod"+chr(13)' + 
                                      '+"SELECT _mdt"+chr(13)' + 
                                      '+"SET ORDER TO REF_IDX"+chr(13)' + 
                                      '+"retval=SEEK(nod)"+chr(13)' + 
                                      '+"RETURN retval", ?)';

Огромное Вам спасибо! Все работает!
А по поводу SELECT'а - как ни странно, но работает медленней чем скрипт. При большом количестве узлов дерево открывается с небольшой, но задержкой

Спасибо еще раз за помощь!
...
Рейтинг: 0 / 0
execscript передача параметра
    #37454375
SSn888
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valli377,

так и не октрывайте все сразу :)
загоняйте dummy, а при прямом обращениии "доподгружайте" что надо
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / execscript передача параметра
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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