Гость
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / execscript передача параметра / 7 сообщений из 7, страница 1 из 1
21.09.2011, 19:33
    #37450557
Valli377
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
execscript передача параметра
Здравствуйте, помогите, пожалуйста, разобраться с следующим вопросом

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
21.09.2011, 21:31
    #37450689
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
execscript передача параметра
Напрямую подставить значение в символьную строку.

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

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

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

Код: plaintext
execScript("parameter nod ... RETURN retval",  123 )
...
Рейтинг: 0 / 0
21.09.2011, 21:31
    #37450690
Sergey Sizov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
execscript передача параметра
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
22.09.2011, 08:07
    #37450992
Valli377
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
execscript передача параметра
ВладимирМНапрямую подставить значение в символьную строку.

Код: 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
22.09.2011, 11:11
    #37451236
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
execscript передача параметра
А как бы Вы передали параметр в команду 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
22.09.2011, 12:44
    #37451474
Valli377
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
execscript передача параметра
ВладимирМА как бы Вы передали параметр в команду 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
23.09.2011, 20:46
    #37454375
SSn888
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
execscript передача параметра
Valli377,

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


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