Форум: "Базы";
Текущий архив: 2004.09.12;
Скачать: [xml.tar.bz2];
Внизполе типа varbinary Найти похожие ветки
← →
Vitalik © (2004-08-14 07:11) [0]Привет!
Я пытаюсь прочитать значения из таблички 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. как мне считать значение из этого столбца?
Спасибо!
← →
tERRORist (2004-08-14 13:20) [1]К BLOB типам в MSSQL относятся: ntext, text, and image.
А в Делфи типу varbinary будет соотвествовать поле типа TVarBytesField - что-то вроде вариантного массива переменной длины.
← →
sniknik © (2004-08-14 13:37) [2]часть программы (показывает варбинари в виде строки в 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;
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.09.12;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.034 c