Конференция "Базы" » Сохранить список целых чисел в поток в BLOB поле [D7, Firebird]
 
  • Anthony68 (25.11.11 23:46) [0]
    Скачал из интернета компонент, позволяющий хранить в списке целые числа,
    работает также как TStringList, но не со строками, а с числами.
    И вот не могу сообразить как сохранить целый компонент со списком чисел в BLOB-поле
    таблицы базы данных. Пробовал это сделать так:

    var
     Stream: TStream;
     IntList: TxIntegerList;
    begin
     IntList := TxIntegerList.Create;
     Stream := DataSet1.CreateBlobStream(
       DataSet1.FieldByName('BLOB_FIELD',
       bmWrite); // DataSet1 - уже открытый датасет, где есть BLOB поле 'BLOB_FIELD'
     IntList.Add(10); // добавил в список одно число
     Stream.Write(IntList, SizeOf(IntList)); // сохраняю IntList в потоке...
     Stream.Free;
     IntList.Free;
    end;


    A считать данные из BLOB-поля обратно в компонент думал так:

    ...
     Stream := DataSet1.CreateBlobStream(DataSet1.FieldByName('BLOB_FIELD', bmRead);
    ...
     Stream.Read(IntList, Stream.Size);
    ...


    Это не работает... Подскажите, как написать правильно?
  • Плохиш © (26.11.11 00:54) [1]
    Перед изменениями набор данных, обычно, переводят в режим редактирования, а после изменений, производится подтверждения сохранения.
  • Anthony68 (26.11.11 07:04) [2]
    Прошу прощения, методы Edit и Post датасета - были применены, я забыл их скопировать из моего кода.
    Я после записи с помощью StreamWrite - потом смотрел внутри таблиц базы - в BLOB - поле - легли данные... Не получается их считать. Сразу после Stream.Read(IntList, Stream.Size) проверяю количество записей IntList.Count = 0
    Чего-то с потоками я не понимаю...
  • DiamondShark © (26.11.11 14:42) [3]

    > Скачал из интернета компонент, позволяющий хранить в списке целые числа,

    Дальше можно  было бы и не читать.


    >  Stream.Write(IntList, SizeOf(IntList)); // сохраняю IntList в потоке...

    Фига там сохраняется, а не IntList. Посмотри (и постарайся понять) справку по TStream.Write


    >  Stream.Read(IntList, Stream.Size);

    Тебе очень сильно поыезло, что после этой строчки вообще хоть что-то работает.
    Посмотри (и постарайся понять) справку по TStream.Read


    > Подскажите, как написать правильно?

    Чтобы писать правильно, надо понимать, как работают применяемые тобой языковые конструкции и библиотечные компоненты.
    Программирование -- это понимание, а не произнесение заклинаний.

    В данном случае, "как правильно" написано в справке по TStream. Есть, правда, неприятный момент: написанное там предполагает знание других базовых понятий. Например, что такое "переменная", "компонент", "параметр процедуры". Судя по твоему коду, у тебя это знание отсутствует полностью, программирование для тебя -- это тёмная магия, заключающаяся в выписывании непонятных заклинаний из непонятных алхимических манускриптов.
 
Конференция "Базы" » Сохранить список целых чисел в поток в BLOB поле [D7, Firebird]
Есть новые Нет новых   [134431   +10][b:0][p:0.001]