Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2015.12.13;
Скачать: CL | DM;

Вниз

Запись и чтение строки из блоба   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.006 c
6-1277801832
Chubaka
2010-06-29 12:57
2015.12.13
Исходник прокси-сервера


15-1428581750
Кто б сомневался
2015-04-09 15:15
2015.12.13
Многопоточность


15-1428479968
Torry
2015-04-08 10:59
2015.12.13
XE8


15-1429676154
pavelnk
2015-04-22 07:15
2015.12.13
Mobile Add-On Pack for Delphi XE8 Professional


4-1274544942
allrussia
2010-05-22 20:15
2015.12.13
Перехват сообщения WM_COPY у TCombobox - не работает