Добавляю в базу (*.mdb) с помощью ODBC текстовы данные размером где-то по 5кб. Тип - LONGTEXT. Т.к. заранее не знаю размер, то использую функцию SQLPutData. После добавления 10-15 записей вылетает ошибка в функции SQLParamData. Ошибка связана с размером, если запись до 512байт - все работает. Кто-нибудь с этим сталкивался? _975482612__1.asm
Leshij А в чем разница между ними? Я так понимаю это одно и тоже разными словами. Решил проблему так: все данные типа longtext пропускаю через хеш функцию, которая возвращает dword, по нему и проверяю уникальность. Алгоритм хеширования, долго не думая, написал такой: формирую dword по трем признакам размер текста, сумма байт и "суммарный xor" всех байт. Какие еще посоветуете независимые признаки? Что бы исключить случайное совпадение.
На все 100 исключить наверное не получится, но можно посчитать crc32 longtext'а. Сразу и от размера и от взаиморасположения и от набора байт в строке будет зависимость. ИМХО это даст меньшее количество коллизий, чем твой способ, и быстрее будет.
Вот пример рабочий расчета crc32. Он считает crc файла, но вместо указателя на память, куда считан файл, можно подставить указатель на строку - посчитает crc для строки. 920125812__crc32.asm
Спасибо, я в инете нашел много примеров, щас подумал, когда я посчитывал сумму это не защищало от перестановки байт местами.
Ошибка была в том, что когда я посылал запрос "SELECT id FROM Text WHERE value=?" (value - это тексты), то odbc драйвер почему-то выдавал ошибку(я так и не понял почему), а теперь я ищу текст по crc32 и все работает без глюков.