Главная страница
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.023 c
4-1086095708
Long
2004-06-01 17:15
2004.07.11
Как послать WM_SYSCOMMAND,SC_RESTORE окну, которое


14-1087926324
Profi
2004-06-22 21:45
2004.07.11
Помогите выбрать резак


14-1088150665
AlexG
2004-06-25 12:04
2004.07.11
Переводчики с иностранного..


9-1080296782
<<BEAST>>
2004-03-26 13:26
2004.07.11
GLScene ODE и прикрепление сил к ODE объектам.


3-1087278970
Older22
2004-06-15 09:56
2004.07.11
Кто отвечал мне спасибо но проблемма нерешена