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

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

    ТЗ = запрос.ВыполнитьЗапрос("
    |SELECT
    |    Склад.Descr
    |FROM
    |    Справочник_Склады AS Склад")
12 Said_We
 
27.08.20
15:48
(10) Да. Но не суть важно.
13 Mikeware
 
27.08.20
15:49
(12) Просто чувак может начать искать именно _компоненту_...
14 Arti
 
27.08.20
15:58
(11) Спасибо, попробую.
15 Arti
 
27.08.20
15:58
(13) Да, знаю, что класс, ищу.
16 Mikeware
 
27.08.20
16:03
17 Mikeware
 
27.08.20
16:04
18 Arti
 
27.08.20
16:14
А конструктор умные люди не придумали?
19 Холст
 
27.08.20
16:17
(2) Нет, виртуальную таблицу отдельно кодом прописывать не обязательно, практически с первыми же обновлениями 1SQLite уважаемый автор Орефков (простите если исказил фамилию) сделал автоподключение виртуальной таблицы
20 Arti
 
27.08.20
16:34
Разобрался, получилось выполнить запрос. Жаль только, что нет конструктора, для выполнения задачи придётся то же самое в 8-ке сделать, а потом портировать запрос в 7.7.
21 Arti
 
27.08.20
16:37
Решил использовать 1SQLite. Теперь кумекаю, как там временные таблицы создавать.
22 Sserj
 
27.08.20
16:39
(21) Не поверишь :)
CREATE TABLE
23 Arti
 
27.08.20
17:03
(22) Может, TEMPORARY?
(7) Не получилось подключить.
24 Mikeware
 
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)
27 tgu82
 
28.08.20
09:17
(24) А где есть конструктор и консоль? Где их взять?
28 tgu82
 
28.08.20
09:28
(27)+ Нашел где. Теперь бы еще знать зачем :)
29 Mikeware
 
28.08.20
09:29
30 Mikeware
 
28.08.20
09:31
(28) скачал и не знаешь зачем? закачай обратно. а то кому-нибудь не хватит.
31 Said_We
 
28.08.20
10:33
(20) Возможностей языка SQL в "ПрямомЗапросе" больше. 1С8 не поддерживает некоторые конструкции. Пиши сразу на SQL, не нужна для этого 8-ка совсем.
32 Mikeware
 
28.08.20
10:37
(31) ну как же восьмерочникам без конструктора запросы-то пейсать? :-)
33 Ёпрст
 
28.08.20
10:48
И проще найти свою версию на форуме 1cpp..чем на нимфостарте
Ошибка? Это не ошибка, это системная функция.