Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Размер BLOB

286
03 июля 2006 года
misha_turist
572 / / 28.11.2005
Доброго времени суток.

Может кто знает, как узнать размер данных хранящихся в поле BLOB, при использовании TField????

Свойство size не подходит - оно возвращает 8 байт (как раз размер свойства Value т.к. оно типа Variant)

Сзаранее спасибо! )))
339
04 июля 2006 года
verybadbug
619 / / 12.09.2005
используй TBlobStream
286
04 июля 2006 года
misha_turist
572 / / 28.11.2005
[QUOTE=verybadbug]используй TBlobStream[/QUOTE]
Спасибо, но я эту задачу проще решил TBlobField(fields[n]).BlobSize

Теперь у меня другой вопрос, не по теме немножко, но всё равно:

Почему текст
 
Код:
stream.WriteBuffer(string('123'), 3);

пишет всё правильно, а текст
 
Код:
s:='123';
stream.WriteBuffer(string(s), length(s));

одни казябрики??

 
Код:
var s: string;
stream: TFileStream;
stream:=TFileStream.Create(FileName, fmCreate);

и почему при этом
 
Код:
Memo2.Lines.LoadFromStream(stream);

ни чего не выдаёт??
339
05 июля 2006 года
verybadbug
619 / / 12.09.2005
[QUOTE=misha_turist]Спасибо, но я эту задачу проще решил TBlobField(fields[n]).BlobSize

Теперь у меня другой вопрос, не по теме немножко, но всё равно:

Почему текст
 
Код:
stream.WriteBuffer(string('123'), 3);

пишет всё правильно, а текст
 
Код:
s:='123';
stream.WriteBuffer(string(s), length(s));

одни казябрики??[/QUOTE]

строки в поток надо писать так:
 
Код:
var
  s: string;
begin
  s := '123';
  stream.writebuffer(s[1], length(s));
end;

это связано со спецификой организации строк (string) в делфи

[QUOTE=misha_turist]
 
Код:
var s: string;
stream: TFileStream;
stream:=TFileStream.Create(FileName, fmCreate);

и почему при этом
 
Код:
Memo2.Lines.LoadFromStream(stream);

ни чего не выдаёт??[/QUOTE]

здесь при выполнении
stream:=TFileStream.Create(FileName, fmCreate)
создается новый чистый файл
286
05 июля 2006 года
misha_turist
572 / / 28.11.2005
[QUOTE=verybadbug]строки в поток надо писать так:
здесь при выполнении
stream:=TFileStream.Create(FileName, fmCreate)
создается новый чистый файл[/QUOTE]
Так всё правильно, я старте программы создаю новый файл, при нажатии кнопки в него дописываю данные, потом загружаю их в memo и при выходе из программы удаляю поток.

Хотя скорей всего это из-за такого варианта открытия, но я пока не проверял.
10
05 июля 2006 года
Freeman
3.2K / / 06.03.2004
[QUOTE=misha_turist]Хотя скорей всего это из-за такого варианта открытия, но я пока не проверял.[/QUOTE]
Надеюсь, Position := 0 не забыл?
547
05 июля 2006 года
Hydra
488 / / 20.06.2006
Цитата:

Хотя скорей всего это из-за такого варианта открытия, но я пока не проверял.



Читать можно только из потоков открытых fmOpenRead и fmReadWrite.
Для чтения из созданного файла - его закрыть надо, или открыть в другом потоке, предварительно пофлушав буфера.

339
06 июля 2006 года
verybadbug
619 / / 12.09.2005
[QUOTE=misha_turist]Так всё правильно, я старте программы создаю новый файл, при нажатии кнопки в него дописываю данные, потом загружаю их в memo и при выходе из программы удаляю поток.

Хотя скорей всего это из-за такого варианта открытия, но я пока не проверял.[/QUOTE]
а нахрена тебе создавать файл при СТАРТЕ программы.... по моему проще создать TMemoryStream.... с ним в проге и работать (и читать, и писАть).... а если в конце концов сохранить его в файл надо - используй Stream.SaveToFile
339
06 июля 2006 года
verybadbug
619 / / 12.09.2005
и ещё по поводу строк и потоков
для чтения строки из потока нужно установить её длину SetLength(S, Size)
а затем считать Stream.ReadBuffer(S[1], Size)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог