|
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ско для "широкого" общения. пс. вопрос о том, что рекродсет определяет атрибуты для поля не так как хотелось бы, для меня все таки остался висеть.. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |