Форум: "Начинающим";
Текущий архив: 2015.12.13;
Скачать: [xml.tar.bz2];
ВнизЗапись и чтение строки из блоба Найти похожие ветки
← →
Sakipiel (2014-06-22 12:43) [0]
Procedure TStoreClass.SaveAnyValueCompTable(Name, Parent, m: string);
var
vBlob: TStream;
maxSimb: integer;
begin
if (Name = "") then
exit;
if FormAndControlList.Locate("Name;Parent", VarArrayOf([Name, Parent]), [])
then
begin
FormAndControlList.Edit;
vBlob := FormAndControlList.CreateBlobStream
(FormAndControlList.FieldByName("AnyValue"), bmWrite);
vBlob.Seek(0, soFromBeginning);
vBlob.WriteBuffer(m[1], Length(m) * SizeOf(m[1]));
vBlob.free;
FormAndControlList.Post;
end;
end;
Function TStoreClass.LoadAnyValueCompTable(Name, Parent:string; var m: string): boolean;
var
vBlob: TStream;
begin
result := false;
if Name = "" then
exit;
if not FormAndControlList.Locate("Name;Parent", VarArrayOf([Name, Parent]), [])
then
exit;
vBlob := FormAndControlList.CreateBlobStream
(FormAndControlList.FieldByName("AnyValue"), bmRead);
try
vBlob.Seek(0, soFromBeginning); // sереход в начало потока BLOB
vBlob.ReadBuffer(m[1], vBlob.Size);
result := true;
finally
vBlob.free;
end;
end;
в ClientDataSet есть поле с типом блоб, пытаюсь записывать и читать string в него и из него. Запись проходит, что при этом записывается мне не известно, т.к. не проходит загрузка, вылетая на строке vBlob.ReadBuffer(m[1], vBlob.Size); m[0] для стринг указать нельзя, 1 вызывает ошибку, просто m отрабатывает, но ничего не загружается.
определение procedure WriteBuffer(const Buffer; Count: Longint); ну и рид такое же, не дает мне понимания, чего же надо первым параметром передавать.
← →
KilkennyCat © (2014-06-22 12:51) [1]
> вызывает ошибку
какую? неужто просто говорит "ошибка" ?
← →
Плохиш © (2014-06-22 12:56) [2]
> Sakipiel (22.06.14 12:43)
Перед чтением необходимо создать строку требуемого размера.
← →
sniknik © (2014-06-22 13:04) [3]AsString
← →
Sakipiel (2014-06-22 13:12) [4]
> Перед чтением необходимо создать строку требуемого размера.
SetLength(m, vBlob.Size div SizeOf(char));
таки да
← →
Андрюша (2014-06-22 17:50) [5]Зачем в БЛОБы строки писать, VARCHARa вам мало? ;)
← →
turbouser © (2014-06-22 17:57) [6]
> Андрюша (22.06.14 17:50) [5]
>
> Зачем в БЛОБы строки писать, VARCHARa вам мало? ;)
NVARCHAR(MAX) тогда уж :)
← →
sniknik © (2014-06-23 08:14) [7]> Зачем в БЛОБы строки писать, VARCHARa вам мало? ;)
текст предваряется обработкой при записи, блоб нет, я к примеру было записывал в блоб текстовый файл из-за того что в нем, этом файле встречались управляющие ascii символы (#0 #27 #90 ... прога связь с которой делали их использовала/не работала без них), а запись в текстовое поле их преобразовывал и "резал" файл (и признак конца файла убирал, если доходил... а это для проги было "смертельно").
впрочем замена поля "текст" на поле "блоб" на дельфевую часть никак не повлияла, в дельфе строки это просто кусок памяти с количеством, т.е. обработка там как была до того как "особенности" заметили, так и осталась со сменой типа поля, даже перекомпиляции не потребовалось.
← →
Игорь Шевченко © (2014-06-23 13:11) [8]
> текстовый файл из-за того что в нем, этом файле встречались
> управляющие ascii символы (#0 #27 #90
наверное это уже не текстовый файл
← →
sniknik © (2014-06-23 18:26) [9]> наверное это уже не текстовый файл
это позиционировалось как "управляющий-текстовый ascii файл",
но это неважно, т.к. в вопросе на что ответ, не про файл, а про строки, файл чисто для примера откуда такую строку можно "подцепить", и что там, в строке, может быть, чтобы предпочесть VARCHAR-у БЛОБ.
или это придирка к формулировке? ну скажем тогда не "текстовый", а "бинарный состоящий в основном из символов использующихся в текстовых файлах". так пойдет?
← →
sniknik © (2014-06-23 18:30) [10]и кстати символ #90 (не помню точно, может #$90) это был, давно признак конца текстового файла... (вроде даже у нортон командера из-за этого были проблемы с русской буквой р... да, точно значит #$90)
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2015.12.13;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.002 c