Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2005.10.16;
Скачать: [xml.tar.bz2];

Вниз

Запись/чтение массива в/из поле базы данных 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.042 c
14-1127490900
YurikGL
2005-09-23 19:55
2005.10.16
Американские русофобы


4-1124106668
Knop
2005-08-15 15:51
2005.10.16
Написать на Canvas


1-1127470767
alpine
2005-09-23 14:19
2005.10.16
Как программно скопировать папку в другу директорию ?


2-1126858358
Андрей гость
2005-09-16 12:12
2005.10.16
Разбить текстовое поле на части


14-1127207416
Ega23
2005-09-20 13:10
2005.10.16
Кто завтра будет на лекции Вирта?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский