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

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

Кто смогёт или А и В сидели на трубе. [D5, Paradox]


Ivanko ©   (2002-08-09 19:40:00) 

В таблице 3 поля А, В и С типа Formatted Meмo. В А и Б содержится куски текста в формате RTF (отформатированного), в ячейку поля С надо записать их вместе, допустим сначала идет текст из А, а затем из B.


Desdechado   (2002-08-12 13:09:00) [1]

навскидку, не проверял, но общее направление такое:

var
oBlobAB, oBlobC: TStream;
Buff: PChar;
nSize: Integer;
begin
qryC.Edit;
oBlobC := CreateBlobStream( qryC.FieldByName( "C" ) As TBlobField, bmWrite );
oBlobAB := CreateBlobStream( qryAB.FieldByName( "A" ) As TBlobField, bmRead );
oBlobC.CopyFrom( oBlobAB, 0 );
oBlobAB.Free;
oBlobAB := CreateBlobStream( qryAB.FieldByName( "B" ) As TBlobField, bmRead );
nSize := oBlobAB.Size;
GetMem( Buff, nSize );
oBlobAB.Read( Buff^, nSize );
oBlobAB.Free;
oBlobC.Seek( 0, soFromEnd );
oBlobC.Write( Buff^, nSize );
FreeMem( Buff, nSize );
oBlobC.Free;
qryC.Post;
end;

не забудь обработать возможные ошибки :)

а вообще-то не ясно, зачем одно и тоже хранить в БД дважды, особенно блобы


Ivanko   (2002-08-11 20:09:00) [2]

Desdechado, я по образованию мостостроитель, так что не обессудь и направь в русло (вставляется только 1 часть из 2-х)

var str1: Tmemorystream;
str2: TBlobstream;
Buffer: Pchar;
MemSize: Integer;
begin
str1:=Tmemorystream.create;
str2:=TBlobStream.Create(query1B as TBlobField, bmRead);

(query1A as TBlobField).savetostream(str1);
MemSize := Str2.Size;
Inc(MemSize);
Buffer := AllocMem(MemSize);
Str2.Read(Buffer^, MemSize);
Str1.Seek(0, 2);
Str1.Write(buffer, memsize);

Query1.Edit;
(query1N3 as TBlobField).Loadfromstream(str1);
Query1.post;

FreeMem(Buffer, MemSize);
Str1.Free;
Str2.Free;
end;


Desdechado   (2002-08-10 18:42:00) [3]

а вопрос в чем?
если умеешь писать в мемо А (или Б), точно так же и в С.

создаешь TMemoryStream, копируешь в него содержимое блоба А (TBlobStream), добавляешь в конец содержимое блоба Б, копируешь в блоб С содержимое TMemoryStream


Наверх

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