Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с BLOB-полями. Очень важно. 
:(
    Опции темы
BigMazy
Дата 22.2.2003, 04:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 22.2.2003

Репутация: нет
Всего: нет



Здравствуйте,
Мне очень необходио сделать следующую вешь:
Создать поле в БД, которое хранило бы сложную структуру
типа RECORD.
Как я понял, необходимо работать с потоками, типа
BlobStream, но что-то не получается.

Заранее благодарен, Александр.




PM MAIL   Вверх
Medved
Дата 23.2.2003, 01:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

Репутация: 14
Всего: 154



Типичная ошибка в 18-й строчке программы.



--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
Medved
Дата 23.2.2003, 01:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

Репутация: 14
Всего: 154



Александр, если Вы хотите получить полноценный и четкий ответ, то напишите в чем непосредственно заключается у Вас ошибка, и запостите кусочек кода, где "затыкается" компилятор.

Мы же в конце концов не экстрасенсы, чтобы видеть, где же именно у Вас "что-то не получается."


--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
BigMazy
Дата 23.2.2003, 06:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 22.2.2003

Репутация: нет
Всего: нет



Здравствуйте,
Вот, что я написал для работы с BLOB - полем:
База Данных на Paradox,
Название поля "Record",а его тип Binary

Дело в том, что какая-то информация заноситься без ошибок
компиляции, но при попытки ее считать возникают ошибки:
"Blob has been modifided" и иногда
"Record locked by another user"


type // описание структуры, которая будет заноситься в BLOB
TRec=record
a: integer;
b: string;
end;

var
BS,BS2: TStream;
buf,buf2: Trec;

begin
buf.b:='This is a BLOB';
buf.a:=1000;

// Записываю в БД структуру
Table1.First;
Table1.Edit;
BS:=Table1.CreateBlobStream(Table1.FieldByName('Record'),bmWrite);
BS.WriteBuffer(buf,Sizeof(Buf));
Table1.Post;

// Хочу получить данные из BLOB-поля
Table1.First;
Table1.Edit;
BS2:=Table1.CreateBlobStream(Table1.FieldByName('Record'),bmReadWrite);
BS2.ReadBuffer(Buf2,SizeOf(Buf));
Table1.post;
end;



PM MAIL   Вверх
Vit
Дата 23.2.2003, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 48
Всего: 207



"Blob has been modifided" - обычно свидетельствует о повреждении таблицы, обычно возникает при не аккуратной работе в многопользовательском режиме. Откройте парадокс и исправте таблицу. Впредь следите за нормальным завершением программы с закрытием таблиц и сбросом буфферов.

"Record locked by another user"
1) BDEAdministrator->Tab:Configuration->Drivers->Native->Paradox->Net Dir
Параметер должен показывать на один и тот же диск на всех машинах, использующих данную базу данных.
2) Не прерывайте программу по Ctrl-F2, Ctrl-Alt-Del. проследите чтобы при любом раскладе при выходе из программы все таблицы закрывались, все открытия на запись типа Edit/Append/Insert заканчивались либо Post либо Cancel.
3) Удалите все файлы *.lck


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
BigMazy
Дата 24.2.2003, 03:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 22.2.2003

Репутация: нет
Всего: нет



Большое Спасибо, Vit
Работает.

Только вот вопрос-
я заношу в Blob -поле некоторый текст,
а когда достаю из базы данных этот текст - он выглядит, как
набор различных символов.
Если не сложно, подскажите как получить мне преждний текст ?



PM MAIL   Вверх
Vit
Дата 24.2.2003, 03:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 48
Всего: 207



Похоже на то что вместо контекста идёт попытка запомнить указатель и в базу заноситься всякий мусор вместо реальных данных. Проверьте внимательно чтО именно вы пишете в базу. Используйте в записях короткие строки, так как обычные длинные строки могут себя вести как указатели...


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
BigMazy
Дата 26.2.2003, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 22.2.2003

Репутация: нет
Всего: нет



