v7: Помогите с запросом VFPOLEDB на DBF базе #716877


#0 by smitti911
Есть код :      При выполнении сообщает коннект и 1С падает. Тоже самое при использовании 1СQA. Если в консольке набрать select * from 1sjourn , идет выполнения запроса (секунды 3) и падает 1С с сообщением RunTime Error. Что может быть не так?
#0 by smitti911
Есть код :      При выполнении сообщает коннект и 1С падает. Тоже самое при использовании 1СQA. Если в консольке набрать select * from 1sjourn , идет выполнения запроса (секунды 3) и падает 1С с сообщением RunTime Error. Что может быть не так?
#1 by big
Date_Time_IDDoc   кажись нету такого поля в ДБФ. Есть отдельно Date и Time
#2 by smitti911
Есть там такое поле . Но суть не в том , можна написать селект * и все равно вылет
#3 by big
+ и имя таблицы 1sjourn. Т.е. - без нижнего подчеркивания впереди. У тебя запрос для SQL на самом деле
#4 by big
по ссылке. Это всё применительно к SQL.
#5 by smitti911
В консольке 1sqa выбираю драйвер фокс FAILED! ICommandText::Execute: File '_1sjourn.dbf' does not exist. А если писать 1sjourn.dbf запрос начинает выполнятся и 1С падает
#6 by smitti911
select * from $Справочник.ТМЦ  - вылет
#7 by smitti911
Драйвер отсюда
#8 by big
тебе же пишет, что файла с таким именем нету ))) в папке с базой у тебя нет такого файла! :)  У тебя есть файл 1sjourn.dbf.  Присмотрись ))
#9 by smitti911
Правильно ,я пишу 1sjourn без _ 1с++ версии 3.2.3.19
#10 by big
Пример по удалению документов.  ЗАменить delete на select и будет просто отбор делать
#11 by smitti911
Сейчас попробую....
#12 by smitti911
Ваш запрос работает нормально, почему же в консольке не отрабатыват select * from $Справочник.ТМЦ ?
#13 by smitti911
А вот select * from DH6431 работает нормально...
#14 by smitti911
select * from 1SCONST за 6 сек  340000 строк закрыл открыл 1с , тот же запрос призводит к вылету.... то еть работает через раз...
#15 by Ёпрст
1. поставить православный vfp 2.убрать провайдер от ужаста, если нужны запросы в монопольке, использовать это: 3. строка подключения должна быть такой :     ОлеДБ = СоздатьОбъект("OLEDBData");     Соединение = "Provider=VFPOLEDB.1;Data Source=" + КаталогИБ + ";Mode=ReadWrite;Collating Sequence=MACHINE";     Запрос.Выполнить("EXECSCRIPT('SET REPROCESS TO 60 SECONDS')");     Запрос.Выполнить("EXECSCRIPT('SET REFRESH TO 0,-1')");         Запрос.Выполнить("Exec('SET TABLEVALIDATE TO 0')"); 4. чтобы запрос быстро отрабатывал, читаем тут
#16 by Ёпрст
5. наслаждайся
#17 by smitti911
Попробуем, спасибо.
#18 by smitti911
Проблема осталась, 1 раз работает нормально, потом вылет, реиндексация, опять работает или опять вылет...Ничего не понятно......
#19 by Ёпрст
переустановка vfp и ребут компа
#20 by Ёпрст
ну и не видно, как и че ты запущаешь и какие запросы выполняешь, какой зоопарк из вк стоит ит .д
#21 by smitti911
Зоопарк : Запрос select * from 1SCONST работает через раз
#22 by Ёпрст
ну а так че ?     Попытка
#23 by smitti911
Через 1sqlite не пробовал , хочу уже с этим VFP разобраться....
#24 by smitti911
в классе ПрямойЗапрос есть возможность сделать DELETE записей из табличек?
#25 by Ёпрст
класс прямой запрос в топку, учись писать запросы без него
#26 by Злопчинский
ну.. это можно рассматривать как деградацию + одну из ступеней перехода на снеговика с его "прямыми" запросами.. ;-)
#27 by Ёпрст
на счет vfp - всё написано в . 1sqlite не способен на delete/insert/update/запрос к чужой базе, тут только запрос на оледб.
#28 by smitti911
Пока перезагрузку не могу сделать (работают юзвери), но есть новая ошибка: Не найден ключ реестра с данным класидомHKCRoledbdataCLSID для объекта: oledbdata Прог-ид oledbdata не найден в реестре и помечен как обработанный для исключения повторной генерации. Ошибка генерации файлов по прог-иду: oledbdata
#29 by smitti911
На демо конфигурации Комплексная отрабатывают любые запросы в консольке ...
#30 by smitti911
Как оптимизировать запрос ? Код :
#31 by smitti911
Или так, есть процедура очистки базы прямым запросом Код:     рс.Выполнить("EXECSCRIPT('SET REPROCESS TO 60 SECONDS')");     рс.Выполнить("EXECSCRIPT('SET REFRESH TO 0,-1')");         рс.Выполнить("Exec('SET TABLEVALIDATE TO 0')");     Сообщить("Обработка таблиц документов");         Состояние("...удаляются строки документов...");                  Состояние("...удаляются шапки документов...");                  |           |     Сообщить(" ...удаляются периодические реквизиты, заполняемые документами...");          Сообщить(" ...удаляются перекрестные ссылки...");              Исключение     Сообщить(" ...удаляются ссылки из журнала документов...");      Где можно оптимизировать запросы ?Проводки и ссылки удаляются очень долго.
#32 by Ёпрст
читать это и переписывать запросы под попадание в индекс
#33 by smitti911
Интересует табличка 1SENTRY. Есть еще проблемка, если журнал цеплять через иннер джоин то VFP ругается Function name is missing.Может мое условие можно переписать оптимальней?
#34 by SSSSS_AAAAA
":НачДата~~ " Вы такой синтаксис где откопали?
#35 by smitti911
тут и тут
#36 by SSSSS_AAAAA
А конкретней? В списке форумов предлагаете искать? На каком языке этот код? Для какого драйвера этот код?
#37 by smitti911
Все описано выше : VFPOLEDB на DBF базе прямой запрос 1С++
#38 by smitti911
Сейчас читаю про попадание в индекс, например: Например мы хотим выбрать документы из 1SJOURN за период . Код: |WHERE    Жур.Date BETWEEN :НачДата~~ AND :КонДата~~ то оптимизатор не найдет индекса, так как «Жур.Date»  не соответствует «DTOS(date)+time+iddoc»     К счастью FoxPro поддерживает упорядочение строк – и можно использовать оператор          BETWEEN . Длина строки «time+iddoc» равна 15. Определим переменные МинСтрока= "               " Собственно условие Код: WHERE   DTOS(date)+time+iddoc BETWEEN (DTOS(:НачДата~~)+'           ') AND (DTOS(:КонДата~~)+'ZZZZZZZZZZZZZZZ') (для простоты переменные МинСтрока и МаксСтрока не используются)
#39 by Ёпрст
че не устраивает ?
#40 by SSSSS_AAAAA
Зайдем с другой стороны. Что еще пишет в сообщении об ошибке кроме Function name is missing? На какую строку ругается?
#41 by Ёпрст
#42 by Ёпрст
А тебе.. можно запихать выборку доков во временную табличку и соединять потом везде в делете
#43 by SSSSS_AAAAA
dtos(:НачДата~~) в сочетании с УстановитьТекстовыйПараметр("НачДата", '01.01.80') - чушь, приводящая к ругани на несоответствие типов. К тому же, '01.01.80' есть большие грабли в деле правильного понимания драйвером сего безобразия.
#44 by SSSSS_AAAAA
Добавчик: а Жур.date у нас какого типа?
#45 by Ёпрст
ты не в теме
#46 by SSSSS_AAAAA
Я очень даже в теме VFPOLEDB на DBF. VFPOLEDB на dtos со строковым параметром будет ругаться на несоответствие типов.
#47 by SSSSS_AAAAA
Изучай: Visual FoxPro 9.0 Справка по языку   Возвращает дату в виде символьной строки формата ггггммдд из заданного выражения типа "дата" (Date) или "дата-время" DateTime. Параметры dExpression Указывает выражение типа "дата" для преобразования посредством функции DTOS в строку из восьми цифр. tExpression Указывает выражение типа "дата-время" для преобразования посредством функции DTOS в строку из восьми цифр. Символьное Примечания Эта функция полезна для индексирования таблиц, содержащих поля типа "дата" и "дата-время". Она равнозначна функции DTOC для случая, когда указывается первый необязательный аргумент. Вид и содержимое символьной строки, возвращаемой функцией DTOS, не зависит от установок SET DATE или SET CENTURY.
#48 by Ёпрст
:)
#49 by Ёпрст
Продолжай дальше изучение справки по vfp
#50 by smitti911
Запрос >>> OLEDBCommand error: FAILED! ICommandText::Execute: Function name is missing ).
#51 by SSSSS_AAAAA
Спасибо, но в таких рекомендациях не нуждаюсь. Эту справку и так почти наизусть знаю.
#52 by smitti911
В чем разница Если Рег.БыстраяОбработкаДвижений =0 Тогда
#53 by Ёпрст
в табличке движений регистра будут доп поля - не надо будет делать соединение с журналом (аналогично будут поля, ежели стоит галка на одном из измерений регистра)
#54 by SSSSS_AAAAA
М-да, очень информативно. Но видно, что стоит закрывающая скобка, которой не найдено соответствие.
#55 by Ёпрст
для проводок, нужно задействовать этот индекс DTOS(DATE)+TIME+DOCID+STR(NUMBER,5)+STR(CORNO,5)
#56 by Ёпрст
и как помогает ?
#57 by Ёпрст
у тя там че хоть ? Ты не у всех документов режешь движуху ?
#58 by smitti911
Движуху надо оставить по банк.випис. и зарплатная часть //*******************************************
#59 by smitti911
Чем можно смотреть какой индекс используется у какай таблички?
#60 by SSSSS_AAAAA
Ага, особенно в поисках ошибок в чужом коде.
#61 by smitti911
select Пров.TIME FROM 1SENTRY as Пров INNER JOIN    1SJourn ON 1SJourn.IDDoc = Пров.DocID WHERE 1SJourn.Date BETWEEN :НачДата AND :НачДата~ Запрос >>> OLEDBCommand error: FAILED! ICommandText::Execute: Command contains unrecognized phrase/keyword.
#62 by SSSSS_AAAAA
Ничем. В фоксе нет такого средства. Но есть возможность посмотреть уровень оптимизации. SYS(3054). Но для этого запрос надо отлаживать в фоксе, и только потом готовый запрос тащить в другие системы.
#63 by SSSSS_AAAAA
Разумеется ругается. Он не знает что такое  :НачДата
#64 by Ёпрст
select Пров.TIME FROM 1SENTRY as Пров INNER JOIN    1SJourn as Жур ON Жур .IDDoc = Пров.DocID WHERE Жур .Date BETWEEN :НачДата~~ AND :НачДата~~
#65 by Ёпрст
:)))))))))))))))))))))))))))))))))))))
#66 by Ёпрст
только вот, соединение с журналом в этом запросе лишнее + нет попадания в индекс
#67 by SSSSS_AAAAA
Ну вот и прелестно, хоть кому-то я жизнь скрасил.
#68 by Ёпрст
месье не знает как посмотреть индексы на табличку ?
#69 by SSSSS_AAAAA
Мсье знает как посмотреть индексы на табличку, но вопрос был про использование индексов в запросе, а это сильно разные вещи.
#70 by Junior1s
кто то походу троллит тебя :)
#71 by smitti911
Лучше переписать через INNER JOIN с журналом или оставить как есть только попадать в индекс.Что бістрее отработает?
#72 by smitti911
Так работает.Спасибо.
#73 by smitti911
Все он знает. 1sqa если что....
#74 by SSSSS_AAAAA
Не всё. Найдите отличия между :НачДата~~ и :НачДата
#75 by SSSSS_AAAAA
Что быстрее отработает поможет узнать тестовый прогон запросов.
#76 by Ёпрст
{d '2001-01-01'}, '20010101' дальше бум тупить, или как ?
#77 by Ёпрст
что быстрее работает, покажет план выполнения запроса
#78 by Ёпрст
и о чудо, его тоже можно смотреть в дбф базах.. если че
#79 by Ёпрст
см. в этом запросе, можно выкинуть соединение с журналом и воткнуть условие на дату из проводки
#80 by SSSSS_AAAAA
И что? Первое вообще не пойми что, второе - строка, которая может быть получена от функции dtos при передаче ей значения типа ДАТА, например {^2001-01-1}.
#81 by SSSSS_AAAAA
его - это ЧТО?
#82 by smitti911
|      В журнале ведь индекс DTOS(date)+time+iddoc  , почему нету прироста по скорости?
#83 by SSSSS_AAAAA
Или под словом "его" имеется в виду план запроса? Если так, то разочарую - в фоксе нет понятия "план запроса", впрочем, как нет и понятия "дбф база" :)
#84 by SSSSS_AAAAA
"ведь индекс DTOS(date)+time+iddoc  , почему нету прироста по скорости?" Потому, что, как минимум, наличие какого-то индекса не гарантирует его использования.
#85 by Ёпрст
что в УсловиеПоВидамДок ?
#86 by smitti911
WHERE (jr.IDDOCDEF = ' E7L')
#87 by Ёпрст
там всегда 1 вид документа ? или что ?
#88 by Ёпрст
УсловиеПоВидамДок покажи код функции
#89 by Ёпрст
та ты шо
#90 by smitti911
Нет, пока пробую на копии базы то 1 . А потом будет порядка 20-и
#91 by smitti911
через OR
#92 by smitti911
Cvjnhb
#93 by Ёпрст
и зачем это всё ? Зачем в этом запросе ограничение по виду ? Это свёртка же, там нужно у всех доков проводки выкидывать
#94 by Ёпрст
если у двух документов нужно оставить, то так тогда хотя бы and not in ($ВидДокумента.ПервыйДок,$ВидДокумента.ВторойДок) но никак не or
#95 by smitti911
Ну назовем это неполная свертка, нужно несколько видов доков оставить с проводками, движухой и т.д.Такая вот тупая задача.Незнаю как бухи будут сводить остатки.... Сейчас запускал чистку за 1 день по виду док. приходная.Время выполнения 45 сек причем 33 из них это чистка 1ссентри
#96 by SSSSS_AAAAA
Сильный аргумент. :) Лучше ссылочку на доку по планам запросов в фоксе кинул для изучения, может где мимо меня промелькнула?
#97 by Ёпрст
#98 by Ёпрст
даже фокс не нужен, только некоторое файло с него
Тэги: 1С 7.7 и ранее
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С