|   |   | 
| 
 | Recordset SQLite | ☑ | ||
|---|---|---|---|---|
| 0
    
        lEvGl гуру 23.07.15✎ 11:08 | 
        Доброго здоровья всем
 пытаюсь читать из SQLLite посредством Recorset через драйвер SQLite3 ODBC Driver Connection = Новый COMОбъект("ADODB.Connection"); Connection.Open("DRIVER=SQLite3 ODBC Driver;Database=D:\results.db;"); RecordSet = Новый COMОбъект("ADODB.Recordset"); RecordSet.Open("Select Cast(Result.Value_binary as character(10000)) As XML From result As result", Connection, 3); Тип поля - BLOB, там хранится описание данных, которые нужны в виде XML. При прямом запросе из браузера SQLite запрос возвращает полную строку (много букв ~ 2000-3000), схема XML в текстовом варианте. При обходе выборки, полученной через recordset значение этого поля обрезается до 255 символов. СтрДлина(RecordSet.Fields(0).Value) показывает как будто строка полная, но сами символы не видны в отладчике, сохранение текста в файл через Новый ТекстовыйДокумент тоже самое и т д. Разобрать XML не получается. | |||
| 1
    
        shuhard_серый 23.07.15✎ 11:10 | 
        (0) путчек и гетчек     | |||
| 2
    
        Лефмихалыч 23.07.15✎ 11:12 | 
        попробуй
 Convert(VarChar(10000), Result.Value_binary) | |||
| 3
    
        lEvGl гуру 23.07.15✎ 11:13 | 
        Почему Recordset так себя ведет?
 (0) GetChunk()? или не то, подробней можно?) (1) Convert насколько я понял в SQLite нет | |||
| 4
    
        lEvGl гуру 23.07.15✎ 11:16 | 
        +(3) почему так ведет - имею ввиду заставить понимать размерность поля вариантов нет ? Про эксель драйвер начитал - можно править количество строк, по которым он определяет размер для всего поля http://forum.infostart.ru/forum86/topic131531/ а тут другое     | |||
| 5
    
        lEvGl гуру 23.07.15✎ 18:44 | 
        Не пойму что не так
 (1) не работает Произошла исключительная ситуация (ADODB.Field): Операция не допускается в данном контексте. Возможность использования GetChunk определяется свойством adFldLong, не пойму где его найти? | |||
| 6
    
        Маленький Вопросик 23.07.15✎ 19:11 | 
        по-моему там ограничения в поле до 1000 кб ... сталкивался с этим несколько лет назад....     | |||
| 7
    
        lEvGl гуру 23.07.15✎ 19:29 | 
        а там это где ?
 да (1) должно работать, но где то не так делаю, пробовал настройки и соединения и рекордсета и через стрим пробовал... рекордсет в value выдает обрезок строки или safeArray, заполненный до 255 элемента, как не сохраняй, куда не грузи - лажа в общем ) либо поле без adFldLong, не слишком длинное типа, либо.. больше не на что думать.. | |||
| 8
    
        shuhard_серый 23.07.15✎ 19:36 | 
        (7) [больше не на что думать..]
 что-то мешает задать вопрос по специфике GetChunk на форуме вендора ? ибо ADODB про это не знает | |||
| 9
    
        sapphire 23.07.15✎ 19:58 | ||||
| 10
    
        Маленький Вопросик 23.07.15✎ 20:12 | 
        (0) кстати, а почему через recordset именно?
 чем запрос не устраивает??? SQLiteObject.Execute(Запрос); | |||
| 11
    
        lEvGl гуру 23.07.15✎ 20:33 | 
        (9) в общем все не просто, надо сделать на VB, потом перекинуть к себе
 (10)похоже recorset и вернет | |||
