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

Вниз

Запись/чтение массива в/из поле базы данных xml   Найти похожие ветки 

 
Nickolay ©   (2005-08-31 10:24) [0]

Здравствуйте!

Необходимо сначала записать массив в поле БД (компонент TClientDataSet, XML), а потом считать данные из поля в другой массив.

Сделал поле типа ftBlob с именем Arr. Потом:

var
 BlobStream   : TStream;
 BlobField    : TField;
 Buff, Buff2  : array[0..999] of LongInt;

...

// пишем
 ClientDataSet1.Append;
 BlobField := ClientDataSet1.FieldByName("Arr");
 BlobStream := ClientDataSet1.CreateBlobStream(BlobField, bmWrite);
 BlobStream.Write(Buff, Length(Buff));
 ClientDataSet1.Post;
 BlobStream.Free;

...

// читаем
 ClientDataSet1.Last;
 ClientDataSet1.Edit;
 BlobField := ClientDataSet1.FieldByName("Arr");
 BlobStream := ClientDataSet1.CreateBlobStream(BlobField, bmRead);
 BlobStream.Read(Buff2, Length(Buff2));
 BlobStream.Free;

...

Но при проверке выясняем, что значения массивов Buff и Buff2 не равны друг другу! Где ошибка?

Спасибо!


 
Desdechado ©   (2005-08-31 13:25) [1]

1. Не уверен, что Last даст переход на добавленную запись, особенно если в CDS есть активный индекс. Лучше по ключу Locate делать.
2. Не ясно, для чего делать Edit перед чтением
3. Не уверен, но имхо BlobStream.Free перед Post делать надо, в обратной последовательности у меня глюки были


 
Nickolay ©   (2005-08-31 14:36) [2]

1. А как по ключу Locate делать? И, зачем так?

2. Прогнал :)

3. Именно :) Поставил перед Post - сразу заработало! Видимо, когда Free делаешшь он из буфера информацию в базу данных загоняет. Но может и по другой причине...
Кстати, ведь второй параметр в Read и Write - число байт. Т. к. тип у меня LongInt, то нужно было писать не Length(Buff), а 4 * Length(Buff)!

Спасибо за помощь!


 
Desdechado ©   (2005-08-31 15:53) [3]

1. Locate( ключевое поле, значение, ...) Что именно не понятно? Или нет ключевого поля?
3. Тогда уж не 4*(...), а SizeOf( LongInt ) * (...)



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

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

Наверх




Память: 0.47 MB
Время: 0.047 c
6-1118922215
ilias1979
2005-06-16 15:43
2005.10.16
pop3 получение вложения


14-1127233665
ocean
2005-09-20 20:27
2005.10.16
Бывает ли такое?


2-1127221966
umbra
2005-09-20 17:12
2005.10.16
модифицирующий себя компонент


1-1126647870
saNat
2005-09-14 01:44
2005.10.16
Сообщение ОС при обращении к недоступному диску


2-1126616707
Гость22
2005-09-13 17:05
2005.10.16
В чем ошибка?