Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
 Аватар для edsjeka
8 / 8 / 7
Регистрация: 01.01.2016
Сообщений: 386

Непонятки с кодировками

17.03.2016, 10:30. Показов 3447. Ответов 27
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
База данных MySql у базы Character set: cp1251--Windows Cyrilic, Collation: cp1251_general_ci.
В SQL Connection св-во Driver-ServerCharSet стоит cp1251, в параметрах тоже cp1251.
Получается, что те данные на русском языке, которые уже внесены в базу отображаются нормально на русском. А вот то, что я вношу заново превращаются в абра-кадабру. Где еще что нужно выставить, чтобы именно при внесении данных в БД на русском данные отображались нормально.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.03.2016, 10:30
Ответы с готовыми решениями:

Прошу помощи с кодировками
Здравствуйте уважаемые программисты. Прошу Вашей помощи и совета. При проектировании базы данных мне необходимы были прежде всего печатные...

Непонятки с вставкой
При первом нажатии на кнопку заменяет первую запись. после добавляет в конец как и должно быть. почему так? procedure...

Непонятки с ADVStringGrid
Использую таблицу такого плана. Встроенный чек бокс в нулевой столбец для возможности выделения нескольких строк и DropDownFilter. Все...

27
 Аватар для edsjeka
8 / 8 / 7
Регистрация: 01.01.2016
Сообщений: 386
19.03.2016, 20:19  [ТС]
1. Этот вопрос настолько сложный, что никто не знает что мне ответить?
2. Этот вопрос настолько наивный, что никто даже не хочет отвечать на него?
Так что, 1 или 2?

Добавлено через 2 часа 26 минут
Я вставляю данные вот так
Delphi
1
DataModule1.SQLQuery1.Params.ParamByName('myrab').Value:=Edit6.Text;
После этого то что на русском языке превращается в кракозяблы, может у SQLQuery1 нужно что-то выставить или поменять?
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
19.03.2016, 21:02
edsjeka, а какие компоненты вы используете? ADO?
1
 Аватар для edsjeka
8 / 8 / 7
Регистрация: 01.01.2016
Сообщений: 386
19.03.2016, 21:09  [ТС]
Цитата Сообщение от Lord_Voodoo Посмотреть сообщение
edsjeka, а какие компоненты вы используете? ADO?
Нет, я использую dbexpress, SQLConnection
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
19.03.2016, 21:23
а к выбору компонентов есть какие-то требования? обязательно использовать именно dbexpress, SQLConnection?
1
 Аватар для edsjeka
8 / 8 / 7
Регистрация: 01.01.2016
Сообщений: 386
19.03.2016, 21:29  [ТС]
ну да, у меня уже прога на нем висит. я перешел на MySQL после проблем с Acess, потратил кучу времени на переделку под MySQL теперь, надеюсь вопрос как-то решится. Вроде никаких проблем не должно быть, может я где-то туплю..
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
19.03.2016, 23:57
Что указано в параметре TSQLConnection.Params ServerCharSet?

Вычитал:
Если не работает, то самому выполнить SET NAMES:

если установлена кодировка cp1251, тогда:
Code
1
SET NAMES cp1251''
иначе, если нужна кодировка cp1252
Code
1
SET NAMES ''cp1252''
1
 Аватар для edsjeka
8 / 8 / 7
Регистрация: 01.01.2016
Сообщений: 386
20.03.2016, 11:18  [ТС]
Цитата Сообщение от Lord_Voodoo Посмотреть сообщение
Вычитал:
Спасибо, попробую.

Добавлено через 46 минут


Добавлено через 9 минут
Похоже, что проблема даже не в кодировке. Я попробовал вставлять данные через DBGrid-DBNavigator, вставляется все как надо, отображается на русском все нормально.

А мне надо вставлять через SQL-запрос. Я беру текстовое значение из Edit и вставляю NSERTом, через параметр. И в итоге вставляется вместо русского текста кракозяблы.

Может мне в коде что-то нужно исправить или при вставке еще что-то указывать?

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
 if (RadioGroup1.ItemIndex=0) and
   (ListBox1.Items[ListBox1.ItemIndex] = 'Справочник работ') then
  begin
   zapr:='Insert into SprRabot (Rabota) values (:myrab)';
 
     DataModule1.SQLQuery1.Close;
     DataModule1.SQLQuery1.SQL.Text:=zapr;
     DataModule1.SQLQuery1.Params.ParamByName('myrab').Value:=Edit6.Text;
     DataModule1.SQLQuery1.ExecSQL;
     InsSprRabot();
     MessageDlg('Запись успешно добавлена', mtInformation, [mbOk], 0);
 
  end;
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
20.03.2016, 11:29
edsjeka, честно говоря, никогда не пользовался dbexpress, может вам стоит попробовать компоненты от DevArt - MyDAC? причем особых переделок там вам не светит, они наследуют TDataSet...

http://delphi.support.uz/index... lava&id=20

а что будет, если добавить через TSQLTable? (ради теста)

а еще посмотрите тут:
1
 Аватар для edsjeka
8 / 8 / 7
Регистрация: 01.01.2016
Сообщений: 386
20.03.2016, 11:58  [ТС]
Цитата Сообщение от Lord_Voodoo Посмотреть сообщение
edsjeka, честно говоря, никогда не пользовался dbexpress, может вам стоит попробовать компоненты от DevArt - MyDAC? причем особых переделок там вам не светит, они наследуют TDataSet...
Попробую наверное, но попозже, я вообще хотел как мне подсказали использовать FireDAC, но почитал и ничего не понял что там и как делается, решил использовать dbexpress. Теперь когда я уже больше вник в тему, думаю мне проще будет разобраться с этими DACами)
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
20.03.2016, 12:11
edsjeka, если вы работали хотя бы раз с TTable и TQuery, то с даками разберетесь легко, потому что все методы идентичные, кстати...
1
 Аватар для edsjeka
