![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
поле типа varbinary [D6, MSSQL]
Vitalik © (2004-08-14 07:11:00)Привет!
Я пытаюсь прочитать значения из таблички sysusers из поля roles. Для этого делаю следующее:
var
Blob : TStream;
F : TField;
begin
with DataSet1 do
begin
Close;
commandText := 'SELECT uid, name, roles, createdate, updatedate FROM sysusers WHERE uid >=16384';
Open;
while not Eof do
begin
f := FieldByName('roles');
if F.IsBlob then showMessage('It is BLOB!');
Blob := CreateBlobStream(f, bmRead);
Blob.Position := 0;
Blob.Read(Temp, blob.Size);
blob.Free;
Next;
end;
close;
end;
end;
колонка roles в БД описана как varbinary(2048)...
Условия if F.IsBlob then showMessage('It is BLOB!') не срабатывает.
На строчке Blob := CreateBlobStream(f, bmRead); происходит ошибка ('invalid class typecast')
Отсюда вопросы:
1. что такое BLOB? И разве varbinary(2048) не является BLOB-полем?
2. как мне считать значение из этого столбца?
Спасибо!
sniknik (2004-08-14 13:37:00) [1]часть программы (показывает варбинари в виде строки в 16значном преставлении)
ftVarBytes:
Size:= TADODataSet(DBGrid.DataSource.DataSet).FieldByname(TitName).DataSize;
SetLength(Buf, Size);
try
TADODataSet(DBGrid.DataSource.DataSet).FieldByname(TitName).GetData(Buf);
Size:= Buf[1] shl 8 + Buf[0];
ChBuf:= '';
for i:= 0 to Size - 1 do
ChBuf:= ChBuf + IntToHex(Buf[i+2], 2) + ' ';
Delete(ChBuf, Length(ChBuf), 1);
BlobEdit.Memo1.Text:= ChBuf;
finally
SetLength(Buf, 0);
end;
tERRORist (2004-08-14 13:20:00) [2]К BLOB типам в MSSQL относятся: ntext, text, and image.
А в Делфи типу varbinary будет соотвествовать поле типа TVarBytesField - что-то вроде вариантного массива переменной длины.