C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Сравнение графических данных, в БД
T@rEn
Отправлено: 05.10.2006, 14:26


Ученик-кочегар

Группа: Участник
Сообщений: 18



Доброе время суток !

Помогите пожалуйста!

Есть две БД (Access), одинаковые по структуре.
Подключаюсь с помощью ADO.
В них таблицы, допустим — Picture.
В таблицах поля, типа OLE, допустим — Sxema, содержащие чертежи оборудования.
Необходимо, сравнивая поля, найти идентичные данные, т.е. одинаковые чертежи.

Как можно организовать такое сравнение?

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

CODE

Graphics::TBitmap *Bit1 = new Graphics::TBitmap();
TJPEGImage *jp1 = new TJPEGImage();

jp->LoadFromStream(DM->Q1->CreateBlobStream(DM->Q1->FieldByName("sxema"),bmRead));
Bit->Assign (jp);


потом можно будет сравнить jp или bit? и каким образом?

Заранее благодарен!!!
olegenty
Отправлено: 05.10.2006, 14:49


Ветеран

Группа: Модератор
Сообщений: 2412



храни в базе не только изображения, но и их CRC32/Hash(например GOST). тогда сравнение становится задачей тривиальной: CRC32 — это бигинт, Hash(GOST) строка из 64 символов.
T@rEn
Отправлено: 06.10.2006, 10:38


Ученик-кочегар

Группа: Участник
Сообщений: 18



Спасибо за ответ!!!

Но на это у меня мозгов не хватает smile.gif

Хотя такой вариант для меня лучше чем приведенный ниже:

CODE

TMemoryStream *M1 = new TMemoryStream();
TStream *B1 = DM->Q1->CreateBlobStream(DM->Q1->FieldByName("sxema"),bmRead);
M1->CopyFrom(B1,B1->Size);

TMemoryStream *M2 = new TMemoryStream();
TStream *B2 = DM->Q2->CreateBlobStream(DM->Q2->FieldByName("sxema"),bmRead);
M2->CopyFrom(B2,B2->Size);

if (CompareMem(M1->Memory,M2->Memory,M1->Size)) l4->Caption="da";
else l4->Caption="net";


Вдруг кому-нибудь понадобиться!
olegenty
Отправлено: 06.10.2006, 12:19


Ветеран

Группа: Модератор
Сообщений: 2412



http://www.cobans.net/hashlib.php — бесплатная библиотека для хеширования данных.

Вернуться в Работа с базами данных в C++Builder