Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Раскажите неумному как записать в поток... [D6, Win2k]


denis24 ©   (2004-06-23 13:38:00) 

Есть датасет,В цикле хочу записать пару столбцов в поток(чтоб не создавать временную бд) для дальнейшего использования.
Так вот .Как записывать в поток ,какой класс потока применить (TstringStream,TmemoryStream....)
Как пото м считать из него выбирая значения этих полей?


denis24   (2004-06-23 17:17:00) [1]

Спасибо Digitman-u за подробное обьяснение.Точно.


Digitman   (2004-06-23 17:07:00) [2]


> denis24   (23.06.04 16:48) [10]


> Почему у меня в поток не пишется?


потому что ты не видишь разницы между ShortString (статика) и LargeString (динамика)

var len: Integer;
..
//записываем строку
s1:=....FieldByName('bin').Asstring;
len := length(s1); //в буфер - длину строки
tempstream.WriteBuffer(len,SizeOf(len)); //пишем в поток длину строки
tempstream.WriteBuffer(PChar(s1)^,len); //пишем в поток собственно строку длиной len символов

..
//считываем строку
tempstream.ReadBuffer(len,SizeOf(len)); //читаем из потока длину строки
SetLength(S1, len);
tempstream.ReadBuffer(PChar(s1)^,len); //читаем из потока  собственно строку длиной len символов


Sandman25   (2004-06-23 17:02:00) [3]

[10] denis24   (23.06.04 16:48)

Лучше воспользуйтесь советом [9] Digitman ©   (23.06.04 15:09)
чтобы не гонять данные через дополнительный бфер


denis24   (2004-06-23 16:48:00) [4]

Почему у меня в поток не пишется?
s1:=....FieldByName('bin').Asstring;
tempstream.WriteBuffer(s1,length(s1));

проверяю заисью в файл
tempstream.savetofile('111');
и он пустой


Digitman   (2004-06-23 15:09:00) [5]


> Как их определить по значению поля ?


см. TField.Size, TField.GetData()


Sandman25   (2004-06-23 15:08:00) [6]

S := MyField.AsString;
MemoryStream.WriteBuffer(PChar(S), Length(S));


denis24   (2004-06-23 15:03:00) [7]

а как в него записать?
там есть функция tmemory.write(buffer,count) где count кол-во байтов.Как их определить по значению поля ?


Sandman25   (2004-06-23 14:51:00) [8]

Тогда TMemory IMHO


denis24   (2004-06-23 14:49:00) [9]

не спорю
но мне потом в quickreport в streamband.loadfromstream() надо


Sandman25   (2004-06-23 14:02:00) [10]

[3] denis24   (23.06.04 14:00)

Я обычно в таком случае использую динамические массивы, очень удобно.


denis24   (2004-06-23 14:00:00) [11]

в этом же сеансе програмы.Для создания отчета.
Поля стринговые.


Digitman   (2004-06-23 13:55:00) [12]


> Как записывать в поток


в цикле пройдись по всем записям НД, считывай значение поля и записывай в поток


> какой класс потока применить (TstringStream,TmemoryStream....)


зависит от типа поля


Sandman25   (2004-06-23 13:52:00) [13]

>для дальнейшего использования.

какого именно? При следующем запуске программы?


Наверх

Титульная страница Поиск, карта сайта Написать письмо