![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Раскажите неумному как записать в поток... [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]>для дальнейшего использования.
какого именно? При следующем запуске программы?