Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: 1SQLite и прямые запросы

v7: 1SQLite и прямые запросы
Я
   Arti
 
27.08.20 - 15:16
Всем добрый день. Пытаюсь научиться писать прямые запросы из 7.7, что-то не получается. Пробую так:
Попытка
        база = СоздатьОбъект("SQLiteBase");
    Исключение
        ЗагрузитьВнешнююКомпоненту("1sqlite.dll");
        база = СоздатьОбъект("SQLiteBase");
    КонецПопытки;                          
    
    
    база.Открыть(":memory:");
    запрос = база.НовыйЗапрос();
    ТЗ = запрос.ВыполнитьЗапрос("
    |SELECT
    |    Склад.Descr
    |FROM
    |    $Справочник.Склады AS Склад");

Пишет "no such table". Попробовал ещё так:

    ЗагрузитьВнешнююКомпоненту("1CPP.dll");
    
    RS = СоздатьОбъект("ODBCRecordset");
    RS.УстБД1С();
    ТекстЗапроса = "
    |SELECT
    |    Спр.Code as Код,
    |    Спр.Descr as Наименование
    |FROM
    |    $Справочник.Склады as Спр";
    
    ТЗ = RS.ВыполнитьИнструкцию(ТекстЗапроса);
    ТЗ.ВыбратьСтроку();

Тоже ругается, уже на ВыбратьСтроку(), так как ТЗ = 0. Куда копать?
   Ray Zexter
 
1 - 27.08.20 - 15:24
БазаДанных = СоздатьОбъект("SQLiteBase");
БазаДанных.Открыть(":memory:");
Запрос = БазаДанных.НовыйЗапрос();
Запрос.ВыполнитьЗапрос("create virtual table Склады using dbeng(Справочник.Склады)");
Текст = "SELECT
|code Код,
|id [Склад :Справочник.Склады]
|From Склады
";
Попытка
ТЗ=Запрос.ВыполнитьЗапрос(Текст);
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки
   Arti
 
2 - 27.08.20 - 15:30
(1) Большое спасибо, получилось! Только непонятно, мне для каждой таблицы, которая будет в запросе, создавать виртуальную?
   Mikeware
 
3 - 27.08.20 - 15:33
Найди класс ПрямойЗапрос или ПоставщикДанных, и пользуйся ими
   Said_We
 
4 - 27.08.20 - 15:34
(2) SQLite если файловая, то да.
БазаДанных.Открыть(":memory:");

Базу же в памяти создаешь.
   Said_We
 
5 - 27.08.20 - 15:36
Не "создаешь", а открываешь. Но не суть....
   Arti
 
6 - 27.08.20 - 15:37
(4) Угу, понял. Для клиент-серверной этого не нужно?
   Said_We
 
7 - 27.08.20 - 15:39
(6) Для клиент-серверного можно не использовать SQLite.
Посмотри в 1С++ компоненту "ПрямойЗапрос" называется.
Там в зависимости от БД запрос строится или напрямую к БД и если файловая, то через SQLite.
   Mikeware
 
8 - 27.08.20 - 15:41
(6) Для клиент-серверной достаочно 1с++
   Said_We
 
9 - 27.08.20 - 15:41
Текст запроса в 1С будет у тебя одинаковый и работать будет как на файловой версии так и на SQL.
   Mikeware
 
10 - 27.08.20 - 15:43
(7) "ПрямойЗапрос" - не компонента, а класс.
   Sserj
 
11 - 27.08.20 - 15:44
(0) На сколько помню в 1sqlite для автоподключения нужно не $ ставить а через подчеркивание писать:

    ТЗ = запрос.ВыполнитьЗапрос("
    |SELECT
    |    Склад.Descr
    |FROM
    |    Справочник_Склады AS Склад")
   Said_We
 
12 - 27.08.20 - 15:48
(10) Да. Но не суть важно.
   Mikeware
 
13 - 27.08.20 - 15:49
(12) Просто чувак может начать искать именно _компоненту_...
   Arti
 
14 - 27.08.20 - 15:58
(11) Спасибо, попробую.
   Arti
 
15 - 27.08.20 - 15:58
(13) Да, знаю, что класс, ищу.
   Mikeware
 
16 - 27.08.20 - 16:03
   Mikeware
 
17 - 27.08.20 - 16:04
   Arti
 
18 - 27.08.20 - 16:14
А конструктор умные люди не придумали?
   Холст
 
19 - 27.08.20 - 16:17
(2) Нет, виртуальную таблицу отдельно кодом прописывать не обязательно, практически с первыми же обновлениями 1SQLite уважаемый автор Орефков (простите если исказил фамилию) сделал автоподключение виртуальной таблицы
   Arti
 
20 - 27.08.20 - 16:34
Разобрался, получилось выполнить запрос. Жаль только, что нет конструктора, для выполнения задачи придётся то же самое в 8-ке сделать, а потом портировать запрос в 7.7.
   Arti
 
21 - 27.08.20 - 16:37
Решил использовать 1SQLite. Теперь кумекаю, как там временные таблицы создавать.
   Sserj
 
22 - 27.08.20 - 16:39
(21) Не поверишь :)
CREATE TABLE
   Arti
 
23 - 27.08.20 - 17:03
(22) Может, TEMPORARY?
(7) Не получилось подключить.
   Mikeware
 
24 - 27.08.20 - 17:16
(20) и конструктор есть, и консоль для отладки... В клюшках всё есть...
   Ёпрст
 
25 - 27.08.20 - 18:19
(0)

  ТЗ = запрос.ВыполнитьЗапрос("
    |SELECT
    |    Склад.Descr
    |FROM
    |    [Справочник.Склады] Склад");
   Ёпрст
 
26 - 27.08.20 - 18:20
(21)
CREATE TEMP TABLE tmp_docs(d varchar(13) primary key not null)
   tgu82
 
27 - 28.08.20 - 09:17
(24) А где есть конструктор и консоль? Где их взять?
   tgu82
 
28 - 28.08.20 - 09:28
(27)+ Нашел где. Теперь бы еще знать зачем :)
   Mikeware
 
29 - 28.08.20 - 09:29
   Mikeware
 
30 - 28.08.20 - 09:31
(28) скачал и не знаешь зачем? закачай обратно. а то кому-нибудь не хватит.
 
 Рекламное место пустует
   Said_We
 
31 - 28.08.20 - 10:33
(20) Возможностей языка SQL в "ПрямомЗапросе" больше. 1С8 не поддерживает некоторые конструкции. Пиши сразу на SQL, не нужна для этого 8-ка совсем.
   Mikeware
 
32 - 28.08.20 - 10:37
(31) ну как же восьмерочникам без конструктора запросы-то пейсать? :-)
   Ёпрст
 
33 - 28.08.20 - 10:48
И проще найти свою версию на форуме 1cpp..чем на нимфостарте


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.