Два вопроса по БД (mysql)

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
st-pascal
незнакомец
Сообщения: 4
Зарегистрирован: 31.05.2010 17:25:07

Два вопроса по БД (mysql)

Сообщение st-pascal »

1. БД кодировка utf8, при получении данных и вывод в StringGrid кодировка портится, вместо русских букв вопросы.
2. БД, поле текст, вставляю туда текст в виде пути к файлу (\\PC\temp\file.doc), после вставки происходит странное, в поле в БД такие данные: в начале один слеш остается а все остальные удаляются. вставляю в базу так

Код: Выделить всё

INSERT INTO test (file) VALUES ('+#39+Edit1.Text+#39+' );


Где я ошибся?
Basileus
новенький
Сообщения: 23
Зарегистрирован: 31.03.2010 16:23:22

Сообщение Basileus »

На первый вопрос отвечу. Перед выборкой выполните запрос

Код: Выделить всё

SET NAMES utf8
Timid
постоялец
Сообщения: 290
Зарегистрирован: 21.11.2007 20:33:15

Сообщение Timid »

st-pascal писал(а):2. БД, поле текст, вставляю туда текст в виде пути к файлу (\\PC\temp\file.doc), после вставки происходит странное, в поле в БД такие данные: в начале один слеш остается а все остальные удаляются. вставляю в базу так

Код: Выделить всё

INSERT INTO test (file) VALUES ('+#39+Edit1.Text+#39+' );


Где я ошибся?


Вероятнее всего где-то происходит распарсивание текста - он берется в двойные кавычки. Сразу срабатывает юниксово-цешный принцип вставки специальных символов \код. Поскольку Ваш текст не содержит таких специальных кодов кроме самого слеша, то вы получаете одну правильную замену - двойной слеш как одинарный и игнорирование остальных.
Такая подстановка выполняется именно в одинарных кавычках: \\ на \, \' на ', в остальных случаях \литера на литера.

Забыл добавить: попробуйте использовать прямой слеш - паскаль его корректно обрабатывает в имени файла.
st-pascal
незнакомец
Сообщения: 4
Зарегистрирован: 31.05.2010 17:25:07

Сообщение st-pascal »

Basileus, да спасибо помогло. По искал тут на форуме такой вопрос, проблема популярная :D

2. нужно использовать SQLQuery1.Params.ParamByName('file').Value
Ответить