Имя: Пароль:
1C
1C 7.7
v7: sqlite: запрос по подчин. спр.
,
0 furia
 
15.03.14
10:50
Привет. помоги разобраться с запросом через sqlite. первый мой опыт.
вот запросик.

апрос = глБазаДанных.НовыйЗапрос();
    Запрос.ВыполнитьЗапрос("PRAGMA journal_mode = OFF");    
    
    ТекстЗапроса = "
    |SELECT
    |    code,
    |    Серия.ДатаВыдачи
    |FROM
    |    [Справочник.Серия] as Серия
    |WHERE                                                              
    //|    Серия.ДатаВыдачи between @НачДата and @КонДата
    |    (Серия.ДатаВыдачи >= @НачДата) and (Серия.ДатаВыдачи <= @КонДата)    
    |GROUP BY
    |    code
    |";  
    
          
    Запрос.Отладка(1);
    Запрос.Подготовить(ТекстЗапроса);
    
    Попытка                                                                          
        Запрос.УстановитьПараметр("@НачДата", Дата1);
        Запрос.УстановитьПараметр("@КонДата", Дата2);    
        тз2 = Запрос.ВыполнитьЗапрос(ТекстЗапроса);
    Исключение
        Сообщить(ОписаниеОшибки());
    КонецПопытки;

запрос получается пустой. понятно что проблема в where. я хочу отобрать элементы справочника за указанный период по реквизиту "ДатаВыдачи", без where нормально работает...
1 Mikeware
 
15.03.14
10:55
И на синтаксис не ругается? :-)
2 Mikeware
 
15.03.14
10:56
хотя с sqlite я не сталкивался, но разве там не нужно показывать метапарсеру, какие поля надо разыменовывать?
3 furia
 
15.03.14
10:56
нет... :( вот что отладка дает.:

SELECT
    code,
    Серия.ДатаВыдачи as [ДатаВыдачи :Дата]
FROM
    [Справочник.Серия] as Серия
WHERE                                                              
    (Серия.ДатаВыдачи >= @НачДата) and (Серия.ДатаВыдачи <= @КонДата)    
GROUP BY
    code

Подбор индекса для таблицы SC12044:
    Ограничения: SP12039[ДатаВыдачи]>=; SP12039[ДатаВыдачи]<=;
    Упорядочить: CODE,
    В кэше не найдено
    Выбран индекс CODE: UPPER(CODE)
    Попадает в сортировку
    Стоимость: 24
4 furia
 
15.03.14
10:57
через DBFNavigator смотрю табличку, там все есть...
5 furia
 
15.03.14
10:57
+(0) апрос = Запрос
6 Mikeware
 
15.03.14
10:58
поставь отладку после установки параметров
7 furia
 
15.03.14
11:00
тоже самое. что и в (3)
8 Mikeware
 
15.03.14
11:02
(7) параметры в запросе появились?
9 furia
 
15.03.14
11:03
SELECT
    code,
    Серия.ДатаВыдачи as [ДатаВыдачи :Дата]
FROM
    [Справочник.Серия] as Серия
WHERE                                                              
    Серия.ДатаВыдачи between @НачДата and @КонДата
GROUP BY
    code
10 furia
 
15.03.14
11:19
а есть ограничение на количество элементов у sqlite, например если элементов справочника больше 10млн ?
11 Salimbek
 
15.03.14
13:18
(10) Нет, с чего бы...
12 Salimbek
 
15.03.14
13:19
Может даты у тебя как-то неправильно разруливаются...
13 furia
 
15.03.14
13:27
(12) в смысле ? в BDFNavigatore отображаются как ДДММГГГГ. может кто подкинуть то же самое только под 1с++... ? может там запуститься
14 furia
 
15.03.14
13:29
или у них синтаксис один ?
15 Salimbek
 
15.03.14
22:55
Попробуй так:
      Запрос.УстановитьПараметр("НачДата", Дата1);
      Запрос.УстановитьПараметр("КонДата", Дата2);
16 Aleksey
 
15.03.14
23:07
а что значит "@" в запросе? Разве там не : должно быть?
17 Aleksey
 
15.03.14
23:08
типа
Where (Серия.ДатаВыдачи between :НачДата and :КонДата)
18 furia
 
16.03.14
06:58
(15), (17) вот такая ошибка...
Ошибка подстановки текстового параметра НачДата - Неизвестный параметр :(
я гуглил по форуму, в этой темке у парня вроде все получилось: 1SQLite: Условие на дату в справочнике
почему не взлетает у меня, не знаю :( Версия sqlite 1.0.24

Хелп плз.......
19 Vinianel
 
16.03.14
10:14
(17) Если делать так, то надо:

Запрос.Подставлять("НачДата", Дата1);
Запрос.Подставлять("КонДата", Дата2);
Запрос.Подготовить(ТекстЗапроса);
20 furia
 
16.03.14
13:50
(19) а так пишет, что запрос не подготовлен :(
Ёпрст хелп плз, оплачу :)
21 Salimbek
 
16.03.14
15:33
(20) так работает:

    БД = СоздатьОбъект("SQLiteBase");
    БД.Открыть(":memory:");
    склЗапрос = БД.НовыйЗапрос();
    ТекстЗапроса = "
    |Select * FROM ["+СокрЛП(мтТаблица)+"] WHERE "+СокрЛП(мтПоле)+" between :НачДата AND :КонДата";
    склЗапрос.Подставлять("НачДата", НачДата);
    склЗапрос.Подставлять("КонДата", КонДата);
    ТЗ = склЗапрос.ВыполнитьЗапрос(ТекстЗапроса);
    ТЗ.ВыбратьСтроку();
22 orefkov
 
16.03.14
15:37
(0)
Исправь
тз2 = Запрос.ВыполнитьЗапрос(ТекстЗапроса);
на
тз2 = Запрос.Выполнить();

А то ты подготовленный запрос сбрасываешь.
23 orefkov
 
16.03.14
15:39
(0)
По полю ДатаВыдачи есть сортировка или отбор? Тогда лучше group by code убрать, не тот индекс берет.
26 furia
 
16.03.14
15:42
(23) нет нету, я это знаю. сейчас все по (22) отработало. Большое спасибо за sqlite и за помощь! куда слать благодарности ?
27 furia
 
16.03.14
15:42
желательно qiwi )
28 orefkov
 
16.03.14
16:08
(27)
Есть ЯД - 410011016100902
29 orefkov
 
16.03.14
19:13
+(28)
И вам спасибо :)