Форум: "Базы";
Текущий архив: 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