Если у вас есть столбец типа двоичный в SQL и вы возвращаете его с помощью ADODB в VB6, даже если столбец содержит только 1 байт данных, он должен быть сохранен как байтовый массив.
Так, например:
Dim cm As ADODB.Command
Dim rs As ADODB.Recordset
Set cm = New ADODB.Command
Set rs = New ADODB.Recordset
With cm
.ActiveConnection = cn
.CommandTimeout = 30
.CommandType = adCmdText
.CommandText = "SELECT * FROM Table WHERE RowID = ?"
.Parameters.Append .CreateParameter("TableID", adInteger, adParamInput, , TableID)
End With
RecordsetOpen cn, rs, cm, , adOpenForwardOnly, adLockReadOnly
With rs
If .State = adStateOpen Then
If .RecordCount > 0 Then
Dim tempArray() As Byte
tempArray = .Fields("BinaryColumn")
''Success! Returns array containing 1 Byte in it
Dim value as Byte
value = .Fields("BinaryColumn")
''Fails! Run-Time error '13' Type Mismatch
End If
End If
End With
Многие люди смотрят на это и говорят: «Ну и что? Это сбой из-за несоответствия типов, потому что у вас есть Byte () и вы пытаетесь установить байт!».
Мой аргумент - Fields.Value - это свойство типа Variant, и, учитывая либеральную политику VB6 в отношении типов, я бы подумал, что это будет работать.
Может ли кто-нибудь объяснить, почему это не удается?