1 (изменено: pavlikspb, 2011-11-03 17:01:37)

Тема: VBS: Преобразование данных blob в строку

Подскажите пожалуйста, как преобразовать данные из поля blob в строку, чтобы можно было их просмотреть.
Смысл такой - информация в этом поле занимает 7 байт, которые характеризуют дни недели. В каждом байте используется только первый бит, если он установлен например во втором байте, то это вторник, если во втором и третьем, то это вторник и среда и так далее. Подскажите как вывести эти флаги в строку, например можно так 01010101010101 (Вся неделя).

Заранее благодарю!

Кто рано встает того и тапки

2

Re: VBS: Преобразование данных blob в строку

pavlikspb, как Вы извлекаете сами данные из поля? Какой тип данных получается в итоге? Это надо знать, чтобы понимать как работать дальше.

3 (изменено: pavlikspb, 2011-11-03 09:05:54)

Re: VBS: Преобразование данных blob в строку

поле TIMEINTR.DAYWEEK типа blob

Dim connA
Dim arrTest
Set connA = CreateObject("ADODB.Connection")
connA.Open ("Data Source = Апакс25")
Dim rs
Set rs = CreateObject("ADODB.Recordset")
rs.Open "select TZRECNUM, TIMEINTR.DAYWEEK, INTERNUM from TIMEINTR", connA

rs.MoveFirst
do while not rs.eof
                        
msgbox rs(1)        
rs.MoveNext

loop
Кто рано встает того и тапки

4

Re: VBS: Преобразование данных blob в строку

Проверьте пожалуйста, что возвращает VarType от содержимого. Предполагаю что Byte(), но всё же хотелось бы знать точно.


msgbox VarType(rs(1))
Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

5

Re: VBS: Преобразование данных blob в строку

msgbox выдает "8209"

Кто рано встает того и тапки

6

Re: VBS: Преобразование данных blob в строку

Виноват. Нужен был TypeName() от rs(1). Но сейчас уже не важно. 8209 = vbArray or vbByte. ) Т.е всё верно это byte массив.

Предполагаю, что Вам поможет такой код.


Dim Data, s

Data = rs(1)

For i=Lbound(Data) to Ubound(Data)
    s = s & Data(i)
Next

MsgBox s
Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

7

Re: VBS: Преобразование данных blob в строку

Xameleon пишет:

Предполагаю, что Вам поможет такой код.

Не помог - выдает ошибку несоответствие типа в строке с msgbox. Само поле разбивается в массив и состоит и 7 элементов, как и должно быть.

Xameleon пишет:

Виноват. Нужен был TypeName() от rs(1). Но сейчас уже не важно. 8209 = vbArray or vbByte. ) Т.е всё верно это byte массив.

TypeName(rs(1)) выдает надпись "Field"

Кто рано встает того и тапки

8

Re: VBS: Преобразование данных blob в строку

Ага. Тогда пробуем так )

tmp = rs(1).GetChunk(rs(1).ActualSize)

Dim i,s
For i=1 to Ubound(tmp)
    s = s & AscB(midB(tmp,i,1))
Next

msgbox s

Хм... А вообще подумать надо как удобно дёрнуть. А то так кривовато. Сейчас как дома окажусь - поэкспериментирую на живом образце.

P.S Код обновил. Тот у меня давал сбои из-за неправильной работы с массивом

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

9 (изменено: pavlikspb, 2011-11-03 16:19:38)

Re: VBS: Преобразование данных blob в строку

теперь ругается на строку - s = s & Data(i) - несоответствие типа

Извиняюсь - перепутал

Кто рано встает того и тапки

10

Re: VBS: Преобразование данных blob в строку

В последнем примере все работает ))), и меня устраивает больше чем надо, так как мне еще было необходимо разбить строку в массив, а тут на выходе уже массив - спасибо огромное!!!

Кто рано встает того и тапки

11

Re: VBS: Преобразование данных blob в строку

OFF: Ну вот. ) Опять не успел. А я как раз хотел собрать более правильный, на мой взгляд, код. )

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !