Имя: Пароль:
1C
 
Sqlite и 1с8
0 Маленький Вопросик
 
29.01.10
07:36
Народ, очень нужно хранить данные в отдельной внешней таблице от базы... подскажите пожалуйста как организовать доступ к sqlite из 1с8???
Если можно примеры...
1 Маленький Вопросик
 
29.01.10
07:56
апну тему.. дайте хоть какую-нибудь зацепку
2 shuhard
 
29.01.10
08:06
(1) ADODB - кули тут думать
3 Маленький Вопросик
 
29.01.10
08:10
(2) есть пример подключения через ADODB????
4 shuhard
 
29.01.10
08:12
(3) учу пользоваться поиском на мисте - дорого
5 fantomask
 
29.01.10
08:13
(3) Запросиками делаешь запись в БД
       СтрокаЗапроса2 = "SELECT u.id, u.login, a.id FROM users_accounts u_a, users u, accounts a WHERE u_a.uid = u.id AND u_a.is_deleted =0 AND u_a.account_id = a.id AND u.login='"+НомерДог+"' ORDER BY login;";    
       ADOUtils = Новый("AddIn.ADOUtils");
       Connection = Новый COMОбъект("ADODB.Connection");
       Connection.Open(СтрокаПодключения);
       Recordset = Connection.Execute(СтрокаЗапроса2);
6 fantomask
 
29.01.10
08:13
(3)
       СтрокаЗапроса2 = "SELECT u.id, u.login, a.id FROM users_accounts u_a, users u, accounts a WHERE u_a.uid = u.id AND u_a.is_deleted =0 AND u_a.account_id = a.id AND u.login='"+НомерДог+"' ORDER BY login;";    
       ADOUtils = Новый("AddIn.ADOUtils");
       Connection = Новый COMОбъект("ADODB.Connection");
       Connection.Open(СтрокаПодключения);
       Recordset = Connection.Execute(СтрокаЗапроса2);
7 Маленький Вопросик
 
29.01.10
08:23
(6) а можно примерчик СтрокаПодключения???
8 fantomask
 
29.01.10
08:24
(7) СтрокаПодключения = "DRIVER={MySQL ODBC 3.51 Driver};SERVER=172.16.110.17;USER = sardor;DATABASE=UTM5;PASSWORD = sardor;OPTION=3;";
9 Маленький Вопросик
 
29.01.10
08:27
(8) ругается на ADOUtils = Новый("AddIn.ADOUtils");
10 Маленький Вопросик
 
29.01.10
08:33
Тип не определен (AddIn.ADOUtils)
   ADOUtils = Новый("AddIn.ADOUtils");
11 fantomask
 
29.01.10
08:37
v8: v8: ADODB + MySQL, проблема с обращением к результату
вот почитай там код
пользуйся поиском, находится снизу, справа
12 shuhard
 
29.01.10
08:38
(11)[находится снизу, справа]
справа говоришь
забористая травка
13 Маленький Вопросик
 
29.01.10
08:44
вся пролема в том, что у меня sqlite, а не mysql
подключение к sqlite ведется просто как к файлу СтрокаПодключения="sqldb/1sqlite.db";
14 xzorkiix
 
29.01.10
08:47
(0) автор об стену - в чем разница между подключением из "1С" и "не 1С"? учи мать часть! RTFM
15 fantomask
 
29.01.10
08:50
(14) +1 знания которых автор сам постигнет запомнит надолго, нежели то что достанется нахаляву!
16 Маленький Вопросик
 
29.01.10
09:00
ПутьКБазе="File=""d:\1sqlite.db""; Usr=""""; Pwd="""";";
   
   
   //V8 = Новый COMОбъект("V8.Application");
   
   V8 = Новый COMОбъект("ADODB.Connection");
   
   
   Попытка
       Открытие = V8.Connect(ПутьКБазе);
   Исключение
       Сообщить("Соединение не установлено!!!");
       Возврат;
   КонецПопытки;

соединение не установлено!
17 Маленький Вопросик
 
29.01.10
09:02
(14) если ты имеешь ввиду, логин и пароль к базе, то можешь сам убиться об стену, т.к sqlite не требует их.
18 fantomask
 
29.01.10
09:11
(16) честно говоря строка подключения это знания, которых ты должен постигнуть сам! Читая другие строки подключения, смотри как подключаются из других программ к этой БД! Гугл тебе в помошь!
19 xzorkiix
 
