powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / FireBird+BLOB+Dynamic Array - не работает
13 сообщений из 38, страница 2 из 2
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
13 сообщений из 38, страница 2 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / FireBird+BLOB+Dynamic Array - не работает
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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