Спасибо большое, Vit !!!
Работает, действительно, проблема была в том, что я
использовал тип String, а не ShortString(если исользовать этот тип,
то все работает.
PM MAIL   Вверх
Vit
Дата 27.2.2003, 00:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 48
Всего: 207



Цитата(BigMazy @ 26.2.2003, 08:35)
Спасибо большое, Vit !!!
Работает, действительно, проблема была в том, что я
использовал тип String, а не ShortString(если исользовать этот тип,
то все работает.

Если всё же надо использовать длинные строки то вот как это можно сделать:

Код

var s:string;
...

pointer(s)^




--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Unregistered
Дата 1.3.2003, 00:19 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Здравствуйте, вот опять неполадки с BLOB-полями
Ниже часть кода, который должен вставить в BLOB-поле с
именем "b" массив байт signature2, а затем,
создав новый поток, извлечь информацию из этого
поля в переменную signature3,
НО в когда я пытаюсь получить значение из БД-выдается
ошибка:" BLOB not opened"

Подскажите, из-за чего ошибка
Заранее благодарен, BigMazy

var
BS1,BS2: TStream;
signature2,signature3: array[0..63] of byte;
begin

// - в Table2 - будет только 1 запись
Table2.Insert;
BS1:=Table2.CreateBlobStream(Table2.FieldByName('b'),bmReadWrite);
BS1.Write(signature2,64);
Table2.FieldByName('number').asInteger:=1;
Table2.Post;
Table2.Refresh;
BS1.Destroy;

Table2.First;
Table2.Edit;
BS2:=Table2.CreateBlobStream(Table2.FieldByName('b'),bmread);
BS2.read(signature3,64);
Table2.Post;
BS2.Destroy;
end;
  Вверх
BigMazy
Дата 1.3.2003, 00:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 22.2.2003

Репутация: нет
Всего: нет



Фу, забыл авторизироваться !

Здравствуйте, вот опять неполадки с BLOB-полями
Ниже часть кода, который должен вставить в BLOB-поле с
именем "b" массив байт signature2, а затем,
создав новый поток, извлечь информацию из этого
поля в переменную signature 3,
НО в когда я пытаюсь получить значение из БД-выдается
ошибка:" BLOB not opened"

Подскажите, из-за чего ошибка
Заранее благодарен, BigMazy

var
BS1,BS2: TStream;
signature2,signature3: array[0..63] of byte;
begin

// - в Table2 - будет только 1 запись
Table2.Insert;
BS1:=Table2.CreateBlobStream(Table2.FieldByName('b'),bmReadWrite);
BS1.Write(signature2,64);
Table2.FieldByName('number').asInteger:=1;
Table2.Post;
Table2.Refresh;
BS1.Destroy;

Table2.First;
Table2.Edit;
BS2:=Table2.CreateBlobStream(Table2.FieldByName('b'),bmread);
BS2.read(signature3,64);
Table2.Post;
BS2.Destroy;
end;
PM MAIL   Вверх
Vit
Дата 1.3.2003, 01:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 48
Всего: 207



1) Edit/post не нужны при чтении значения




--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
BigMazy
Дата 1.3.2003, 06:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 22.2.2003

Репутация: нет
Всего: нет



Я попытался, убрать POST и EDIT
Но ошибка осталась.
Я уже переписывал БД, но не помогло;

Дело в том, что не работает в том случае, если
я в одном и том же сеансе работы программы буду
выполнять и вствку BLOB-поля и и его чтение из этой же таблицы.
В случае я запущу программу занесу информацию в
BLOB-поле, затем перезапущу программу и считаю его, то все будет работать.

Table2.Insert;
BS1:=Table2.CreateBlobStream(Table2.FieldByName('b'),bmReadWrite);
BS1.Write(signature2,64);
Table2.FieldByName('number').asInteger:=1;
Table2.Post;
Table2.Refresh;
BS1.Destroy;

Table2.First;
BS2:=Table2.CreateBlobStream(Table2.FieldByName('b'),bmread);
BS2.read(signature3,64);
BS2.Destroy;
end;
PM MAIL   Вверх
Vit
Дата 1.3.2003, 08:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 48
Всего: 207



Попробуй вставить:

BS2:=Table2.CreateBlobStream(Table2.FieldByName('b'),bmread);
BS2.Seek(0,soFromBeginning);
BS2.read(signature3,64);


Вообще-то непонятно в чём проблема, попробуй поставить вместо буффера короткую строку и посмотри - вообще что-то пишеться в базу и может ли прочитаться


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
BigMazy
Дата 1.3.2003, 18:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 22.2.2003

Репутация: нет
Всего: нет



Здравствуйте,
поставил
BS2:=Table2.CreateBlobStream(Table2.FieldByName('b'),bmread);
BS2.Seek(0,soFromBeginning);
BS2.read(signature3,64);
но ошибка осталась.

В BLOB поле заноситься значение ShortString,
и читается тоже.

Я сегодня обнаружил, что если после записи
закрыть таблицу, а затем снова открыть, то все работает:

Может быть после вставки информации в BLOB таблица каким-то
образом блокируется ?

Table2.Insert;
Table2.FieldByName('number').asInteger:=1;
BS1:=Table2.CreateBlobStream(Table2.FieldByName('b'),bmReadWrite);
BS1.Write(Signature2,64);
Table2.Post;
Table2.Refresh;
BS1.Destroy;

Table2.Active:=false;
Table2.Active:=true;

Table1.First;
BS2:=Table2.CreateBlobStream(Table2.FieldByName('b'),bmread);
BS2.read(Signature3,64);
BS2.Destroy;
end;

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0585 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.