Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1428479968
Torry
2015-04-08 10:59
2015.12.13
XE8


2-1403515896
Imagination
2014-06-23 13:31
2015.12.13
Исчезает картинка


2-1403426580
Sakipiel
2014-06-22 12:43
2015.12.13
Запись и чтение строки из блоба


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


15-1429368615
картман
2015-04-18 17:50
2015.12.13
Sha для CtrlAlt.ru





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский