Переключение на Главную Страницу Страницы: 1 [2] 3 4  ОтправитьПечать
Очень популярная тема (более 25 ответов) Свертка файловой ПУБ с использованием 1sqlite (число прочтений - 12831 )
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Свертка файловой ПУБ с использованием 1sqlite
Ответ #15 - 13. Января 2012 :: 05:01
Печать  
Таким способом я хотел только получить список документов, на которые есть ссылки. Потом список уже использовать при переносе с помощью VFPOLEDB.

Посмотрел ссылку и вижу, что мой запрос соответствует второму типу. Но ответа на вопрос о падении 1С я не полячил  Со сжатыми губами
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Свертка файловой ПУБ с использованием 1sqlite
Ответ #16 - 13. Января 2012 :: 06:11
Печать  
Всё равно не ясно..
Ну получишь ты некоторую табличку в sqllite - базе.
Дальше то что с ней что делать ?!
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Свертка файловой ПУБ с использованием 1sqlite
Ответ #17 - 13. Января 2012 :: 06:17
Печать  
Через список перегружу в запросы по переносу данных.
Сейчас сделал простым селектом и заплонением списка, но это всяко медленнее, чем если бы работал вариант с INSERT FROM или SELECT INTO...

Я честно украл твою логику и развиваю ее дальше. Как закончу - покажу, что получилось. У тебя не все предусмотрено, в частности блобы. И проверка зависимостей перебором - это очень долго. Но идея гениальная!
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Свертка файловой ПУБ с использованием 1sqlite
Ответ #18 - 13. Января 2012 :: 06:29
Печать  
На вот, пример на селект..
Один хрен не догоняю, зачем тебе временная табличка в sqllite базе.
Как ты её потом в дбф файлик запихнешь ?
Код
Выбрать все
//======================================================================
Процедура Сформировать()
	Попытка
		база = СоздатьОбъект("SQLiteBase");
	Исключение
		ЗагрузитьВнешнююКомпоненту("1sqlite.dll");
		база = СоздатьОбъект("SQLiteBase");
	КонецПопытки;
    Если ФС.СуществуетФайл(КаталогИБ()+"ExtForms\")=0 Тогда
	  ФС.СоздатьКаталог(КаталогИБ()+"ExtForms\");
    КонецЕсли;
    Если ФС.СуществуетФайл(КаталогИБ()+"ExtForms\DB_SQLite\")=0 Тогда
	  ФС.СоздатьКаталог(КаталогИБ()+"ExtForms\DB_SQLite\");
    КонецЕсли;
    ИмяБД = КаталогИБ()+"ExtForms\DB_SQLite\baza.db3";
    база.Открыть(ИмяБД);
    запросSQLLite = база.НовыйЗапрос();
    запросSQLLite.ВыполнитьЗапрос("PRAGMA journal_mode=WAL");
    //запросSQLLite.ВыполнитьЗапрос("PRAGMA journal_mode=OFF");
    ТекстЗапроса ="
    |Create  table if not EXISTS
    |Тест (
    |   ИД varchar(13) primary key not null,
    |   Объект  TEXT
    |)";
    запросSQLLite.ВыполнитьЗапрос(ТекстЗапроса);

	ТЗ = СоздатьОбъект("ТаблицаЗначений");
	ТЗ.НоваяКолонка("ИД");
	ТЗ.НоваяКолонка("Объект");
	Для к=1 По 10 Цикл
		ТЗ.НоваяСтрока();
		ТЗ.ИД = к;
		ТЗ.Объект = "Вася"+к;
	КонецЦикла;
	база.уложитьТЗ(ТЗ,"Табличка",0);

	ТекстЗапроса = "
	|insert or replace INTO Тест
	|select * from Табличка
    | ";

	запросSQLLite.ВыполнитьЗапрос(ТекстЗапроса);

	ТекстЗапроса = "
	|select * from Тест
	|";

	запросSQLLite.ВыполнитьЗапрос(ТекстЗапроса).ВыбратьСтроку();

КонецПроцедуры 

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



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Свертка файловой ПУБ с использованием 1sqlite
Ответ #19 - 13. Января 2012 :: 06:31
Печать  
Dmitry The Wing писал(а) 13. Января 2012 :: 06:17:
Через список перегружу в запросы по переносу данных.
Но идея гениальная!


Идея не совсем моя, я её скоммуниздил у МОД-а, слегка модифицировав.
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Свертка файловой ПУБ с использованием 1sqlite
Ответ #20 - 13. Января 2012 :: 07:15
Печать  
я так и не понял, почему у меня не работает такой запрос ... может что-то в самой реализации движка или его версии?

селект работает, а селект с инсертом - нет  Плачущий

Eprst писал(а) 13. Января 2012 :: 06:29:
Как ты её потом в дбф файлик запихнешь ?
Получу запросом и уложу список объектов. подразумевалось, что заполнение таблички запросом будет быстрее, чем перебором результатов нескольких запросов и заполнение в цикле.
  
Наверх
 
IP записан
 
ziflex
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 76
Местоположение: Владивосток
Зарегистрирован: 05. Мая 2011
Пол: Мужской
Re: Свертка файловой ПУБ с использованием 1sqlite
Ответ #21 - 13. Января 2012 :: 07:24
Печать  
почитай как делается команда INSERT в sqlite для нескольких строк. она в значительное степени отличается от sql.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Свертка файловой ПУБ с использованием 1sqlite
Ответ #22 - 13. Января 2012 :: 07:28
Печать  
ziflex писал(а) 13. Января 2012 :: 07:24:
почитай как делается команда INSERT в sqlite для нескольких строк. она в значительное степени отличается от sql.

Да ничем она там не отличается..
Единственное, в скуле нет insert or replace, а так, синтаксис почти один в один.

Да и.. выше я пример привел инсерта в табличку из запроса к другой табличке
  
Наверх
 
IP записан
 
ziflex
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 76
Местоположение: Владивосток
Зарегистрирован: 05. Мая 2011
Пол: Мужской
Re: Свертка файловой ПУБ с использованием 1sqlite
Ответ #23 - 13. Января 2012 :: 07:31
Печать  
не буду говорить о том варианте, какой он делает. но если заносить запросом построчно - то там нужно делать через UNION каждую следующую строку...

Пример:
Код
Выбрать все
 INSERT INTO 'tablename'
SELECT
'data1' AS 'column1',
'data2' AS 'column2'
UNION SELECT 'data3', 'data4'
UNION SELECT 'data5', 'data6'
UNION SELECT 'data7', 'data8'

 



http://stackoverflow.com/questions/418898/sqlite-upsert-not-insert-or-replace
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Свертка файловой ПУБ с использованием 1sqlite
Ответ #24 - 13. Января 2012 :: 07:36
Печать  
Dmitry The Wing писал(а) 13. Января 2012 :: 07:15:
я так и не понял, почему у меня не работает такой запрос ... может что-то в самой реализации движка или его версии?

селект работает, а селект с инсертом - нет  Плачущий



Я ж тебе дал пример inserta c select :

Код
Выбрать все
insert or replace INTO Тест select * from Табличка 




ЗЫ: а в твоём запросе второй иннер джоин к журналу - вообще лишний.
+ воткнуть либо галку быстрая обработка движений, либо установить отбор на измерении, и тогда присоединять журнал вообще не надо будет.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Свертка файловой ПУБ с использованием 1sqlite
Ответ #25 - 13. Января 2012 :: 07:39
Печать  
ziflex писал(а) 13. Января 2012 :: 07:31:
не буду говорить о том варианте, какой он делает. но если заносить запросом построчно - то там нужно делать через UNION каждую следующую строку...



А зачем такие сложности ?
И нафига там select в этом запросе?, кода всё и так можно перечислить в values ?
  
Наверх
 
IP записан
 
ziflex
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 76
Местоположение: Владивосток
Зарегистрирован: 05. Мая 2011
Пол: Мужской
Re: Свертка файловой ПУБ с использованием 1sqlite
Ответ #26 - 13. Января 2012 :: 07:46
Печать  
Этот вопрос не ко мне а к разработчикам sqlite. Как в MS SQL оно не работает.
Я уже сталкивался с подобной ситуацией, когда необходимо было одним запросом занести несколько строк.  
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Свертка файловой ПУБ с использованием 1sqlite
Ответ #27 - 13. Января 2012 :: 07:53
Печать  
ziflex писал(а) 13. Января 2012 :: 07:46:
Этот вопрос не ко мне а к разработчикам sqlite. Как в MS SQL оно не работает.
Я уже сталкивался с подобной ситуацией, когда необходимо было одним запросом занести несколько строк.  


Дык в скуле аналогично, там тока с 2005 появилась возможность сразу пихать несколько строк в 1 запросе сразу в values

Тока автору это не нужно, ему тупо select из другой таблички и привет, все строки сразу..ну мот фильтр наложит.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Свертка файловой ПУБ с использованием 1sqlite
Ответ #28 - 13. Января 2012 :: 07:57
Печать  
Если нужны конкретные поля, то так:
Код
Выбрать все
	|insert or replace INTO Тест ('ИД','Объект')
	|  select ИД,Объект from Табличка 

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


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Свертка файловой ПУБ с использованием 1sqlite
Ответ #29 - 13. Января 2012 :: 08:00
Печать  
Eprst писал(а) 13. Января 2012 :: 07:36:
Dmitry The Wing писал(а) 13. Января 2012 :: 07:15:
я так и не понял, почему у меня не работает такой запрос ... может что-то в самой реализации движка или его версии?
селект работает, а селект с инсертом - нет  Плачущий
Я ж тебе дал пример inserta c select :
Код
Выбрать все
insert or replace INTO Тест select * from Табличка 

В том-то и непонятки, что мой запрос построен по тому же принципу, но не работает, точнее 1С крашится... причем в 100% случаев. А без инсерта ровно в 0%!

Eprst писал(а) 13. Января 2012 :: 07:36:
ЗЫ: а в твоём запросе второй иннер джоин к журналу - вообще лишний.
Первый журнал джойнится для проверки, что док новый.
Второй журнал джойнится по реквизиту и проверка идет на то, чтобы док по ссылке был старый.
Т.е. он никак не может быть лишним...

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