|
|
|
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?fid=40&msg=32626673&tid=1578034]: |
0ms |
get settings: |
6ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
199ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
| others: | 181ms |
| total: | 455ms |

| 0 / 0 |