| 12
    
        lEvGl гуру 27.07.15✎ 15:49 | 
        лажа, не работает, пробовал много вариантов, один из них такой
 Dim cn As ADODB.Connection, rs As ADODB.Recordset, SQL As String, fld As ADODB.Field, bData() as Byte cn = New ADODB.Connection rs = New ADODB.Recordset cn.CursorLocation = ADODB.CursorLocationEnum.adUseServer cn.Open("dsn=SQLite3 Datasource") SQL = "Select result.Value_binary As XML From result as result Where result.id = 23290)" rs.Open(SQL, cn, ADODB.CursorTypeEnum.adOpenStatic, ADODB.LockTypeEnum.adLockReadOnly) fld = rs.Fields(0) bData = fld.GetChunk(fld.ActualSize) "операция не доступна в данном контексте" и все тут. Type поля = adBinary (по документации должен быть LongVarChar, LongVarWChar или LongVarBinary - как привести к такому типу? cast дает VarChar, VarWChar), сумма констант attributes насколько понимаю значения adFldLong не содержит (по документации должна, где это определяется - при создании исходной базы? добавлял свой столбец - настройки, указывающей на что то похожее на увидел). Вариант вытягивания данных - через substring в цикле и преобразование двоичных данных, но некрасиво, давно бы забил, но просто интересно. Укажите в каком месте косяк: рекордсет - тип курсора, место курсора(сервер/клиент) или тип блокировки; или чанк надо как то получать не так; или поле в исходной базе не такое? Код вроде простой, для использования GetChunk по примерам с MS support тоже ничего особенного; требования к полю есть(attributes и type), но как же тогда создать его "правильно", для "гетчега" и "путчега", чтоб работали? | |||
| 13
    
        lEvGl гуру 27.07.15✎ 17:24 | 
        fld.Attributes = ADODB.FieldAttributeEnum.adFldLong - false
 есть ли возможность сделать наоборот? доступ к базе есть | |||
| 14
    
        Serginio1 27.07.15✎ 17:42 | 
        Попробуй для начала на Ado.Net     | |||
| 15
    
        Serginio1 27.07.15✎ 17:44 | ||||
| 16
    
        lEvGl гуру 29.07.15✎ 10:55 | 
        (15) так работает.
 через SQLiteConnection -> SQLiteCommand -> SQLiteDataReader получает все полностью, НО это будет обертка, так как качал System.Data.SQLite.dll для .Net | |||
| 17
    
        Serginio1 29.07.15✎ 11:05 | 
        Все обертка. Используй v8: Использование сборок .NET в 1С 7.x и 8.x v8: v8: Использование сборок .NET в 1С 7.x и 8.x     | |||
| 18
    
        lEvGl гуру 29.07.15✎ 11:20 | 
        обертка обертке - рознь ) адо тоже обертка, но она есть в системе по умолчанию, а это надо устанавливать
 спасибо за ссылку, почитаю.. | |||
| 19
    
        trdm 29.07.15✎ 11:32 | 
        Да ладно, над SQLite столько оберток уже, что можно адо и не тянуть.
 Там с ней exe-шник поставляется для командной строки, можо и через него сделать. | |||
| 20
    
        lEvGl гуру 29.07.15✎ 13:52 | 
        (19)вот сижу и думаю... это ж надо фреймворк ставить на "целевую" машину     | |||
| 21
    
        oleg_km 29.07.15✎ 14:03 | 
        (20) О да, это основная трудность? Мне бы ваши проблемы (шутка)     | |||
| 22
    
        lEvGl гуру 29.07.15✎ 14:12 | 
        (21) да согласен, что это не такая большая проблема - инсталл запустить, но говорит об универсальности решения     | |||
| 23
    
        lEvGl гуру 29.07.15✎ 14:32 | 
        + а рекродсет, скажу еще раз, работает по умолчанию :)
 все равно, тем кто поучаствовал - спасибо, Serginio1 похоже вложил немало сил, как и oleg_km. Буду делать универсальную обертку, подобные задачи появляются часто, можно рассматривать это как отдельный обязательный подблок. Не предназначена 1ско для "широкого" общения. пс. вопрос о том, что рекродсет определяет атрибуты для поля не так как хотелось бы, для меня все таки остался висеть.. | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |