powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / FireBird+BLOB+Dynamic Array - не работает
38 сообщений из 38, показаны все 2 страниц
FireBird+BLOB+Dynamic Array - не работает
    #32625556
shulgin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте уважаемые.
Замучился я с одной задачкой.

Цель:
записать динамический массив в BLOB поле
таблицы FireBird'a

Мой код:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
type TBuffer = packed record  
  values:array of array[ 0 .. 1 ] of word;  
  DTime:TdateTime;
end;

 //-----------------------
 
var i, cnt:integer;
 arrStream:TMemoryStreAm;

 Save_Buffer:TBuffer;
 //-----------------------
 

 if SizeOf(save_buffer) >  0  then
 begin
   arrStream:= TMemoryStream.Create;
   arrStream.Clear;
   arrStream.Position :=  0 ;
   arrStream.Write(save_buffer,SizeOf(save_buffer));
   arrStream.Position :=  0 ;
   with IBTable do
   begin
     Active:=true;
     insert;
     (fieldbyname('VALUE') as TBlobField).LoadFromStream(ArrStream);
     post;
     Active:=false;
   end;
   IBtable.ApplyUpdates;
   arrStream.free;
 end;
//-----------------------

скрипт для создания таблицы

Код: plaintext
CREATE TABLE LIVE ( "VALUE"  BLOB SUB_TYPE  0  SEGMENT SIZE  80 );

В результате выполнения имеем:

1. Ругaнь
-------------------------
Dynamic SQL Error
SQL error code -104
Unexpected end of command
-------------------------
2. Записи в табличку пишутся, НО
НЕ удаляются даже средстваим IBExpert

Отсюда вопросы:

1. Корректен ли код
2. Почему записи не удаляются
3. Как сделать считывание из BLOBa обратно в динамический массив.

Заранее спасибо.
...
Рейтинг: 0 / 0
FireBird+BLOB+Dynamic Array - не работает
    #32625597
Фотография mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
if SizeOf(save_buffer) >  0  then 
begin

- ну, что это такое? Это же ссылка на объект, она всегда 4 байта размером...

Код: plaintext
arrStream.Write(save_buffer,SizeOf(save_buffer));

- см.выше

Дальше уже можно ничего не говорить...
...
Рейтинг: 0 / 0
FireBird+BLOB+Dynamic Array - не работает
    #32625609
shulgin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
To mv
А как правильно ?
...
Рейтинг: 0 / 0
FireBird+BLOB+Dynamic Array - не работает
    #32625627
Фотография mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ой, что это я - у Вас же не объект, а запись...

Ну, все равно - она у вас ВСЕГДА фиксированного размера. Нужно анализировать размер поля записи. Например:

Length(Save_Buffer.values);
...
Рейтинг: 0 / 0
FireBird+BLOB+Dynamic Array - не работает
    #32625634
shulgin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
To mv
Сейчас проверю
...
Рейтинг: 0 / 0
FireBird+BLOB+Dynamic Array - не работает
    #32625663
shulgin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
To mv
ошибка, замеченная вами, в моём случае не критична (пока),
но всё равно спасибо,
у меня почему то при выполнении оператора Post
вылазит ошибка, указанная выше

with IBTable do
begin
Active:=true;
insert;
(fieldbyname('VALUE') as TBlobField).LoadFromStream(ArrStream);
post ; Вот здесь ругается - SQL error = -104
Active:=false;
end;
...
Рейтинг: 0 / 0
FireBird+BLOB+Dynamic Array - не работает
    #32625665
Фотография Johnmen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>mv
>- ну, что это такое? Это же ссылка на объект, она всегда 4 байта размером...

Не надо горячиться...:) Ты не прав.
...
Рейтинг: 0 / 0
FireBird+BLOB+Dynamic Array - не работает
    #32625678
Фотография mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извините, уважаемый, ну, конечно, может, это не мое дело, но может быть, раз уж Вы используете IBX, быдем использовать TIBDataSet вместо TIBTable? Вот и Борланды советыют это...
Я довольно долго пользовался IBX - ами. Классные. Только не забудьте Update 7.08 поставить.
...
Рейтинг: 0 / 0
FireBird+BLOB+Dynamic Array - не работает
    #32625699
shulgin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to mv
Уже качаю IBX 7.08 для Delphi 7
Обновлю IBX и попробую воспользоваться вашим советом
...
Рейтинг: 0 / 0
FireBird+BLOB+Dynamic Array - не работает
    #32625733
Фотография Johnmen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>shulgin

В хелпе, который по F1, по методу CreateBlobStream есть даже пример, как надо писать...:)
...
Рейтинг: 0 / 0
FireBird+BLOB+Dynamic Array - не работает
    #32625753
Фотография mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Johmen


Не надо горячиться...:) Ты не прав.

А что не так?
...
Рейтинг: 0 / 0
FireBird+BLOB+Dynamic Array - не работает
    #32625771
Фотография Johnmen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mvА что не так?

Save_Buffer никакая не "ссылка на объект", а переменная типа TBuffer.
И её SizeOf = 12 вполне понятен.
:)
...
Рейтинг: 0 / 0
FireBird+BLOB+Dynamic Array - не работает
    #32625780
Фотография mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А, ну я уже поправился...
...
Рейтинг: 0 / 0
FireBird+BLOB+Dynamic Array - не работает
    #32625789
Фотография Johnmen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извини. Я не заметил...
...
Рейтинг: 0 / 0
FireBird+BLOB+Dynamic Array - не работает
    #32625809
shulgin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Чего то у меня обновления не ставятся

Скачал http://www.ibase.ru/v6/ibx708del.zip

Запустил

Перезагрузился

Читаю
Place the additional package code in the source directory of your Bold install.
Open the Bold40D7IB.dpk package
and compile it. The updated dcu and package will be
placed in the correct relative directory.

и нигде не могу найти Bold40D7IB.dpk
...
Рейтинг: 0 / 0
FireBird+BLOB+Dynamic Array - не работает
    #32625859
shulgin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
БАлин, домой все ушли что-ли ...
...
Рейтинг: 0 / 0
FireBird+BLOB+Dynamic Array - не работает
    #32625881
Фотография Johnmen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да не ставь ты этот Болд ! Нахрена он тебе ?
И глянь пост от "сегодня, 16:25"
:)
...
Рейтинг: 0 / 0
FireBird+BLOB+Dynamic Array - не работает
    #32625941
shulgin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Какой модуль нужно подключить к проекту
чтобы делфи не ругалась Undeclared identifier: 'TIBBlobStream'
...
Рейтинг: 0 / 0
FireBird+BLOB+Dynamic Array - не работает
    #32625952
Фотография mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBBlob !

Не забывай про Delphi Help!
...
Рейтинг: 0 / 0
FireBird+BLOB+Dynamic Array - не работает
    #32625954
shulgin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уже нашёл

Но опять неувязочка

//-------------------
var i, cnt:integer;
arrStream:TMemoryStreAm;
IBBlob: TIBBlobStream;
//-------------------


with IBTable do
begin
Active:=true;
insert;
IBBlob:= IBTable.CreateBlobStream(IBTable.FieldByName('value'), bmReadWrite); << тут ругается Incompatible types: 'TIBBlobStream' and 'TStream'
IBblob.CopyFrom(arrStream, arrStream.Size);
post;
Active:=false;
end;
...
Рейтинг: 0 / 0
FireBird+BLOB+Dynamic Array - не работает
    #32625963
shulgin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
To mv

Кстати о help

У вас нигде не завалялся файл ibx.hlp

А то у меня его нет не в установленной Delphi не в Distrib
...
Рейтинг: 0 / 0
FireBird+BLOB+Dynamic Array - не работает
    #32625972
Фотография mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
 //-------------------
 

var  IBBlob: TStream;
 //-------------------
 



with IBTable do begin
  Active:=true;
  insert;
  IBBlob:= IBTable.CreateBlobStream(IBTable.FieldByName('value'), bmReadWrite);     
  IBblob.CopyFrom(arrStream, arrStream.Size);
  post;
  Active:=false;
end

????
...
Рейтинг: 0 / 0
FireBird+BLOB+Dynamic Array - не работает
    #32625983
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кстате, работает [src delphi]. пользуйтесь плз
...
Рейтинг: 0 / 0
FireBird+BLOB+Dynamic Array - не работает
    #32625985
Фотография mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мыло проверь.
...
Рейтинг: 0 / 0
FireBird+BLOB+Dynamic Array - не работает
    #32625998
shulgin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проверять уже сегодня некогда
Домой побежал
Завтра отпишусь
...
Рейтинг: 0 / 0
FireBird+BLOB+Dynamic Array - не работает
    #32626326
shulgin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вернёмся к нашим баранам ...

Как же мне всё таки узнать размер >>>Save_Buffer<<< :TBuffer;

//----------------------
Напоминаю, что
type TBuffer = packed record
values:array of array[0..1] of word;
DTime:TdateTime;
end;
//----------------------

P.S. Ошибку SQL=-104 поборол путём создания новой таблички,
видимо старая табличка в ходе зверских экспериментов над ней
сбойнула.
...
Рейтинг: 0 / 0
FireBird+BLOB+Dynamic Array - не работает
    #32626330
shulgin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ещё один глюк...

Записи из таблицы не удаляются ...

IBExpert пишет
-----------------------------
Invalid Tokien
Dynamic SQL Error
SQL error code = -104 опять
Unexpected end of command
-----------------------------
...
Рейтинг: 0 / 0
FireBird+BLOB+Dynamic Array - не работает
    #32626510
vis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shulginЕщё один глюк...

Записи из таблицы не удаляются ...

IBExpert пишет
-----------------------------
Invalid Tokien
Dynamic SQL Error
SQL error code = -104 опять
Unexpected end of command
-----------------------------

приведи текст запроса
...
Рейтинг: 0 / 0
FireBird+BLOB+Dynamic Array - не работает
    #32626673
shulgin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to vis
У меня нет текста запроса ...
Я просто в IBExpert открываю таблицу,
Перевожу в режим Data
выбираю запись
и нажимаю на кнопку Удалить запись (-)
Тут оно и начинает ругаться
...
Рейтинг: 0 / 0
FireBird+BLOB+Dynamic Array - не работает
    #32626973
Фотография mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нт ли у тебя триггеров, в которых при удалении формируется и пытается выполниться динамический запрос?
...
Рейтинг: 0 / 0
FireBird+BLOB+Dynamic Array - не работает
    #32627285
shulgin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробую вкраце описать текущее состояние

База создана с нуля ...
В ней всего две таблицы

Вот скрипты создания:
CREATE TABLE LV_TABLE (
FLD1 FLOAT NOT NULL,
FLD2 BLOB SUB_TYPE 0 SEGMENT SIZE 80
);
CREATE TABLE R130_SOP (
NUMREM INTEGER,
NUMALG INTEGER,
NUMIN INTEGER
);

Пишу в базу примерно следующим кодом:
//-------------------------
type TBuffer = array of array[0..1] of word;
Save_Buffer:TBuffer;
sz:word;
IBTable привязан к LV_TABLE
//-------------------------

lg:= 2*sizeOf(sz)*length(save_buffer);

if lg > 0 then
begin
with IBTable do
begin
open;
insert;
IBBlob := IBTable.CreateBlobStream(IBTable.FieldByName('FLD2'), bmWrite);
IBBlob.Write(save_buffer[0,0], lg );
IBTable.FieldByName('FLD1').asfloat:=now;
post;
Active:=false;
end;
end;


При попытке удалить записи при помощи IBExpert
сначала ругается
-------------------------------
Can not delete record !
There is at least one record with same fields values
-------------------------------
а при последующих попытках
-----------------------------
Invalid Tokien
Dynamic SQL Error
SQL error code = -104 опять
Unexpected end of command
-----------------------------

Почему не пойму ...
...
Рейтинг: 0 / 0
FireBird+BLOB+Dynamic Array - не работает
    #32628012
Tonny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не знаю, что неправильно на уровне SQL, но некорректен код:

type TBuffer = array of array[0..1] of word;
Save_Buffer:TBuffer;

IBBlob.Write(save_buffer[0,0], lg );

так как динамический массив - это не непрерывная область памяти, и элемент
save_buffer[0,0] не указывает на область памяти с данными массива.
Вариант реализации:
выделяете непрерывную область памяти с помощью GetMem, в неё перегоняете содержимое динамического массива, а уже потом её записываете с помощью IBBlob.Write.
...
Рейтинг: 0 / 0
FireBird+BLOB+Dynamic Array - не работает
    #32628346
shulgin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to Tonny

Возможно код некорректен, но
данные с помощью него записанные,
прекрасно читаются следующим кодом:
var i, cnt:integer;
arrStream:TMemoryStreAm;
lg:integer;
IBBlob: TStream;

begin
with IBTable do
begin
Active := true;
first;
IBBlob := IBTable.CreateBlobStream(IBTable.FieldByName('FLD2'), bmReadWrite);
lg := IBBlob.Size;
save_buffer:= nil;
setLength(save_buffer, lg div 4);

IBBlob.Position:=0;
IBBlob.Read(save_buffer[0,0],lg);

for i:=low(save_buffer) to high(save_buffer) do вывести на экран

ibblob.Free;
end;
...
Рейтинг: 0 / 0
FireBird+BLOB+Dynamic Array - не работает
    #32628769
shulgin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что, нет больше специалистов по Fb & Delphi ?!
...
Рейтинг: 0 / 0
FireBird+BLOB+Dynamic Array - не работает
    #32629193
Фотография mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Похоже, ты всех уморил...
...
Рейтинг: 0 / 0
FireBird+BLOB+Dynamic Array - не работает
    #32629300
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поток пишет данные в поле при своём уничтожении, т.е. нужно делать

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
with IBTable do begin
  Active:=true;
  insert;
  IBBlob:= IBTable.CreateBlobStream(IBTable.FieldByName('value'), bmReadWrite);     
  IBblob.CopyFrom(arrStream, arrStream.Size);

  IBblob.Free;

  post;
  Active:=false;
end
...
Рейтинг: 0 / 0
FireBird+BLOB+Dynamic Array - не работает
    #32632657
shulgin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вобщем решил я проблему, если кому интересно, дайте знать,
напишу.
...
Рейтинг: 0 / 0
FireBird+BLOB+Dynamic Array - не работает
    #32663347
Leha_LLL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shulginВобщем решил я проблему, если кому интересно, дайте знать,
напишу.


интересно. Напиши, пож-та. А то у меня похожая проблемка.
...
Рейтинг: 0 / 0
38 сообщений из 38, показаны все 2 страниц
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / FireBird+BLOB+Dynamic Array - не работает
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]