Discussion:
Не было у баба хлопот, поставила OpenOffice :-(
(слишком старое сообщение для ответа)
Alexandr Ilyin
2008-06-01 14:45:49 UTC
Permalink
Добрейшего Вам дня, многоуважаемый All...

Обновили сервер 1С 7.7. В рамках борьбы за чистое лицензионное обеспечение
туда HЕ поставили MS Office. А поставили OpenOffice.org 2.4. И теперь всё,
что было нажито непосильным трудом по формированию запроса из 1С к базе
данных Access, создаваемой счётчиком посетителей, накрылось медным тазом.
Посему прошу помощи зала, бо хорошей литературы по этому вопросу не нашёл
:-(

Итак, есть база данных Access CountMax17.mdb. В ней есть таблица Day_Count с
полями Day и SumMenIn. В поле Day с пятиминутными интервалами заносились
TimeStamp'ы, в поле SumMenIn -- соответствующие этому моменту натуральные
числа. Задача запроса -- выбрать сумму полей SumMenIn, когда дата в поле Day
равна нужному значению. Поскольку в поле Day хранятся и дата и время,
пришлось при построении SQL-запроса в 1С идти через функцию FORMAT():

=========Hачинается мудрая мысль==============
СтрокаВремени = Формат(ВыбДата,"ДДДММГГГ");
ТекстСелект = "SELECT SUM(Day_Count.SumMenIn) FROM Day_Count WHERE
(Format(Day_Count.Day,'dd.mm.yyyy') ='"+СтрокаВремени+"')";
=========Мудрой мысли пришёл конец============
И всё было хорошо...

Hо в SQL из OpenOffice.org нет функции FORMAT!
Единственным вариантом из очень многих проверенных, на который _не_ ругается
построитель SQL-запросов из OpenOffice.Base, у меня получился вот такой:
=========Hачинается мудрая мысль==============
SELECT SUM( `Day_Count`.`SumMenIn` ) AS `SumMenIn` FROM `Day_Count` AS
`Day_Count` WHERE ( `Day_Count`.`Day` LIKE {D '2006-01-10' } )
=========Мудрой мысли пришёл конец============

Hо он выдаёт пустой результат :-( База OpenOffice.Base, спешу заметить,
вполне удачна подключена к CountMax17.mdb: все записи видны...

Так что мой первый вопрос: как сделать правильный запрос?
Вторым вопросом будет, разумеется: как обратиться к результатам запроса
OpenOffice.Base из 1С?
--
Hаилучшие пожелания и нижайшие поклоны,
Alexandr Ilyin [Перумовские Вуглускры][Престарелые алкоголики]
Запуск ракет производится с территории подводных лодок. (с)
По легенде попугивай. - "Советник 96M"
Oleg Levkin
2008-06-01 18:45:08 UTC
Permalink
Я рад пообщаться с тобой, Alexandr!

Однажды, сидя за компутером и покуривая бамбук, увидел я как 01 Июн 2008
Alexandr Ilyin и All травили байки про Не было у баба хлопот, поставила
OpenOffice :-(:
AI> с полями Day и SumMenIn. В поле Day с пятиминутными интервалами заносились
AI> TimeStamp'ы, в поле SumMenIn -- соответствующие этому моменту натуральные
AI> числа. Задача запроса -- выбрать сумму полей SumMenIn, когда дата в поле
AI> Day равна нужному значению. Поскольку в поле Day хранятся и дата и время,
AI> пришлось при построении SQL-запроса в 1С идти через функцию FORMAT():
AI> =========Hачинается мудрая мысль==============
AI> СтрокаВремени = Формат(ВыбДата,"ДДДММГГГ");
AI> ТекстСелект = "SELECT SUM(Day_Count.SumMenIn) FROM Day_Count WHERE
AI> (Format(Day_Count.Day,'dd.mm.yyyy') ='"+СтрокаВремени+"')";
AI> =========Мудрой мысли пришёл конец============
AI> И всё было хорошо...
AI> Hо в SQL из OpenOffice.org нет функции FORMAT!
AI> Единственным вариантом из очень многих проверенных, на который _не_
AI> ругается построитель SQL-запросов из OpenOffice.Base, у меня получился вот
AI> такой:
AI> =========Hачинается мудрая мысль==============
AI> SELECT SUM( `Day_Count`.`SumMenIn` ) AS `SumMenIn` FROM `Day_Count` AS
AI> `Day_Count` WHERE ( `Day_Count`.`Day` LIKE {D '2006-01-10' } )
AI> =========Мудрой мысли пришёл конец============
AI> Hо он выдаёт пустой результат :-( База OpenOffice.Base, спешу заметить,
AI> вполне удачна подключена к CountMax17.mdb: все записи видны...
AI> Так что мой первый вопрос: как сделать правильный запрос?
AI> Вторым вопросом будет, разумеется: как обратиться к результатам запроса
AI> OpenOffice.Base из 1С?
Hе надо обращаться к OpenOffice.Base. Базы данных Access'а обрабатываются
через ADO. При этом используется провайдер OLE DB Microsoft Jet, который
является частью операционной системы еще с Windows 2000. Т.е. механизм работы
должен выглядеть примерно так:
Connection=CreateObject("ADODB.Connection");
Query=CreateObject("ADODB.Command");
RecordSet=CreateObject("ADODB.Recordset);
Connection.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=%Путь_До_Файла_Твоей_БД%\CountMax17.mdb");
Query.ActiveConnection=Connection;
Query.CommandText=ТекстСелект;
RecordSet=Query.Execute;
RecordSet.MoveFirst();
Пока RecordSet.EOF()=0 Цикл
//Тут обращаемся к результатам запроса к Access'овской базе
КонецЦикла;

За SIMM прощаюсь, пишите письма
Oleg
ин зе хоум

Team [Квакеров&Думеров - Давить!] [Мультфильмы - RULEZ FOREVER!]

... Лапша - пища ПиАрщиков (с) К.Левкин
Loading...