29.01.10
09:13
(17) нет не логин и нет не пароль. Я о сути работы с этой СУБД.

Как то пришлось с ней поработать, все что надо нашел здесь
http://www.sqlite.org/docs.html
20 xzorkiix
 
29.01.10
09:17
к (19) наврал. Тогда я еще 7.7 юзал пользовал вот этот компонент

http://code.google.com/p/sqlite1c/ или его аналог.

http://www.google.ru/search?sourceid=chrome&ie=UTF-8&q=1С+%2B+sqlite
21 orefkov
 
29.01.10
09:26
(20)
http://code.google.com/p/sqlite1c/ не будет работать в 8ке, делалась исключительно под 77. Надо искать на форумах 1cpp.ru, проскакивал там в свое время OLE-компонент для работы с sqlite.
22 Маленький Вопросик
 
29.01.10
09:29
(21) 1cpp.ru - только для 77 вроде.
23 orefkov
 
29.01.10
10:00
Вот нашел в
http://www.1cpp.ru/forum/YaBB.pl?num=1187844655/4#4
"LiteX это Com объект обертка над Sqlite API.

весь объект с описанием и ссылкой на скачивание находятся
здесь http://roed.republika.pl/litex/automation.html
Скачиваем расспаковываем, регистрируем
regsvr32 <путь>sqlite3.dll

Если после этого  в 1с программа не жалуется на
oDb = СоздатьОбект("LiteX.LiteConnection");
то все установка LiteX завершена и можно использовать его на языке 1с.
LiteX внутри себя содержит весь sqlite и пользоваться бд sqlite можно
используя методы и свойства LiteX."

Так как это COM - объект, юзать можно и в 77 и в 8х.
24 Маленький Вопросик
 
29.01.10
12:25
(23) ага, где бы его еще скачать? :)
25 Megas
 
29.01.10
12:33
Эх !!!

ТекстШапка =  
   "    
   |    select
   |     aviro_orders.id,
   |     aviro_orders.1c_id,
   |     aviro_orders.date,
   |    aviro_orders.client_id,
   |     aviro_orders.comment,
   |     aviro_orders.status,
   |
   |     aviro_order_data.od_id,
   |     aviro_order_data.od_order_id,
   |     aviro_order_data.od_name,
   |     aviro_order_data.od_value
   |
   |
   |     from
   |
   |          aviro_orders as aviro_orders
   |
   |            Left join aviro_order_data
   |            on aviro_orders.id = aviro_order_data.od_order_id
   |
   |where
   | (aviro_orders.id =  "+ Формат(Число(СокрЛп(id_aviro)),"ЧДЦ=0; ЧН=0; ЧГ=") +")";
   
   
   ТаблицаШапкаЗаказа = Обработка_Прямой_запрос_к_aviro_ru(ТекстШапка);



