Имя: Пароль:
1C
1С v8
Обработать результат к выборе MySQL
0 lamme
 
18.10.17
11:19
1C83
клиент.
подключаюсь к базе MySQL
запросом к таблице

select barcode, date_ins, date_upd, image from photo WHERE date_ins > STR_TO_DATE(""01.10.2017"",""%d.%m.%Y"") AND date_ins < STR_TO_DATE(""10.10.2017"",""%d.%m.%Y"")

- получаю какие то данные из таблицы

http://clip2net.com/s/3OFC5ku

Собственно вопрос ... а где сами данные то?
Как теперь в этом НаборЗаписей - поиметь те поля - которые я вытаскиваю из таблицы.
И как понять -сколько записей в выборке?
1 Ёпрст
 
гуру
18.10.17
11:22
Сообщить(RecordSet.Fields.Item("barcode").Value);
2 Ёпрст
 
гуру
18.10.17
11:23
в твоём случае,
Сообщить(НаборЗаписей.Fields.Item("barcode").Value);
3 lamme
 
18.10.17
11:27
а если нужны двоичные данные в image ?
те это картинка на MySQL

я так понимаю - там должны быть бинарные данные
работаем с ними как с двоичными?
4 lamme
 
18.10.17
11:30
а это нормально - что запрос работает на выборку долго?
те я из 1С выбираю данные - ну .. минуты с 4 ..
в консоли MySQL - там шустрее
5 lamme
 
18.10.17
11:31
вообще - запрос верен?
те нужны все записи из таблицы ... за период с ... по полю date_ins
6 lamme
 
18.10.17
11:35
как показывает практика - запрос верен

только вот тип данных у поля image - вот такой вот
http://clip2net.com/s/3OFEMSy

и как его дальше обработать? чтобы получить картинку
7 lamme
 
18.10.17
12:29
собственно
вот примерное решение

comsafearray как получить  картинку
8 lamme
 
18.10.17
13:35
Делаю так:

ТекстЗакпроса = "select barcode, date_ins, date_upd, image from photo WHERE date_ins >= STR_TO_DATE(""01.10.2017"",""%d.%m.%Y"") AND date_ins <= STR_TO_DATE(""06.10.2017"",""%d.%m.%Y"")";

Stream     = Новый COMОбъект("ADODB.Stream");
RS             = Новый COMОбъект("ADODB.Recordset");
RS.ActiveConnection = АДОСоединение;

RS.open (ТекстЗакпроса);
Stream.Type = 1;
    
Пока RS.EOF() = 0 Цикл
        Stream.Open();
        Stream.Write(RS.Fields("image").Value);
        ИмяФайла = RS.fields("barcode").Value;
        фрис = КаталогВременныхФайлов() + ИмяФайла + ".png";
        Stream.SaveToFile(фрис);
        Stream.Close();
    КонецЦикла;

выдается вот такая ошибка

Произошла исключительная ситуация (ADODB.Stream): Аргументы имеют неверный тип, выходят за пределы допустимого диапазона или вступают в конфликт друг с другом.


что делать?
9 lamme
 
18.10.17
13:38
Stream.Write(RS.Fields("image").Value);  - вот тут валится


RS.Fields("image").Value= Тип comsafearray
а у  Stream - только параметр Stream.Type = 1;
10 lamme
 
18.10.17
15:12
решено
11 lamme
 
18.10.17
15:12
ТекстЗакпроса = "select barcode, date_ins, date_upd, image from photo WHERE date_ins >= STR_TO_DATE(""01.10.2017"",""%d.%m.%Y"") AND date_ins <= STR_TO_DATE(""06.10.2017"",""%d.%m.%Y"")";


//бираем все поля из таблицы
    Command = Новый COMОбъект("ADODB.Command");;
    Command.ActiveConnection = АДОСоединение;
    Command.CommandText = ТекстЗакпроса;
        
    
    Command.CommandType = 1;
    RS = Новый COMОбъект("ADODB.Recordset");
    RS.ActiveConnection = АДОСоединение;
    RS.CursorType = 3;
    RS = Command.Execute();
    
    //ределим таблицу с именами колонок, как имена полей, полученные из запроса к MySQL таблице
    РезультатЗапроса = Новый ТаблицаЗначений;
    КоличествоПолей = RS.Fields.Count;
    
    Для НомерКолонки = 0 По КоличествоПолей - 1 Цикл
        РезультатЗапроса.Колонки.Добавить(RS.Fields.Item(НомерКолонки).Name); //поля таблицы
    КонецЦикла;
    
//озиционируемся на начало выборки MySQL
    RS.MoveFirst();
    
    
     Recordset  = Новый COMОбъект("ADODB.Recordset");
     Stream     = Новый COMОбъект("ADODB.Stream");
    
     Stream1     = Новый COMОбъект("ADODB.Stream");
     Stream1.Type = 1;
     Stream1.Mode = 3;
    
    
    
     Stream.Type = 1;
    Stream.Open();  
    //ходим все строки выборки MySQL
    Пока НЕ RS.EOF Цикл
        НоваяСтрока = РезультатЗапроса.Добавить();
        Для НомерКолонки = 0 По КоличествоПолей - 1 Цикл
            ИмяПоля = RS.Fields.Item(НомерКолонки).Name;
            Значение = RS.Fields(ИмяПоля).Value;
            
            Если ИмяПоля="image" тогда
                Stream1.Open();  
                Stream1.Write(Значение);
                ИмяФайла = RS.fields("barcode").Value;
                 фрис = КаталогВременныхФайлов() + ИмяФайла + ".jpg";
                 Stream1.SaveToFile(фрис,2);
                 сообщить("Записан "+фрис);
                 Stream1.Close();  
             конецесли;
            

            НоваяСтрока[ИмяПоля] = Значение;
            
        КонецЦикла;
        RS.MoveNext();
    КонецЦикла;    
    RS.Close();
    
//    Элементыформы.РезультатЗапроса.СоздатьКолонки();
12 lamme
 
18.10.17
15:13
Stream - обходит результа выборки
Stream1  - записывает данные в файл


пытался   сделать зхапись в  Stream
поэтому и ругалось