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

Вниз

Раскажите неумному как записать в поток...   Найти похожие ветки 

 
denis24   (2004-06-23 13:38) [0]

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


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

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

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


 
Digitman ©   (2004-06-23 13:55) [2]


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


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


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


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


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

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


 
Sandman25 ©   (2004-06-23 14:02) [4]

[3] denis24   (23.06.04 14:00)

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


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

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


 
Sandman25 ©   (2004-06-23 14:51) [6]

Тогда TMemory IMHO


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

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


 
Sandman25 ©   (2004-06-23 15:08) [8]

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


 
Digitman ©   (2004-06-23 15:09) [9]


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


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


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

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

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


 
Sandman25 ©   (2004-06-23 17:02) [11]

[10] denis24   (23.06.04 16:48)

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


 
Digitman ©   (2004-06-23 17:07) [12]


> 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 символов


 
denis24   (2004-06-23 17:17) [13]

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



Страницы: 1 вся ветка

Текущий архив: 2004.07.11;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.04 c
1-1087988428
Сашка
2004-06-23 15:00
2004.07.11
Отлов расстыковки


1-1088153673
lEFT men
2004-06-25 12:54
2004.07.11
Координаты курсора в тексте


3-1087029221
Юрий
2004-06-12 12:33
2004.07.11
dbExpress


1-1088061257
ashnurov
2004-06-24 11:14
2004.07.11
Передача файла по сети


1-1087905753
AlexG
2004-06-22 16:02
2004.07.11
Action из DLL