Форум: "Основная";
Текущий архив: 2004.07.11;
Скачать: [xml.tar.bz2];
ВнизРаскажите неумному как записать в поток... Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.038 c