Переключение на Главную Страницу Страницы: 1 2 [3] 4 5 ... 79 ОтправитьПечать
Очень популярная тема (более 25 ответов) 1sqlite (число прочтений - 456728 )
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #30 - 23. Июня 2008 :: 12:41
Печать  
steban писал(а) 23. Июня 2008 :: 12:37:
orefkov писал(а) 23. Июня 2008 :: 07:19:
Прошу тестировать, высказывать пожелания.

Высказываю:
Хочется предопределенных текстовых параметров :ВидСубконто.ИмяВидаСубконто и :ПланСчетов.ИмяПланаСчетов

Во что их разворачивать?
  
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #31 - 23. Июня 2008 :: 13:02
Печать  
:ВидСубконто.ИмяВидаСубконто разворачивать в идентификатор вида субконто (строка длиной 4 символа)
:ПланСчетов.ИмяПланаСчетов разворачивать в идентификатор плана счетов (строка длиной 4 символа)
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #32 - 23. Июня 2008 :: 13:09
Печать  
Ок. Сделаю.
  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #33 - 23. Июня 2008 :: 13:27
Печать  
steban писал(а) 23. Июня 2008 :: 13:02:
:ВидСубконто.ИмяВидаСубконто разворачивать в идентификатор вида субконто (строка длиной 4 символа)
:ПланСчетов.ИмяПланаСчетов разворачивать в идентификатор плана счетов (строка длиной 4 символа)


1sqlite 1.0.1.1

Исправлен вылет при попытке подключить таблицу строк документа, у которого нет ТЧ.
Добавлены текстовые параметры:
:ВидСубконто и :ПланСчетов
  

1sqlite_1011.zip ( 374 KB | Загрузки )
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #34 - 23. Июня 2008 :: 13:49
Печать  
artbear писал(а) 23. Июня 2008 :: 08:18:
orefkov писал(а) 23. Июня 2008 :: 07:50:
Легче записать условия для попадания в индекс.

Поясни, плиз, эти 3 фразы чуть более подробно.
1. Каким образом стало легче?

Ну, вот допустим, у меня в справочнике товаров есть реквизит НеВключатьВПрайс (Число, 1, 0) с включенной сортировкой. Надо показать элементы, где НеВключатьВПрайс  = 1, упорядочив по наименованию.
В 1sqlite пишем:

select ...
from  Справочник_Номенклатура
where НеВключатьВПрайс = 1
order by descr


При включенной отладке видим:

Подбор индекса для таблицы SC33:
     Ограничения: SP16515[НевключатьВпрайс]=;
     Упорядочить: DESCR,
     Найдено в кэше
     Выбран индекс VI16515: STR(SP16515,2)+UPPER(DESCR)
     Попадает в сортировку
     Стоимость: 10

Вот чтобы на фоксе попасть в индекс надо написать (если длина наименования 100)

where STR(НеВключатьВПрайс, 2) + UPPER(DESCR) between ' 1[тут 100 пробелов]' and ' 1[тут 100 букв Я]'
order by STR(НеВключатьВПрайс, 2) + UPPER(DESCR)

Я думаю, разницу в тексте запроса видно.
  
Наверх
 
IP записан
 
Chieftain
Senior Member
****
Отсутствует


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Re: 1sqlite
Ответ #35 - 23. Июня 2008 :: 14:01
Печать  
Какой-то косяк при установке параметра-даты. Запрос просто возвращает пустую выборку
Код
Выбрать все
	запрос = база.НовыйЗапрос();
	запрос.ВыполнитьЗапрос("create virtual table РегОст	using dbeng(РегистрИтоги.ОстаткиТМЦ)");
	ТекстЗапросаОстатка		= "
	|SELECT		РегОст.Номенклатура as Номенклатура,
	|			SUM(РегОст.Количество) as Количество
	|FROM		РегОст
	|WHERE		РегОст.Period = @ДатаОстаткаДляИтогов
	|GROUP BY	РегОст.Номенклатура
	|";
	запрос.Отладка(1);
	запрос.Подготовить(ТекстЗапросаОстатка);
	запрос.УстановитьПараметр("@ДатаОстаткаДляИтогов",НачМесяца(ТекущаяДата()));
	запрос.Выполнить(ТаблТоваров); 

  
Наверх
ICQ  
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #36 - 23. Июня 2008 :: 14:20
Печать  
У меня тоже, что и Chieftain'a. Сделал обычный (не подготовленный) запрос и увидел, что
вот это:
Код
Выбрать все
БСО_Склад.period = :ВыбДата~ 


преобразовавыется в Цитата:
БСО_Склад.period = '20080601'

а это:
Код
Выбрать все
БСО_Склад.period = :ВыбДата 


преобразовавыется в Цитата:
БСО_Склад.period = '20080601а'


Хотя по документации:
Цитата:
0: Строка формата 'YYYYMMDD', как дата хранится в дбф-файлах
1: Строка формата 'YYYYMMDDЯ', момент конца даты
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: 1sqlite
Ответ #37 - 23. Июня 2008 :: 14:22
Печать  
orefkov писал(а) 23. Июня 2008 :: 13:49:
В 1sqlite пишем:

select ...
from  Справочник_Номенклатура
where НеВключатьВПрайс = 1
order by descr


Вот чтобы на фоксе попасть в индекс надо написать (если длина наименования 100)

where STR(НеВключатьВПрайс, 2) + UPPER(DESCR) between ' 1[тут 100 пробелов]' and ' 1[тут 100 букв Я]'
order by STR(НеВключатьВПрайс, 2) + UPPER(DESCR)

Я думаю, разницу в тексте запроса видно.


Не совсем. При правильной настройке (ANSI OFF) которая в стандартном Fox по умолчанию на Fox  будет
Код
Выбрать все
where STR(НеВключатьВПрайс, 2) + UPPER(DESCR)='1'  
order by descr 


http://www.1cpp.ru/forum/YaBB.pl?num=1184317705/31#31
что несколько проще, но безусловно требует усилий вручную подбирать индекс
  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #38 - 23. Июня 2008 :: 19:48
Печать  
Исправлена работа с преобразованием значений типа Дата в формат БД.
  

1sqlite_1012.zip ( 331 KB | Загрузки )
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #39 - 24. Июня 2008 :: 00:28
Печать  
Обнаружен баг.
Такой код вызывает AV при вызове ВыполнитьЗапрос: [code]База=СоздатьОбъект("SQLiteBase");
имяФайла = ":memory:";
База.Открыть(имяФайла);
Запрос=База.НовыйЗапрос();
Запрос.ВыполнитьЗапрос("PRAGMA journal_mode = OFF");
Запрос.ВыполнитьЗапрос("create virtual table _1SBKTTL using dbeng(_1S.Bkttl)");
Запрос.ВыполнитьЗапрос("create virtual table _1SACCS using dbeng(_1S.Accs)");
Запрос.Отладка(1);
ТекстЗапроса="SELECT
|Итоги.ACCID Счет
|, Итоги.SD+Итоги.OBDT1-Итоги.OBKT1 КоличествоОстаток
|FROM _1SBKTTL AS Итоги
|
|INNER JOIN _1SACCS AS Счета  ON (Итоги.ACCID = Счета.ID) [highlight]AND (Итоги.AccID = :ВыбСчет)[/highlight]
|WHERE (Итоги.DATE = '20080401')
|";
Запрос.Подставлять("ВыбСчет",СчетПоКоду("10"));
ТЗ=Запрос.ВыполнитьЗапрос(ТекстЗапроса);
[/code]

С таким текстом запроса отрабатывает нормально:
[code]ТекстЗапроса="SELECT
|Итоги.ACCID Счет
|, Итоги.SD+Итоги.OBDT1-Итоги.OBKT1 КоличествоОстаток
|FROM _1SBKTTL AS Итоги
|
|INNER JOIN _1SACCS AS Счета  ON (Итоги.ACCID = Счета.ID)
|WHERE (Итоги.DATE = '20080401') [highlight]AND (Итоги.AccID = :ВыбСчет)[/highlight]
|";[/code]
И с таким текстом запроса отрабатывает нормально: [code]ТекстЗапроса="SELECT
|Итоги.ACCID Счет
|, Итоги.SD[highlight] [/highlight]КоличествоОстаток
|FROM _1SBKTTL AS Итоги
|
|INNER JOIN _1SACCS AS Счета  ON (Итоги.ACCID = Счета.ID) AND (Итоги.AccID = :ВыбСчет)
|WHERE (Итоги.DATE = '20080401')
|";
[/code]
И если явно указать ИД счета, то работает нормально: [code]ТекстЗапроса="SELECT
|Итоги.ACCID Счет
|, Итоги.SD+Итоги.OBDT1-Итоги.OBKT1 КоличествоОстаток
|FROM _1SBKTTL AS Итоги
|
|INNER JOIN _1SACCS AS Счета  ON (Итоги.ACCID = Счета.ID) AND (Итоги.AccID = [highlight]'     R   '[/highlight])
|WHERE (Итоги.DATE = '20080401') 
|";[/code]
Точнее локализовать не удалось
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #40 - 24. Июня 2008 :: 00:36
Печать  
Также код из предыдущего поста отваливается с AV при следующем тексте запроса:
Код
Выбрать все
ТекстЗапроса="SELECT
|Итоги.ACCID Счет
|, Итоги.SD КоличествоОстаток
|FROM _1SBKTTL AS Итоги
|WHERE (Итоги.DATE = '20080401')  AND (Итоги.AccID = @ВыбСчет)
|"; 

  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #41 - 24. Июня 2008 :: 03:18
Печать  
Александр, предлагаю новую версию выкладывать в первый пост ветки, удобнее брать обновления Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #42 - 24. Июня 2008 :: 06:04
Печать  
[quote author=steban link=1214205575/30#39 date=1214267314]Обнаружен баг.
Такой код вызывает AV при вызове ВыполнитьЗапрос:[/quote]
Сэнкс.
Ошибку нашел.
Исправил.
В шапке.
1.0.1.3

  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #43 - 24. Июня 2008 :: 06:13
Печать  
В хелпе написано для SQLiteQuery
Цитата:
Подготовить / Prepeare Подготавливает переданный sql-запрос.

Поправишь?
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #44 - 24. Июня 2008 :: 06:18
Печать  
artbear писал(а) 24. Июня 2008 :: 06:13:
В хелпе написано для SQLiteQuery
Цитата:
Подготовить / Prepeare Подготавливает переданный sql-запрос.

Поправишь?

О блин, точно. К след.версии.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 2 [3] 4 5 ... 79
ОтправитьПечать