Функция Обработка_Прямой_запрос(п_Текст)
   
   л_Параметры_соединения = "DRIVER={MySQL ODBC 5.1 Driver};OPTION=3;DATABASE=MYSQLDATABASENAME;PWD=PASSSSSS;PORT=3306;SERVER=127.0.0.1;UID=LOGIN";
   гл_Соединение_av = Новый COMОбъект("ADODB.Connection");
   Попытка
       гл_Соединение_av.Open(л_Параметры_соединения);
   Исключение
       Сообщить("Отсутствует связь с базой AVIRO!");
   КонецПопытки;
        //}

   
   л_ТЗ = Новый ТаблицаЗначений;
   Если (гл_Соединение_av.State = 0) Тогда
       л_Параметры_соединения = "DRIVER={MySQL ODBC 5.1 Driver};OPTION=3;DATABASE=MYSQLDATABASENAME;PWD=PASSSSSS;PORT=3306;SERVER=127.0.0.1;UID=LOGIN";
       
       гл_Соединение_av = Новый COMОбъект("ADODB.Connection");
       Попытка
           гл_Соединение_av.Open(л_Параметры_соединения);
       Исключение
           Сообщить("Отсутствует связь с базой!");
           Возврат(л_ТЗ);
       КонецПопытки;
   КонецЕсли;
   
   л_Команда = Новый COMОбъект("ADODB.Command");
   л_Команда.ActiveConnection = гл_Соединение_av;
   л_Команда.CommandText = п_Текст;
   л_Команда.CommandType = 1;
   
   л_Набор_записей = Новый COMОбъект("ADODB.Recordset");
   л_Набор_записей.CursorType = 3;
   Попытка
       л_Набор_записей = л_Команда.Execute("USE ");
   Исключение
       Сообщить(ОписаниеОшибки());
       Возврат(л_ТЗ)
   Конецпопытки;
   л_Число_колонок = л_Набор_записей.Fields.Count - 1;
   Если (л_Число_колонок > 0) Тогда
       Для Ф = 0 По л_Число_колонок Цикл
           л_Колонка_добавлена = Ложь;
           л_Префикс = "";
           л_сч = 0;
           Пока (л_Колонка_добавлена = Ложь) Цикл
               Попытка
                   л_ТЗ.Колонки.Добавить(л_Префикс + л_Набор_записей.Fields(Ф).Name);
                   л_Колонка_добавлена = Истина;
               Исключение
                   Если (л_сч = 0) Тогда
                       л_сч = л_сч + 1;
                       л_Префикс = "_";
                   Иначе
                       л_Префикс = "_" + л_сч + "_";
                       л_сч = л_сч + 1;
                   КонецЕсли;
               КонецПопытки;
           КонецЦикла;
       КонецЦикла;
       Если (л_Набор_записей.EOF() = Истина) И (л_Набор_записей.BOF() = Истина) Тогда
       Иначе
           л_Набор_записей.MoveFirst();
           Пока (л_Набор_записей.EOF() = 0) Цикл
               л_стр = л_ТЗ.Добавить();
               Для Ф = 0 По л_Число_колонок Цикл
                   л_стр[Ф] = л_Набор_записей.Fields(Ф).Value;
               КонецЦикла;                                                  
               л_Набор_записей.MoveNext();
           КонецЦикла;
       КонецЕсли;
   КонецЕсли;
   Попытка
       л_Набор_записей.Close();
   Исключение
   КонецПопытки;
   
   гл_Соединение_av.Close();
гл_Соединение_av = неопределено;    
   Возврат(л_ТЗ)
КонецФункции
26 Megas
 
29.01.10
12:34
(25) - Это запрос к MySQL и функция котрая возвращает ТЗ
27 Маленький Вопросик
 
29.01.10
12:53
LiteX.LiteConnection - короче с этой штуку надо где-то добыть.... и разбираться, а сегодня пятница...
28 Megas
 
29.01.10
12:55
(27) Ставь MySQL и не парься... бесплатная программулина и все её используют!
29 Маленький Вопросик
 
29.01.10
13:34
Процедура КнопкаВыполнитьНажатие(Кнопка)
   
СтрокаПодключения="D:\works_jan\sqldb\aaa2.db";
Connection = Новый ComОбъект("LiteX.LiteConnection");    
Connection.Open(СтрокаПодключения);


СтрокаЗапроса2 = "INSERT INTO mytable (name, surname) VALUES (""YAHHOO!!!!"",""HELOW!!!!"");";
Recordset = Connection.Execute(СтрокаЗапроса2);
                 
КонецПроцедуры


ПОЛУЧИЛОСЬ!!!!! Яхуууу.....
30 Маленький Вопросик
 
29.01.10
13:37
А теперь как получить массив из Recordset???? Кто-нить подскажет???
31 orefkov
 
29.01.10
14:08
(30)
Ну, конкретно с LiteX не работал, но думаю примерно так - выполнить запрос, потом перебирать все записи, получать поля. Как-то так...
К LiteX доки то есть с примерами?
32 Маленький Вопросик
 
29.01.10
14:13
(31) ага... я это знаю... только примеров не нашел и синтаксис мне как-то не очень:

вот например вывод Сообщить(Recordset):


COMSafeArray - массив, только как его разложить???
33 orefkov
 
29.01.10
14:19
(32)
Я в 8ке не силен, но тут товарищи с мест говорят, что в 8ке COMSafeArray - штатный тип и описан в документации. Также наверное можно в отладчике глянуть свойства/методы.
34 Маленький Вопросик
 
29.01.10
14:32
(33) да спасибо.. все нашел...
35 Маленький Вопросик
 
29.01.10
14:32
+теперь можно неограниченно применять это...