nesco, может дело к компонентах. Та схема работает в версии HiAsm 3.62 build 160 в которой ничего не обновлялись.
Кстати с записью данных в blob поля разобрался?
Этот топик читают: Гость
Ответов: 1891
Рейтинг: 110
|
|||
карма: 0 |
|
Разработчик
Ответов: 26113
Рейтинг: 2126
|
|||
Alexbootch писал(а): Кстати с записью данных в blob поля разобралсячитай выше. |
|||
карма: 22 |
|
Ответов: 1891
Рейтинг: 110
|
||||
Кстати автор SQLite cоветует в blob поля данные записывать как hex либо в кодировке base 64
Если записать данные в blob вот так INSERT INTO tb (temp) Values (X'CFF0E8E2E5F2206E6573636F21')
то при выводе результата запроса SQLite получишь:
Так что измени text на blob |
||||
карма: 0 |
|
Разработчик
Ответов: 26113
Рейтинг: 2126
|
|||
Alexbootch, ну спасибо за инфу. А если base 64 писать, то (X' тоже надо ставить или что другое?
|
|||
карма: 22 |
|
Ответов: 1328
Рейтинг: 69
|
|||
Вопрос к знатокам SQLite:
можно ли запоролить базу данных или отдельную таблицу и как это сделать |
|||
карма: 2 |
|
Ответов: 1891
Рейтинг: 110
|
|||
nesco, если честно, то с base 64 не пробовал
а данные в blob должны записываться именно так: INSERT INTO tb (temp) Values (X'CFF0E8E2E5F2206E6573636F21')
что бы SQLite мог понять, что это именно blob данные. nesco, писал(а): А если base 64 писать, то (X' тоже надо ставить или что другое?насчет X то надо ставить X'hex', а не X'hex думаю, что да, т.к. данные будешь писать в blob. [size=-2]------ Добавлено в 03:43 nesco, писал(а): На, держи рабочий пример и найди кучу отличий. Если работает (у меня только что работал), то можешь дать на него ссылку.Добавил. [size=-2]------ Добавлено в 03:46 Konst, писал(а): Вопрос к знатокам SQLite:
можно ли запоролить базу данных или отдельную таблицу и как это сделать В настоящее время в SQLite нельзя установить пароль на базу либо отдельную таблицу. Можно запретить вставку данных в таблицу. |
|||
карма: 0 |
|
Разработчик
Ответов: 26113
Рейтинг: 2126
|
|||
Alexbootch, c INSERT-запросом понятно, а как это же сделать запросом UPDATE..SET
|
|||
карма: 22 |
|
Ответов: 1891
Рейтинг: 110
|
|||
nesco, писал(а): Alexbootch, c INSERT-запросом понятно, а как это же сделать запросом UPDATE..SET
nesco, что-то не получается? |
|||
карма: 0 |
|
Разработчик
Ответов: 26113
Рейтинг: 2126
|
|||
Alexbootch писал(а): что-то не получается?вот и я про то же. |
|||
карма: 22 |
|
Ответов: 1891
Рейтинг: 110
|
|||
Alexbootch, писал(а): что-то не получается?я имел ввиду у тебя nesco, вот так попробуй:
|
|||
карма: 0 |
|
Разработчик
Ответов: 26113
Рейтинг: 2126
|
|||
Alexbootch, спасибо, попробую. А то я это выражение пытался затолкать в скобки.
[size=-2]------ Добавлено в 22:11 Alexbootch, нифига не катит. Вот строка запроса
|
|||
карма: 22 |
|
Ответов: 1891
Рейтинг: 110
|
|||
nesco, писал(а): Ошибок не выдает, но и не записывает. Проверял, вместо %1 нормально подставляется HEX, но... Проверил - все записывает (можно посмотреть открыв базу в блокноте). Просто если будешь писать например так: UPDATE Pictures SET Image = X'C7E0EFE8F1FC20F3F1EFE5F8EDEE20EEE1EDEEE2EBE5EDE0' WHERE rowid = 1;
то в базе в поле blob не будет записи C7E0EFE8F1FC20F3F1EFE5F8EDEE20EEE1EDEEE2EBE5EDE0, а будет запись: Запись успешно обновлена (можно посмотреть открыв базу в блокноте) и, следовательно, при преобразовании записи Запись успешно обновлена как HexToStream ничего не получишь, т.к. данных hex в базе нет. Отсюда вывод - нужно переделывать схему, если записывать в поле blob как X'hex'. |
|||
карма: 0 |
|
Разработчик
Ответов: 26113
Рейтинг: 2126
|
|||
Alexbootch, я записывал рисунок. Если рисунок писать в это поле без X, то записывает нормально, как String, если с X, то пустой рисунок. Похоже, X -- это преобразование HEX обратно в код. А посему, надо его еще и закодировать на отсутствие нулей. ИМХО, надо проверять.
|
|||
карма: 22 |
|
Ответов: 1891
Рейтинг: 110
|
|||
nesco, вот еще что про blob пишут
Chris Newman писал(а): BLOBs and Binary Data
When you define a column as BLOB the column is still typeless, though as you saw earlier this does tell SQLite to use a text-based comparison when sorting on the field. SQLite is fully capable of storing binary data in any column, provided that there are no NUL (0x00, ASCII character zero) characters in the data. As SQLite will store strings in its columns much more often than binary data, a NUL is the terminator for a variable-length character string and must be encoded somehow if it appears inside a piece of binary data. Encoding can be done at the application level, for instance by encoding to base-64 or with URL-style encoding where NUL becomes its hex value represented as %00, and the percent character itself is encoded to %25. SQLite also includes a pair of functions to encode and decode binary data, sqlite_encode_binary() and sqlite_decode_binary(). How binary data is encoded for any given column is an implementation choice left to the developer, so you can use supplied functions, adapt them from the sources in src/encode.c, or create your own. |
|||
карма: 0 |
|
Ответов: 1891
Рейтинг: 110
|
|||
nesco, писал(а): Alexbootch, я записывал рисунок. Если рисунок писать в это поле без X, то записывает нормально, как String, если с X, то пустой рисунок. Похоже, X -- это преобразование HEX обратно в код. А посему, надо его еще и закодировать на отсутствие нулей. ИМХО, надо проверять.Для схемы Example_bd_StrToImg_&_ImgToStr ничего не надо закодировать. Вот так изменяешь рисунок: UPDATE Pictures SET Image = x'%1' WHERE rowid=%2;VACUUM;
а вот так выводишь рисунок: SELECT hex(Image) FROM Pictures WHERE rowid = %1;
самое главное преимущество - хранение данных не как hex и, следовательно, уменьшение размера базы данных, т.к. размер рисунка в hex получается в два раза больше его реального размера [size=-2]------ Добавлено в 16:24 Вышла новая версия SQLite 3.4.1. |
|||
карма: 0 |
|