Вверх ↑
Этот топик читают: Гость
Ответов: 1891
Рейтинг: 110
#46: 2007-07-06 02:58:59 ЛС | профиль | цитата
nesco, может дело к компонентах. Та схема работает в версии HiAsm 3.62 build 160 в которой ничего не обновлялись.

Кстати с записью данных в blob поля разобрался?
карма: 0
%time%
0
Разработчик
Ответов: 26066
Рейтинг: 2120
#47: 2007-07-06 03:00:10 ЛС | профиль | цитата
Alexbootch писал(а):
Кстати с записью данных в blob поля разобрался

читай выше.
карма: 22

0
Ответов: 1891
Рейтинг: 110
#48: 2007-07-06 03:09:31 ЛС | профиль | цитата
Кстати автор SQLite cоветует в blob поля данные записывать как hex либо в кодировке base 64

Если записать данные в blob вот так

INSERT INTO tb (temp) Values (X'CFF0E8E2E5F2206E6573636F21')


то при выводе результата запроса SQLite получишь:
temp
Привет nesco!


Так что измени text на blob
карма: 0
%time%
0
Разработчик
Ответов: 26066
Рейтинг: 2120
#49: 2007-07-06 03:26:54 ЛС | профиль | цитата
Alexbootch, ну спасибо за инфу. А если base 64 писать, то (X' тоже надо ставить или что другое?
карма: 22

0
Ответов: 1328
Рейтинг: 69
#50: 2007-07-06 03:31:45 ЛС | профиль | цитата
Вопрос к знатокам SQLite:
можно ли запоролить базу данных или отдельную таблицу и как это сделать
карма: 2

0
Ответов: 1891
Рейтинг: 110
#51: 2007-07-06 03:46:58 ЛС | профиль | цитата
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
%time%
0
Разработчик
Ответов: 26066
Рейтинг: 2120
#52: 2007-07-06 10:32:42 ЛС | профиль | цитата
Alexbootch, c INSERT-запросом понятно, а как это же сделать запросом UPDATE..SET
карма: 22

0
Ответов: 1891
Рейтинг: 110
#53: 2007-07-06 18:44:58 ЛС | профиль | цитата
nesco, писал(а):
Alexbootch, c INSERT-запросом понятно, а как это же сделать запросом UPDATE..SET


nesco, что-то не получается?
карма: 0
%time%
0
Разработчик
Ответов: 26066
Рейтинг: 2120
#54: 2007-07-06 18:49:23 ЛС | профиль | цитата
Alexbootch писал(а):
что-то не получается?

вот и я про то же.
карма: 22

0
Ответов: 1891
Рейтинг: 110
#55: 2007-07-06 18:51:25 ЛС | профиль | цитата
Alexbootch, писал(а):
что-то не получается?


я имел ввиду у тебя

nesco, вот так попробуй:

UPDATE Pictures SET Image = X'%1' WHERE rowid = %2;[/code]

и все должно получиться :)
карма: 0
%time%
0
Разработчик
Ответов: 26066
Рейтинг: 2120
#56: 2007-07-06 22:11:09 ЛС | профиль | цитата
Alexbootch, спасибо, попробую. А то я это выражение пытался затолкать в скобки.

[size=-2]------ Добавлено в 22:11
Alexbootch,
нифига не катит. Вот строка запроса
UPDATE Pictures SET Image = X'%1' WHERE rowid = %2;
VACUUM;
Ошибок не выдает, но и не записывает. Проверял, вместо %1 нормально подставляется HEX, но...
карма: 22

0
Ответов: 1891
Рейтинг: 110
#57: 2007-07-07 00:06:54 ЛС | профиль | цитата
nesco, писал(а):
Ошибок не выдает, но и не записывает. Проверял, вместо %1 нормально подставляется HEX, но...


Проверил - все записывает (можно посмотреть открыв базу в блокноте). Просто если будешь писать например так:

UPDATE Pictures SET Image = X'C7E0EFE8F1FC20F3F1EFE5F8EDEE20EEE1EDEEE2EBE5EDE0' WHERE rowid = 1;


то в базе в поле blob не будет записи C7E0EFE8F1FC20F3F1EFE5F8EDEE20EEE1EDEEE2EBE5EDE0, а будет запись: Запись успешно обновлена (можно посмотреть открыв базу в блокноте) и, следовательно, при преобразовании записи Запись успешно обновлена как HexToStream ничего не получишь, т.к. данных hex в базе нет. Отсюда вывод - нужно переделывать схему, если записывать в поле blob как X'hex'.

карма: 0
%time%
0
Разработчик
Ответов: 26066
Рейтинг: 2120
#58: 2007-07-07 10:04:59 ЛС | профиль | цитата
Alexbootch, я записывал рисунок. Если рисунок писать в это поле без X, то записывает нормально, как String, если с X, то пустой рисунок. Похоже, X -- это преобразование HEX обратно в код. А посему, надо его еще и закодировать на отсутствие нулей. ИМХО, надо проверять.
карма: 22

0
Ответов: 1891
Рейтинг: 110
#59: 2007-07-08 00:00:38 ЛС | профиль | цитата
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
%time%
0
Ответов: 1891
Рейтинг: 110
#60: 2007-07-21 16:24:59 ЛС | профиль | цитата
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
%time%
0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)