Главная страница
    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.45 MB
Время: 0.032 c
2-1127097538
antikaban
2005-09-19 06:38
2005.10.16
Открытие файла


1-1127658051
bravo_elf
2005-09-25 18:20
2005.10.16
Нужна помощь с Delphi Architect 2005


3-1125569408
Маленький мук
2005-09-01 14:10
2005.10.16
Поле TIME в таблице PARADOX - как обратиться в запросе?


3-1125513802
Knight
2005-08-31 22:43
2005.10.16
Как можно сохранить в базе текст с картинками?


1-1127472417
DelphiLexx
2005-09-23 14:46
2005.10.16
Соединение TImage линиями и их движение





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский