Переключение на Главную Страницу Страницы: 1 [2]  ОтправитьПечать
Горячая тема (более 10 ответов) 1sqlite и не родные таблицы 1С (число прочтений - 3810 )
varelchik
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 788
Зарегистрирован: 22. Мая 2006
Re: 1sqlite и не родные таблицы 1С
Ответ #15 - 23. Декабря 2010 :: 10:37
Печать  
МДА.
Извините что я такой тормоз.
Походу я неправильно понял концепцию SQLite.
По примеру все понял.
  
Наверх
 
IP записан
 
CaBaT
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 718
Местоположение: Санкт-Петербург
Зарегистрирован: 26. Октября 2007
Пол: Мужской
Re: 1sqlite и не родные таблицы 1С
Ответ #16 - 23. Декабря 2010 :: 10:39
Печать  
Eprst писал(а) 23. Декабря 2010 :: 10:15:
Вот, в качестве примера - база в скульлайт для записи-чтения заблокированных объектов базы:
Поделка

А как режиме WAL работает? Проблем нет?
  
Наверх
 
IP записан
 
varelchik
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 788
Зарегистрирован: 22. Мая 2006
Re: 1sqlite и не родные таблицы 1С
Ответ #17 - 23. Декабря 2010 :: 15:13
Печать  
Все огромное спасибо.
Разобралси что ды как.
вот кстати и пример чего мене надо было.
Код
Выбрать все
	Если ЭтоSQL=1 Тогда
		Запрос=глСоединение();
		ТекстЗапроса = "
		|If not Exists (Select *
		|               From sysobjects
		|               Where id = object_id('docsidd') and objectproperty(id, 'IsUserTable') = 1
		|          )
		|   Create table docsidd (iddoc varchar(9) primary key not null
		|,
		|							stat int
		|                      )";

		Если Запрос.ВыполнитьСкалярный(ТекстЗапроса) = 0 Тогда
			ЗаписьЖурналаРегистрации("Инициализация docsidd: ошибка инициализации", "Инициализация", "Инициализация таблиц SQL", , 5);
		КонецЕсли;
		Текст="
		|select
		|	d.stat ЕстьДокументы
		|from docsidd d (nolock)
		|WHERE
		|d.iddoc=?
		|";
		Если Запрос.Подготовить(Текст)=0 Тогда
			Сообщить(Запрос.GetLastError());
			Возврат;
		КонецЕсли;
		Запрос.ДобПараметр(1,14,9,0);
	Иначе
		ИмяБД = КаталогИБ()+"baza.db3";
		база = СоздатьОбъект("SQLiteBase");
		база.Открыть(ИмяБД);
		Запрос = база.НовыйЗапрос();
		Запрос.ВыполнитьЗапрос("PRAGMA journal_mode=WAL");
		Текст="
		|Create  table if not EXISTS
		|docsidd (
		|   iddoc char(9) primary key not null,
		|   stat int
		|)";
		Запрос.ВыполнитьЗапрос(Текст);
		Текст="
		|select
		|	stat
		|from docsidd
		|WHERE
		|iddoc=@ВыбДок
		|";
		Запрос.Подготовить(Текст);
	КонецЕсли;
 


это при открытии журнала.
потом 2 процедура обновления таблицы
Код
Выбрать все
Процедура ЕстьДокументы(Фл)
	Если ПустоеЗначение(ТекущийДокумент)=1 Тогда
		Возврат;
	КонецЕсли;  
	Если глЕстьРеквизитШапки("ЕстьДокументы",ТекущийДокумент.Вид()) <> Да Тогда
		Возврат;
	КонецЕсли;
	Если ЭтоSQL=1 Тогда
		Запрос.УстПараметр(1,ТекущийДокумент,0);
		ТЗ=Запрос.ВыполнитьИнструкцию();
		стат=ТЗ.КоличествоСтрок();
		ЗапросОбновление=глСоединение();
			ЗапросОбновление.УстановитьТекстовыйПараметр("ВыбДок",ТекущийДокумент);
		Если стат=0 Тогда
			Текст="INSERT INTO docsidd (iddoc,stat) VALUES(:ВыбДок,"+Фл+")";
			Результат=ЗапросОбновление.ВыполнитьСкалярный(Текст);
		Иначе
			Текст="update docsidd
			|set stat="+Фл+"
			|from docsidd d
			|WHERE
			|d.iddoc=:ВыбДок
			|";
			Результат=ЗапросОбновление.ВыполнитьСкалярный(Текст);
		КонецЕсли;
	Иначе
		ИмяБД = КаталогИБ()+"baza.db3";
		база = СоздатьОбъект("SQLiteBase");
		база.Открыть(ИмяБД);
		ЗапросОбновление= база.НовыйЗапрос();
		ЗапросОбновление.ВыполнитьЗапрос("PRAGMA journal_mode=WAL");
		ЗапросОбновление.Подставлять("ВыбДок",ТекущийДокумент);
		Текст="INSERT or REPLACE INTO docsidd VALUES (:ВыбДок,"+Фл+")";
		Стат=ЗапросОбновление.ВыполнитьЗапрос(Текст);
	КонецЕсли;
КонецПроцедуры

 


и функция для вывода информации о наличии документов
Код
Выбрать все
Функция фЕстьДокументы()
	Если ПустоеЗначение(ТекущийДокумент)=1 Тогда
		Возврат "";
	КонецЕсли;  
	Если ЭтоSQL=1 Тогда
		Запрос.УстПараметр(1,ТекущийДокумент,0);
		Если Число(Запрос.ВыполнитьСкалярный())=1 Тогда
			Возврат "+";
		КонецЕсли;
	Иначе
		Запрос.УстановитьПараметр("@ВыбДок",ТекущийДокумент);
		Стат=Запрос.Выполнить();
		рез=Стат.КоличествоСтрок();
		Если рез=1 Тогда
			Если Стат.ПолучитьЗначение(1,1)=1 Тогда
				Возврат "+";
			КонецЕсли;
		КонецЕсли;
	КонецЕсли;
КонецФункции

 

  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: 1sqlite и не родные таблицы 1С
Ответ #18 - 24. Декабря 2010 :: 06:14
Печать  
CaBaT писал(а) 23. Декабря 2010 :: 10:39:
Eprst писал(а) 23. Декабря 2010 :: 10:15:
Вот, в качестве примера - база в скульлайт для записи-чтения заблокированных объектов базы:
Поделка

А как режиме WAL работает? Проблем нет?


у меня все в терминале, проблем нет..
ЗЫ: по крайней мере, мне теперь не звонят и не просят узнать, кто открыл объект бд.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 [2] 
ОтправитьПечать