8 / 8 / 7
Регистрация: 01.01.2016
Сообщений: 386
20.03.2016, 13:15  [ТС]
Работает нормально, когда я не использую параметр, а сразу вставляю значение в текст запроса:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
if (RadioGroup1.ItemIndex=0) and
   (ListBox1.Items[ListBox1.ItemIndex] = 'Справочник работ') then
  begin
   zapr:='Insert into SprRabot (Rabota) values ("'+Edit6.Text+'")';
{   zapr:='Insert into SprRabot (Rabota) values (:myrab)';}
 
     DataModule1.SQLQuery1.Close;
     DataModule1.SQLQuery1.SQL.Text:=zapr;
    { DataModule1.SQLQuery1.Params.ParamByName('myrab').Value:=Edit6.Text;}
     DataModule1.SQLQuery1.ExecSQL;
     InsSprRabot();
     MessageDlg('Запись успешно добавлена', mtInformation, [mbOk], 0);
 
  end;
Но почему?
Также понимаю, что двойные кавычки тут нельзя использовать, но как без них не знаю.

Добавлено через 7 минут
Может быть поэтому?:
Delphi позволяет составить “гибкую” форму запроса, называемую параметризованным запросом. Такие запросы позволяют подставить значение переменной вместо отдельных слов в выражениях “where” или “insert”. Эта переменная может быть изменена практически в любое время. (Если используется локальный SQL, то можно сделать замену почти любого слова в утверждении SQL, но при этом та же самая возможность не поддерживается большинством серверов.)
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
20.03.2016, 14:04
edsjeka, так если у вас работает без параметризированного запроса, то я не вижу в этом большой беды... с ним, параметризированным запросом, программа конечно будет работать немного быстрее, хотя вряд ли пользователь заметит разницу... ну еще одна польза от такого запроса, что вам не надо голову себе напрягать, как правильно написать запрос, потому что это делает за вас объект запроса...

на счет кавычек, вам следует почитать спецификацию вашего сервера БД, какие кавычки следует использовать для различных типов данных...
1
 Аватар для edsjeka
8 / 8 / 7
Регистрация: 01.01.2016
Сообщений: 386
20.03.2016, 14:27  [ТС]
Ну да, я думаю что нет большой беды. Просто меня здесь все убеждали, что нужно именно параметры использовать. Может хоть кто-то ответит, почему так получается. Просто хотелось бы знать где нужно использовать параметры, а где не нужно или может как правильно их использовать. А так конечно, всем спасибо!
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
20.03.2016, 14:56
edsjeka, можно, ну вообще нужно использовать параметризированные запросы, но... это совершенно необязательно, причем чаще всего их используют и советуют использовать как раз из-за автоматической подстановки в запрос... вы просто не парите себе голову, как правильно написать запрос... если же у вас достаточный скилл в SQL и нет проблем с написанием запросов с учетом требований Дельфи или Билдера, то вы вполне управитесь и с помощью простых запросов, если честно... а вот причину проблем с кодировкой надо искать в документации, я вам тут ничего не скажу, если честно... не использую ни адо, ни дбэкспресс, да и никому не советую юзать, потому что узконаправленные компоненты уделывают их на раз...
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
20.03.2016, 15:26
edsjeka, Делфи какая ?
0
 Аватар для edsjeka
8 / 8 / 7
Регистрация: 01.01.2016
Сообщений: 386
20.03.2016, 15:40  [ТС]
Цитата Сообщение от mss Посмотреть сообщение
edsjeka, Делфи какая ?
Embarcadero Delphi 10
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
20.03.2016, 16:00
ну а так

DataModule1.SQLQuery1.Params.ParamByName ('myrab').AsString:= 'БЛАБЛА'

?
0
 Аватар для edsjeka
8 / 8 / 7
Регистрация: 01.01.2016
Сообщений: 386
20.03.2016, 16:11  [ТС]
Цитата Сообщение от mss Посмотреть сообщение
ну а так
DataModule1.SQLQuery1.Params.ParamByName ('myrab').AsString:= 'БЛАБЛА'
?
Все равно вот такое вставляется: БЛАБЛА
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
20.03.2016, 16:12
А тип данных, ассоциированный с параметром, какой ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.03.2016, 16:12
Помогаю со студенческими работами здесь

Непонятки с Locate
Всем Доброго времени суток!!!! Прежде всего вот код: if ADOQuery1.Locate('client_id',...

Непонятки со СтрингГридом
Помогите пожелста решить проблему с сохранением и загрузкой SthingGrid 'a. В моей программе (заданной на курсовую, а её во вторник уже...

Непонятки с кодировкой
CodeGear Delphi 2007 for Win32 + MySQL 5.0.51 Подключаюсь к базе через TSQLConnection. Когда пытаюсь добавить в поле типа VARCHAR...

Непонятки в синтаксисе
Имеется едит1 в которую вводится дата. Данная дата должна перейти в компонент АДОКвери в SQL запрос. Код прилагается. procedure...

Непонятки с динамич.массивами
СУть приводимого ниже куска проги: имеется текст.файл. Каждая строка которого загоняется в свой динам.массив (Dhi_FlexibleArray,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru