|
|
|
FireBird+BLOB+Dynamic Array - не работает
|
|||
|---|---|---|---|
|
#18+
Здравствуйте уважаемые. Замучился я с одной задачкой. Цель: записать динамический массив в 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. скрипт для создания таблицы Код: plaintext В результате выполнения имеем: 1. Ругaнь ------------------------- Dynamic SQL Error SQL error code -104 Unexpected end of command ------------------------- 2. Записи в табличку пишутся, НО НЕ удаляются даже средстваим IBExpert Отсюда вопросы: 1. Корректен ли код 2. Почему записи не удаляются 3. Как сделать считывание из BLOBa обратно в динамический массив. Заранее спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2004, 15:31:50 |
|
||
|
FireBird+BLOB+Dynamic Array - не работает
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. - ну, что это такое? Это же ссылка на объект, она всегда 4 байта размером... Код: plaintext - см.выше Дальше уже можно ничего не говорить... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2004, 15:43:33 |
|
||
|
FireBird+BLOB+Dynamic Array - не работает
|
|||
|---|---|---|---|
|
#18+
To mv А как правильно ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2004, 15:47:30 |
|
||
|
FireBird+BLOB+Dynamic Array - не работает
|
|||
|---|---|---|---|
|
#18+
Ой, что это я - у Вас же не объект, а запись... Ну, все равно - она у вас ВСЕГДА фиксированного размера. Нужно анализировать размер поля записи. Например: Length(Save_Buffer.values); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2004, 15:51:16 |
|
||
|
FireBird+BLOB+Dynamic Array - не работает
|
|||
|---|---|---|---|
|
#18+
To mv Сейчас проверю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2004, 15:53:50 |
|
||
|
FireBird+BLOB+Dynamic Array - не работает
|
|||
|---|---|---|---|
|
#18+
To mv ошибка, замеченная вами, в моём случае не критична (пока), но всё равно спасибо, у меня почему то при выполнении оператора Post вылазит ошибка, указанная выше with IBTable do begin Active:=true; insert; (fieldbyname('VALUE') as TBlobField).LoadFromStream(ArrStream); post ; Вот здесь ругается - SQL error = -104 Active:=false; end; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2004, 16:02:04 |
|
||
|
FireBird+BLOB+Dynamic Array - не работает
|
|||
|---|---|---|---|
|
#18+
>mv >- ну, что это такое? Это же ссылка на объект, она всегда 4 байта размером... Не надо горячиться...:) Ты не прав. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2004, 16:04:28 |
|
||
|
FireBird+BLOB+Dynamic Array - не работает
|
|||
|---|---|---|---|
|
#18+
Извините, уважаемый, ну, конечно, может, это не мое дело, но может быть, раз уж Вы используете IBX, быдем использовать TIBDataSet вместо TIBTable? Вот и Борланды советыют это... Я довольно долго пользовался IBX - ами. Классные. Только не забудьте Update 7.08 поставить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2004, 16:10:06 |
|
||
|
FireBird+BLOB+Dynamic Array - не работает
|
|||
|---|---|---|---|
|
#18+
to mv Уже качаю IBX 7.08 для Delphi 7 Обновлю IBX и попробую воспользоваться вашим советом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2004, 16:16:25 |
|
||
|
FireBird+BLOB+Dynamic Array - не работает
|
|||
|---|---|---|---|
|
#18+
>shulgin В хелпе, который по F1, по методу CreateBlobStream есть даже пример, как надо писать...:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2004, 16:25:54 |
|
||
|
FireBird+BLOB+Dynamic Array - не работает
|
|||
|---|---|---|---|
|
#18+
2 Johmen Не надо горячиться...:) Ты не прав. А что не так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2004, 16:33:08 |
|
||
|
FireBird+BLOB+Dynamic Array - не работает
|
|||
|---|---|---|---|
|
#18+
mvА что не так? Save_Buffer никакая не "ссылка на объект", а переменная типа TBuffer. И её SizeOf = 12 вполне понятен. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2004, 16:38:45 |
|
||
|
FireBird+BLOB+Dynamic Array - не работает
|
|||
|---|---|---|---|
|
#18+
А, ну я уже поправился... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2004, 16:41:35 |
|
||
|
FireBird+BLOB+Dynamic Array - не работает
|
|||
|---|---|---|---|
|
#18+
Извини. Я не заметил... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2004, 16:44:29 |
|
||
|
FireBird+BLOB+Dynamic Array - не работает
|
|||
|---|---|---|---|
|
#18+
Чего то у меня обновления не ставятся Скачал 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2004, 16:50:13 |
|
||
|
FireBird+BLOB+Dynamic Array - не работает
|
|||
|---|---|---|---|
|
#18+
БАлин, домой все ушли что-ли ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2004, 17:06:57 |
|
||
|
FireBird+BLOB+Dynamic Array - не работает
|
|||
|---|---|---|---|
|
#18+
Да не ставь ты этот Болд ! Нахрена он тебе ? И глянь пост от "сегодня, 16:25" :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2004, 17:15:12 |
|
||
|
FireBird+BLOB+Dynamic Array - не работает
|
|||
|---|---|---|---|
|
#18+
Какой модуль нужно подключить к проекту чтобы делфи не ругалась Undeclared identifier: 'TIBBlobStream' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2004, 17:32:17 |
|
||
|
FireBird+BLOB+Dynamic Array - не работает
|
|||
|---|---|---|---|
|
#18+
IBBlob ! Не забывай про Delphi Help! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2004, 17:35:54 |
|
||
|
FireBird+BLOB+Dynamic Array - не работает
|
|||
|---|---|---|---|
|
#18+
Уже нашёл Но опять неувязочка //------------------- 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; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2004, 17:36:20 |
|
||
|
FireBird+BLOB+Dynamic Array - не работает
|
|||
|---|---|---|---|
|
#18+
To mv Кстати о help У вас нигде не завалялся файл ibx.hlp А то у меня его нет не в установленной Delphi не в Distrib ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2004, 17:40:14 |
|
||
|
FireBird+BLOB+Dynamic Array - не работает
|
|||
|---|---|---|---|
|
#18+
А так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ???? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2004, 17:43:31 |
|
||
|
FireBird+BLOB+Dynamic Array - не работает
|
|||
|---|---|---|---|
|
#18+
кстате, работает [src delphi]. пользуйтесь плз ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2004, 17:47:10 |
|
||
|
FireBird+BLOB+Dynamic Array - не работает
|
|||
|---|---|---|---|
|
#18+
Мыло проверь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2004, 17:47:36 |
|
||
|
FireBird+BLOB+Dynamic Array - не работает
|
|||
|---|---|---|---|
|
#18+
Проверять уже сегодня некогда Домой побежал Завтра отпишусь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2004, 17:52:11 |
|
||
|
FireBird+BLOB+Dynamic Array - не работает
|
|||
|---|---|---|---|
|
#18+
Вернёмся к нашим баранам ... Как же мне всё таки узнать размер >>>Save_Buffer<<< :TBuffer; //---------------------- Напоминаю, что type TBuffer = packed record values:array of array[0..1] of word; DTime:TdateTime; end; //---------------------- P.S. Ошибку SQL=-104 поборол путём создания новой таблички, видимо старая табличка в ходе зверских экспериментов над ней сбойнула. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2004, 07:00:32 |
|
||
|
FireBird+BLOB+Dynamic Array - не работает
|
|||
|---|---|---|---|
|
#18+
Ещё один глюк... Записи из таблицы не удаляются ... IBExpert пишет ----------------------------- Invalid Tokien Dynamic SQL Error SQL error code = -104 опять Unexpected end of command ----------------------------- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2004, 07:14:02 |
|
||
|
FireBird+BLOB+Dynamic Array - не работает
|
|||
|---|---|---|---|
|
#18+
shulginЕщё один глюк... Записи из таблицы не удаляются ... IBExpert пишет ----------------------------- Invalid Tokien Dynamic SQL Error SQL error code = -104 опять Unexpected end of command ----------------------------- приведи текст запроса ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2004, 10:09:32 |
|
||
|
FireBird+BLOB+Dynamic Array - не работает
|
|||
|---|---|---|---|
|
#18+
to vis У меня нет текста запроса ... Я просто в IBExpert открываю таблицу, Перевожу в режим Data выбираю запись и нажимаю на кнопку Удалить запись (-) Тут оно и начинает ругаться ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2004, 11:15:46 |
|
||
|
FireBird+BLOB+Dynamic Array - не работает
|
|||
|---|---|---|---|
|
#18+
Нт ли у тебя триггеров, в которых при удалении формируется и пытается выполниться динамический запрос? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2004, 12:56:44 |
|
||
|
FireBird+BLOB+Dynamic Array - не работает
|
|||
|---|---|---|---|
|
#18+
Попробую вкраце описать текущее состояние База создана с нуля ... В ней всего две таблицы Вот скрипты создания: 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 ----------------------------- Почему не пойму ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2004, 14:34:36 |
|
||
|
FireBird+BLOB+Dynamic Array - не работает
|
|||
|---|---|---|---|
|
#18+
не знаю, что неправильно на уровне 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2004, 18:41:30 |
|
||
|
FireBird+BLOB+Dynamic Array - не работает
|
|||
|---|---|---|---|
|
#18+
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; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2004, 06:38:02 |
|
||
|
FireBird+BLOB+Dynamic Array - не работает
|
|||
|---|---|---|---|
|
#18+
Что, нет больше специалистов по Fb & Delphi ?! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2004, 10:57:56 |
|
||
|
FireBird+BLOB+Dynamic Array - не работает
|
|||
|---|---|---|---|
|
#18+
Похоже, ты всех уморил... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2004, 12:53:54 |
|
||
|
FireBird+BLOB+Dynamic Array - не работает
|
|||
|---|---|---|---|
|
#18+
Поток пишет данные в поле при своём уничтожении, т.е. нужно делать Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2004, 13:27:59 |
|
||
|
FireBird+BLOB+Dynamic Array - не работает
|
|||
|---|---|---|---|
|
#18+
Вобщем решил я проблему, если кому интересно, дайте знать, напишу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2004, 11:02:54 |
|
||
|
|

start [/forum/topic.php?all=1&fid=40&tid=1578034]: |
0ms |
get settings: |
7ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
196ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
71ms |
get tp. blocked users: |
2ms |
| others: | 205ms |
| total: | 513ms |

| 0 / 0 |
