|
Как создать временную таблицу в оперативке через vfpoledb
|
|||
---|---|---|---|
#18+
Работаю с таблицами 1С (дбф) через vfpoledb. Все замечательно - но постоянно требуется использовать данные подзапроса во многих частях основного. Нет ли возможности выложить подзапрос в некую временную таблицу? Можно конечно выложить в файл дбф - но это очень медленно. Вот такой код отрабатывается нормально Select SC33.ID as ID INTO CURSOR TmpTable NOFILTER но потом обратиться к TmpTable не получается :( ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2007, 18:57 |
|
Как создать временную таблицу в оперативке через vfpoledb
|
|||
---|---|---|---|
#18+
kiruhaВот такой код отрабатывается нормально Select SC33.ID as ID INTO CURSOR TmpTable NOFILTER но потом обратиться к TmpTable не получается :( А в чем конкретно проблема при обращении? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2007, 09:25 |
|
Как создать временную таблицу в оперативке через vfpoledb
|
|||
---|---|---|---|
#18+
Сначала делаю Select SC33.ID as ID from sc33 INTO CURSOR TmpTable NOFILTER (в первом посте забыл from в спешке) Потом пытаюсь использовать курсор Select TmpTable.ID as ID from TmpTable Получаю FAILED! ICommandText::Execute(): File 'tmptable.dbf' does not exist. Ссесию подключения не прерываю. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2007, 10:44 |
|
Как создать временную таблицу в оперативке через vfpoledb
|
|||
---|---|---|---|
#18+
1. Создать файл со скриптом Код: plaintext 1.
2. Выполнить его через exectscript в OLEDB ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2007, 11:45 |
|
Как создать временную таблицу в оперативке через vfpoledb
|
|||
---|---|---|---|
#18+
Вообще-то vfpoledb поддерживает EXECSCRIPT(...). Это то, что Вам нужно, подробности в стандартном хелпе, удачи. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2007, 12:44 |
|
Как создать временную таблицу в оперативке через vfpoledb
|
|||
---|---|---|---|
#18+
В командном окне FoxPro команда EXECSCRIPT('Select SC33.ID as ID from sc33 INTO CURSOR TmpTable NOFILTER '+CHR(13)+'Select TmpTable.ID as ID2 from TmpTable') выполняется так как хотелось. Но передаю ее vfpoledb - на выходе : return_value 1 И вообще - какой бы я скрипт ни писал - на выходе всегда "1" :( ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2007, 15:32 |
|
Как создать временную таблицу в оперативке через vfpoledb
|
|||
---|---|---|---|
#18+
А что Вы хотели получить от ExecScript? Это его нормальное поведение. Его задача - выполнить код, переданный ему параметром и сообщить об не/успешностисполнения. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2007, 15:40 |
|
Как создать временную таблицу в оперативке через vfpoledb
|
|||
---|---|---|---|
#18+
авторFAILED! ICommandText::Execute(): File 'tmptable.dbf' does not exist. Вот это интересней, ссори, что сразу не увидел. Можно подробнее, как коненнектимся, как выполняемся ? Меня терзают смутные сомнения, что то, что Вам нужно получить, можно дернуть и без EXECSCRIPT. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2007, 15:46 |
|
Как создать временную таблицу в оперативке через vfpoledb
|
|||
---|---|---|---|
#18+
Wiskas авторFAILED! ICommandText::Execute(): File 'tmptable.dbf' does not exist. Вот это интересней, ссори, что сразу не увидел. Можно подробнее, как коненнектимся, как выполняемся ? Меня терзают смутные сомнения, что то, что Вам нужно получить, можно дернуть и без EXECSCRIPT. Подключаемся при помощи специальной компоненты через OLEDBData .Строка Соединения |Provider=VFPOLEDB.1; |Deleted=Yes; |Null = Yes; |Exclusive = No; |SourceType = DBF; |Data Source=" ..."; |Mode=ReadWrite; |Extended Properties=""""; |User ID=""""; |Password=""""; |Mask Password=False; |Collating Sequence=MACHINE; |DSN=""""" Команды FoxPro выполняются через oledbcommand Можно использовать хранимые процедуры. А временные таблицы как создавать 1С-ники не знают. Поэтому либо выполняют по нескольку раз один и тот же запрос (в подзапросах), либо без группирования тянут все на клиента и там уже группируют при помощи языка. Как сохранить в ДБФ - известно, но признано неэффективным по времени. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2007, 16:18 |
|
Как создать временную таблицу в оперативке через vfpoledb
|
|||
---|---|---|---|
#18+
Sergey Sizov.А что Вы хотели получить от ExecScript? Это его нормальное поведение. Его задача - выполнить код, переданный ему параметром и сообщить об не/успешностисполнения. Вот и у меня такое впечатление - что он код возвращает флаг успешности/неуспешности. Но тогда - почему в коммандном окне - все ОК? И в справке фоксклуба и на MSDN то же самое : "Возвращаемое значение определяется значением, которое возвращается из указанного программного кода cExpression. Если никакого значения не возвращается, то система Visual FoxPro возвращает, как обычно, = .T. (True) Функция ExecScript( ), в отличие от Расширенного Макро, обеспечивает такой же эффект, как при вводе нескольких строк программного кода в Командном окне и нажатии клавиши <Enter>." ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2007, 16:24 |
|
Как создать временную таблицу в оперативке через vfpoledb
|
|||
---|---|---|---|
#18+
A у Вас там в 1ц ADO или ADO.NET ? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2007, 16:26 |
|
Как создать временную таблицу в оперативке через vfpoledb
|
|||
---|---|---|---|
#18+
"Возвращаемое значение определяется значением, которое возвращается из указанного программного кода cExpression И какого типа может быть результат выражения? И внутри ЕxecScript была попытка что-то вернуть? Какая? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2007, 16:32 |
|
Как создать временную таблицу в оперативке через vfpoledb
|
|||
---|---|---|---|
#18+
WiskasA у Вас там в 1ц ADO или ADO.NET ? Нет, ADO может использоваться, но не используется - неэффективно, так как приходится перебирать все строки выборки, при получении данных. Кажется используется ODBCRecordSet, но это нужно уточнять у автора компоненты. Из спецификации : "Если запрос содержит несколько SQL инструкций (multistatement batch), результаты возвращаются только от первой инструкции. Однако, на драйвер уходит весь текст запроса (По спецификации ODBC, будут ли выполнены остальные инструкции в пакете зависит от драйвера. Для драйвера SQL Server они выполняются), остальные результаты игнорируются. " Честно говоря не понимаю как это информация поможет проблеме :( В не зависимости от 1С или не 1С - в foxpro кто нибудь использовал временные таблицы при соединении через OLeDB ??? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2007, 16:44 |
|
Как создать временную таблицу в оперативке через vfpoledb
|
|||
---|---|---|---|
#18+
У тебя нет другого выхода кроме как загонять все в RecordSet и имеено перебирать. Только непонятно , зачем тянуть всю таблицу, что за потребность такая. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2007, 16:47 |
|
Как создать временную таблицу в оперативке через vfpoledb
|
|||
---|---|---|---|
#18+
проходящий. "Возвращаемое значение определяется значением, которое возвращается из указанного программного кода cExpression И какого типа может быть результат выражения? И внутри ЕxecScript была попытка что-то вернуть? Какая? Если буквально -Таблица. Колонка return_value . Одна строка. Значение 1, тип число. Но в 1С всегда возвращается таблица, поэтому скорее вернулось просто число 1. Если ошибка в скрипте - сообщение об ошибке и ничего не возвращает. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2007, 16:50 |
|
Как создать временную таблицу в оперативке через vfpoledb
|
|||
---|---|---|---|
#18+
WiskasУ тебя нет другого выхода кроме как загонять все в RecordSet и имеено перебирать. Только непонятно , зачем тянуть всю таблицу, что за потребность такая. Протестировал все на чистом ADO. Строка подключения та же. rs = ADO.Execute(EXECSCRIPT(" 'Select SC33.code as ID from sc33 INTO CURSOR TmpTable NOFILTER '+CHR(13)+' Select TmpTable.ID as ID2 from TmpTable' "); Результат - одна запись с Rs.Fields("return_value").Value=-1 Могу проверять все в обоих вариантах. Пока результат один :( ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2007, 17:34 |
|
Как создать временную таблицу в оперативке через vfpoledb
|
|||
---|---|---|---|
#18+
Мой вопрос, видимо, не был понят и не обдуман. ExecScript может вернуть результат выражения . Не команды, а выражения! А результат выражения не может быть таблицей. И результат надо возавращать, то есть использовать Return. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2007, 17:55 |
|
Как создать временную таблицу в оперативке через vfpoledb
|
|||
---|---|---|---|
#18+
проходящий.Мой вопрос, видимо, не был понят и не обдуман. ExecScript может вернуть результат выражения . Не команды, а выражения! А результат выражения не может быть таблицей. И результат надо возавращать, то есть использовать Return. Через Return я могу возвратить только одну переменную простого типа. А как мне вернуть таблицу? И почему сам Fox возвращает в командном окне все что надо? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2007, 18:41 |
|
Как создать временную таблицу в оперативке через vfpoledb
|
|||
---|---|---|---|
#18+
Через Return я могу возвратить только одну переменную простого типа. Вот на это я и намекал. Фокс может вернуть в вызывающую программу только одно значение. А как мне вернуть таблицу? А вот над этим надо думать. [/quot] И почему сам Fox возвращает в командном окне все что надо?[/quot] В командном окне он ничего не возвращает. Фокс показывает результат выполнения команд, а не вычисления выражений. При этом команда может вычислять результат какого-то выражения и показывать полученный результат в каком-то зависящем от команды виде. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2007, 18:59 |
|
Как создать временную таблицу в оперативке через vfpoledb
|
|||
---|---|---|---|
#18+
Большое спасибо Wiskas! Проблема была решена при помощи EXECSCRIPT('SELECT * INTO CURSOR ...) ... |
|||
:
Нравится:
Не нравится:
|
|||
02.09.2007, 12:47 |
|
Как создать временную таблицу в оперативке через vfpoledb
|
|||
---|---|---|---|
#18+
Также и EXECSCRIPT('SELECT * INTO ARRAY ...) В документации написано, что в случае курсора "временная таблица создается в этом случае на диске." А массива - в оперативке. Но никакой разницы по скорости я не заметил... ? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.09.2007, 12:53 |
|
Как создать временную таблицу в оперативке через vfpoledb
|
|||
---|---|---|---|
#18+
kiruhaНо никакой разницы по скорости я не заметил...? Это потому что FoxPro стремится все разместить в памяти. И если таблица очень маленькая то разницы между массивом и таблицей в Вашем случае нет... ... |
|||
:
Нравится:
Не нравится:
|
|||
02.09.2007, 12:58 |
|
Как создать временную таблицу в оперативке через vfpoledb
|
|||
---|---|---|---|
#18+
Sergey Ch kiruhaНо никакой разницы по скорости я не заметил...? Это потому что FoxPro стремится все разместить в памяти. И если таблица очень маленькая то разницы между массивом и таблицей в Вашем случае нет... О большое спасибо ! :) Тогда по умолчанию я буду использовать курсор, до этого думал ARRAY. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.09.2007, 13:04 |
|
|
start [/forum/topic.php?fid=41&fpage=11&tid=1581840]: |
0ms |
get settings: |
11ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
29ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
2ms |
others: | 266ms |
total: | 396ms |
0 / 0 |