Главная страница
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.051 c
4-1123746773
BPK
2005-08-11 11:52
2005.10.16
WM_SHOWWINDOW работает не так, как хочется


11-1108062669
Unknown Mystic
2005-02-10 22:11
2005.10.16
TVM_GETIMAGELIST в NewTreeView (модуль KOL.PAS)


9-1115116527
Zwein
2005-05-03 14:35
2005.10.16
Воспроизведение звука


3-1125647332
Леди
2005-09-02 11:48
2005.10.16
Программное создание DSN


1-1127710502
Ярослав
2005-09-26 08:55
2005.10.16
выделение прямоугольного блока