v7: Прямые запросы 1С++ и 1Sqlite - есть разница? #629068


#0 by Zhuravlik
Здравствуйте. Нашел вот вроде понятную литературу по запросам 1С++, но не пойму, применим ли такой синтаксис для 1SQlite? Если там небольшие различия, то можно им пользоваться, если большие, то преимущество 1SQlite получается только из-за монопольного режима? Может ее вовсе тогда не использовать?
#1 by Zhuravlik
+
#2 by Aleksey
разрешаю
#3 by Aleksey
вроде бы еще различия что 1С++ работает со скулем, а 1Sqlite только с дбф
#4 by varelchik
А вот туты вы неправы. 1Sqlite работает в обоих средах. только возможности немного в SQL база урезаны.
#5 by Aleksey
Про скуль здесь ни слово
#6 by Zhuravlik
"1С++ работает со скулем" - Возможно ошибаюсь, но по-моему как-то они в ДБФ работает... что-то попадалось на глаза в тырнете. Но если это так, значит я по-любому ограничен SQlite? А по части различий синтаксиса?
#7 by Zhuravlik
+У меня ДБФ
#8 by Mikeware
он имел ввиду, что 1с++ работает и с файловой, и с сиквельной версиями
#9 by Mikeware
главное - соотношение радиусов.
#10 by Aleksey
Сажим так. Работает в том числе и со скулем
#11 by Zhuravlik
Обе компоненты реализуют запрос на T-SQL, верно? Т.е. структура запроса будет одинакова, там только по-разному объявляются переменные. Это я заметил)) А что еще?
#12 by Aleksey
вроде как с индексами проще в 1sqlite работать
#13 by Zhuravlik
Я бы хотел на данный момент узнать именно о различиях синтаксиса, очень глобальные, или нет. Если ОЧЕНЬ большая разница, то я буду искать спопсобы использования 1С++ для ДБФ, если нет, продолжу с того на чем остановился, а потом буду думать как 1С++ перевести в SQlite.
#14 by Zhuravlik
Поясните пожалуйста, недопонял, что значит "Соотношение радиусов"?
#15 by Aleksey
отношение радиуса кривизны рук к радиусу кривизны извилин
#16 by varelchik
+1
#17 by Zhuravlik
Согласен, это главное) Но мне надо понять по сабжу.
#18 by Humandra
Разница есть. Сами запросы - синтаксис почти одинаковый, но обращение к таблицам и параметрам запросов разное, и разное приведение к типам 1С. И естественно, вызов самих методов разный (Запрос.УстановитьПараметр и Запрос.НеПомнюКакНоУстановитьПараметрПоДругому) Сходство самих запросов большое. например: select Запрос.МоеПоле КАК МоеПоле  from Справочник_МойСправочник Запрос
#19 by Humandra
то есть наоборот, сорри. Первый - 1sqlite, второй - 1с++
#20 by Humandra
Но если база dbf-ная, то работа с dbf через 1С++ более муторная Надо правильно строить условия where, чтобы в индекс попадало.
#21 by al_zzz
А 1sqlite ВТ поддерживает?
#22 by Humandra
Я бы сказала - не временные таблицы, а таблицы в памяти. Поддерживает. Временные таблицы в терминах скуля - вроде нет, но я могу что-то не знать.
#23 by Humandra
Я имею в виду, что не знаю, можно ли их полноценно индексировать и все такое, не так много с dbf базами работала, в основном с sql. Но создавать просто - точно было можно.
#24 by Zhuravlik
Имел в виду именно текст запроса. В общем я видимо правильно понял, что различие только в объявлении переменных. Что в 1SQlite нет доллара, который нужен для метапарсера в 1С++ я уже знаю)) Буду копать  в сторону 1SQlite.
#25 by Zhuravlik
+ А можно подробнее про обращение к параметрам запроса? Это ведь именно методами реализуется?
#26 by Humandra
Я имела в виду, что, к примеру, передача параметров в запрос - через методы с разным названием, но одним принципом. И еще вот это: для dbf можно вроде как не извращаться с попаданием в индекс. Но повторюсь, я глубоко с dbf не работала, только с sql.
#27 by Humandra
dbf - читай "1sqlite на dbf", sql - 1c++ на sql
#28 by Злопчинский
есть такой класс "ПрямойЗапрос" - он сам все внутри разгребает для разных типов баз. а сам запрос пишется на йазыке очень похожем на 8-ые запросы. . но я бы этот класс юзал с большим осторожностью - на форуме 1С++ есть ветка под него - там расписано кучу всего
#29 by zladenuw
а почему с осторожностью ? вкратце ?
#30 by Salimbek
Не только в объявлении переменных. например: ----------------------------------------- Также модуль dbeng при отображении таблиц создает в структуре подключаемой таблицы "виртуальные" поля индексов - это поле, которое для движка SQLite выглядит обычным полем, но данные, возвращаемые модулем dbeng для этого поля - есть ключ индекса текущей записи, с добавлением номера записи. Основных назначений таких полей два - использование как уникального ключа записи для использовании в ТабличномПоле 1С++, и оптимизация указания границ по составным полям. Имя таких полей формируется как: idx_Поле1_Поле2_Итд то есть префикс "idx", за которым через символы "_" перечислены названия поля, входящих в индекс
#31 by Ёпрст
для дбф фокс выигрывает в скорости у скульлайта в разы, на некоторых запросах с group by. И фокс запрос сто лет в обед умеет работать в монопольном режиме. Просто на скульлайте есть несколько вещей, которые удобнее, чем запрос на оледб: проще синтаксис, получение реквизитов из блоба автоматом, укладка тз ,поставщик данных для табличного поля и т.д.
#32 by Ёпрст
не только в памяти, еще и в самой sqllite базе можно наплодить кучу табличек
#33 by zladenuw
а что быстрее по чтению и обработке ?  sqllite  или 1с++
#34 by Ёпрст
фокс конечно. + фокс умеет апдейтить/инсертить/удалять +фокс умеет работать с удаленными базами. Всё зависит от задачи, где какой и на чем писать. На скульлайте писать проще, но не всегда он подходит
#35 by Ёпрст
+34 только уточнение - именно правильный запрос на фоксе, тот, который в индекс попадает.
#36 by zladenuw
а какая вероятность не попадания в индекс ? я просто хочу построить запрос. который на основание переданных параметров будет строится, фильтроваться и т.д.
#37 by zladenuw
я так понимаю при таком построение, это возможно.
#38 by Ёпрст
смотришь план запроса и анализируешь
#39 by Ёпрст
а вероятность - 99%, если ни разу не писал :)
#40 by zladenuw
да я буду пробовать. сначала думал использовать sqllite. по советам. а теперь даже не знаю. просто хочу описать функцию и для дбф и для скл
#41 by Ёпрст
на скульлайте напишешь быстрее, писать подоледб с пападанием в индекс - это уже скорее творчество.
#42 by zladenuw
спасибо. ну пока до творчества далековато. начнем с малого.
#43 by Salimbek
Если хочешь и дбф и скл - то посмотри на "ПрямойЗапрос", там как раз многое сделано, чтобы автоматом строить запрос под нужный тип базы. Т.е. пишешь запрос на "встроенном языке", а конкретный запрос к базе строит этот класс.
#44 by zladenuw
я в дальнейшем хочу эту функцию в длл переместить. возможно что в дальнейшем будет по ОЛЕ к 7
#45 by zladenuw
а если в 1с таблица блокирована, ее можно прочитать с помощью прямого запроса или так же будет получена блокировка ?
#46 by zladenuw
сморозил. но вот прочитал, если таблицу блокирнули прямым запрос то при вызове кем то этой таблицы для 1с будет не штатная ситуация, 1с вылетит или напишет что данные заняты транзакцией ?
#47 by Salimbek
Если ты про класс "ПрямойЗапрос", то он работает через "родное" соединение. Т.е. работать будет и в монопольном режиме. Но если будешь стучаться по ОЛЕ, то тут точно не скажу.
#48 by Salimbek
Обычно запросы таблицу не блокируют. Более того, сильно рекомендуют использовать для SQL хинт (nolock). И, я очень надеюсь, ты не собираешься писать в таблицы 1С-ки своими прямыми запросами?
#49 by zladenuw
меня пока интересует чтение.
#50 by zladenuw
Немного поковырял драйвер OLE DB (vfpoledb.dll) и повырезал там вызовы функции LockFile. В результате, теперь прямые запросы работают, даже если в этот момент проводится документ. Вероятно, и запросы к регистру в модуле проведения будут работать после модификации самого регистра. Естественно, такой драйвер нельзя использовать для записи данных в таблицу ДБФ - можно обгадить базу. ужас :).
#51 by zladenuw
единственное что не радует. что немного есть отличия в конструкции где . между дбф и скл в прямых запросах.
#52 by zladenuw
получается что прямым запросом. я могу записать данные, если даже таблица была блокирована. что будет тогда ? слетят индексы для этой таблицы ? или не кто не пробовал :)
#53 by zladenuw
ушел читать буквари :). спасибо за советы.
#54 by Mikeware
с языка снял...
#55 by Salimbek
Каким таким прямым запросом  (просто под это можно много всего засунуть, хотелось бы понимать, что в эти слова вкладываешь ты)? И, если таблица блокирована, ты ничего записать не сможешь. А если можешь писать, значит таблица неблокирована.
#56 by Ёпрст
достаточно сделать было Запрос.Выполнить("Exec('SET TABLEVALIDATE TO 0')");
#57 by Ёпрст
фоксом лучше не инсёртить табличку - там отличный индекс от 1с-ного.
#58 by zladenuw
(56,57) спасибо
#59 by Ёпрст
+57 опосля инсёрта, придётся индексировать средствами 1с.. :(
#60 by zladenuw
мда я в шоке Читать Спр Клиенты Чистый 1с            88688    48585    61218    60481 Читать Спр Клиенты Чистый 1с  и запрос    82709    83404    93758    67381 Читать Спр Клиенты Прямые запросы+ооп    85336    84249    96806    92191 Читать Спр Клиенты  Прямые запросы    715    702    782    794 1.Вечером справочник когда никто не работает 2.Вечером справочник монопольно когда никто не работает 3.днем справочник 4.днем справочник монопольно Записать Спр Клиенты Чистый 1с            1193249    990438    1482353    1461707 Записать БыстрыйСправочникКлиенты    66799    59296    94154    128949                 Кратко о базе. В базе есть справочник Клиенты.                 Этот справочник содержит 61922 клиента. Элемент справочника Клиенты содержит 57 реквизитов,                 один из них периодический с очень редким изменением.                 1с база  - sql. В момент всех тестов с 1с базой работал только я один, но эта база                 установлена на рабочем сервере где круться довольно интенсивно еще несколько 1с sql баз.                 Замер скорости делался днем когда сервер был нагружен другими sql базами и вечером                 когда не было никакой нагрузки дополнительной на sql сервер.
#61 by zladenuw
не думал что во столько раз чтение быстрее....
#62 by Ёпрст
текст запроса покажи
#63 by Ёпрст
+есть ли там хинт (nolock) ?
#64 by zladenuw
копи паст отсюда я пока еще не пробовал. у меня есть бд там 100к контрагентов и 100к тмц. вот на нем буду. позже если надо будет скину отладку времени выполнения
Тэги: 1С 7.7 и ранее
Ответить:
Комментарии доступны только авторизированным пользователям

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