powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / ADOQuery параметры и кодировка
16 сообщений из 16, страница 1 из 1
ADOQuery параметры и кодировка
    #39771930
v1989
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток!

Пытаюсь записать данные в таблицу в БД MySQL. Кодировку таблицы менял уже несколько раз - проблему не решает, на данный момент кодировка таблицы - utf8_unicode_ci.

Так вот, суть проблемы - когда прописываю в свойстве SQL компонента ADOQuery запрос типа:
Код: sql
1.
INSERT INTO cadet (LastName, FirstName, MiddleName, Passport, DateOfBirth, Sex, PhoneNumber) VALUES('Пупкин', 'Василий', 'Петрович', '1234567890', '2000-01-01', 'm', '89991112233');


то запрос отлично выполняется, даже при использовании русских символов, проблем нет.

Если же использую запрос с параметрами:
Код: sql
1.
INSERT INTO cadet (LastName, FirstName, MiddleName, Passport, DateOfBirth, Sex, PhoneNumber) VALUES(:ADOLastName, :ADOFirstName, :ADOMiddleName, :ADOPassport, :ADODateOfBirth, :ADOSex, :ADOPhoneNumber);


то могу использовать только латиницу, на кириллицу ругается "incorrect string value".

Код процедуры:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
procedure TForm2.Button1Click(Sender: TObject);
begin
ADOQuery2.Active:=false;
ADOQuery2.Parameters.ParamValues['ADOLastName']:=Edit1.Text;
ADOQuery2.Parameters.ParamValues['ADOFirstName']:=Edit2.Text;
ADOQuery2.Parameters.ParamValues['ADOMiddleName']:=Edit3.Text;
ADOQuery2.Parameters.ParamValues['ADOPassport']:=Edit4.Text;
ADOQuery2.Parameters.ParamValues['ADODateOfBirth']:=Edit5.Text;
if RadioGroup1.ItemIndex=0 then
  ADOQuery2.Parameters.ParamValues['ADOSex']:='m'
else
  ADOQuery2.Parameters.ParamValues['ADOSex']:='f';
ADOQuery2.Parameters.ParamValues['ADOPhoneNumber']:=Edit6.Text;
ADOQuery2.Active:=true;
end;
...
Рейтинг: 0 / 0
ADOQuery параметры и кодировка
    #39771933
v1989
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот, собственно, узнать бы, как правильно вести запись в таблицу при использовании параметров? К базе данных я подключаюсь с помощью ADOConnection через ODBC драйвер. При чтении из БД, кстати, русские символы отображаются верно.
...
Рейтинг: 0 / 0
ADOQuery параметры и кодировка
    #39771936
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А так ?
Код: pascal
1.
2.
3.
4.
ADOQuery2.Parameters.ParamValues['ADOPhoneNumber']:=Edit6.Text;
//ADOQuery2.Active:=true;
ADOQuery2.ExecSQL;
end;
...
Рейтинг: 0 / 0
ADOQuery параметры и кодировка
    #39771940
v1989
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DimaBrА так ?
Увы, то же самое!
...
Рейтинг: 0 / 0
ADOQuery параметры и кодировка
    #39771941
v1989
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может мне в этих настройках что-то поменять? Извините за глупые вопросы, я только учусь, это моё первое знакомство с MySQL
...
Рейтинг: 0 / 0
ADOQuery параметры и кодировка
    #39771963
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если запрос с готовыми значениями выполняется, то попробуйте постепенно заменяя значения параметрами вычислить, на каком параметре происходит ошибка

Код: pascal
1.
2.
3.
4.
5.
6.
7.
INSERT INTO cadet (LastName, FirstName, MiddleName, Passport, DateOfBirth, Sex, PhoneNumber) VALUES(:LastName, 'Василий', 'Петрович', '1234567890', '2000-01-01', 'm', '89991112233');

procedure TForm2.Button1Click(Sender: TObject);
begin
ADOQuery2.Parameters.ParamValues['LastName']:=Edit1.Text;
ADOQuery2.ExecSQL;
end;


Предполагаю что на DateOfBirth
...
Рейтинг: 0 / 0
ADOQuery параметры и кодировка
    #39771969
v1989
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DimaBr, ругается именно на тот первый попавшийся параметр, в который записаны данные кириллицей. С датой и т.д. проблем нет, при использовании латиницы данные в таблицу пишутся без проблем.
...
Рейтинг: 0 / 0
ADOQuery параметры и кодировка
    #39771970
v1989
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот скрин с ошибкой, при попытке записать кириллицу
...
Рейтинг: 0 / 0
ADOQuery параметры и кодировка
    #39771972
RackotPro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для начала советую использовать:

вместо
Код: pascal
1.
Parameters.ParamValues['ADOLastName']



лучше так
Код: pascal
1.
Parameters.ParamByName('ADOLastName').Value



А уже когда присваиваешь значение попробуй использовать функцию AnsiToUtf8

Примерно так:
Код: pascal
1.
Parameters.ParamByName('ADOLastName').Value := AnsiToUtf8(Edit1.Text)



Какую версию делфи используете? База данных на хостинге или локальная?
...
Рейтинг: 0 / 0
ADOQuery параметры и кодировка
    #39771976
v1989
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
RackotPro, не помогло. У меня Delphi версии 10.2, база располагается локально.
...
Рейтинг: 0 / 0
ADOQuery параметры и кодировка
    #39771994
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
2.
3.
AdoQuery2.SQL.Clear;
AdoQuery2.SQL.Text := 'set names cp1251;';
AdoQuery2.ExecSQL;


И перезапустить скюль
...
Рейтинг: 0 / 0
ADOQuery параметры и кодировка
    #39772076
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господи, какие анси и 1251, коллеги, пещерный век на дворе, что ли? У него все в православном утф8 и Дельфя 10-ка, не надо мутить человеку мировоззрение.
ТС-у: в мускле еще дефолтная кодировка сервера есть. Может, в ней дело? Ну и в параметрах подключения тоже надо проверить кодировку
...
Рейтинг: 0 / 0
ADOQuery параметры и кодировка
    #39772234
Фотография Dmitry Arefiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В настройках ODBC соединения попробовать указать "Character Set".
Ну или выполнить "set names ...", как выше DimaBr написал. Только "скюль" перезапускать не надо, так как это настройка сессии, а не инстанса.
...
Рейтинг: 0 / 0
ADOQuery параметры и кодировка
    #39772320
Фотография Gator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А меня убивает школьное
Код: pascal
1.
AdoQuery2.SQL.Clear;


перед
Код: pascal
1.
AdoQuery2.SQL.Text := 'set names cp1251;';
...
Рейтинг: 0 / 0
ADOQuery параметры и кодировка
    #39778840
v1989
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Забыл отписаться по решению проблемы - причина была в том, что я заранее предопределил параметры для ADOQuery, указав для текстовых параметров DataType - "ftString", поэтому при записи данных в эти переменные с кодировкой что-то происходило.

Теперь очень хочется узнать, каким образом определить, что в DBLookupListBox выделен какой-нибудь элемент? Есть ли у свойства KeyValue какое-то значение по умолчанию?
...
Рейтинг: 0 / 0
ADOQuery параметры и кодировка
    #39778844
v1989
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
v1989Теперь очень хочется узнать, каким образом определить, что в DBLookupListBox выделен какой-нибудь элемент? Есть ли у свойства KeyValue какое-то значение по умолчанию?
"NULL", как оказалось))) Пробовал уже, но видимо опечатался прошлый раз))) Прошу прощения за беспокойство!
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / ADOQuery параметры и кодировка
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]