Ага, как и предполагалось, где-то идет конвертация в AnsiString с неправильной кодовой страницей. Только вот я не ожидал, что она в параметрах происходит.
Кстати, переводить Edit1.Text в WideString, наверное, не обязательно.
Дефолтный String, который на самом деле UnicodeString полностью совместим с WideString (собственно, это один и тот же тип).
Т.о. можно сделать что-то типа:
Код:
GlavFrm.FDQuery1.SQL.Text := 'INSERT INTO Malimet (tabel, name, birthday, citizenship, nationality, gender, military_rank, photo, password) VALUES (:tabel, :name, :birthday, :citizenship, :nationality, :gender, :military_rank, :photo, :password)';
For I := 0 To GlavFrm.FDQuery1.Params.Count-1 Do
If GlavFrm.FDQuery1.Params[i].DataType = ftString Then
GlavFrm.FDQuery1.Params[i].DataType := ftWideString;
GlavFrm.FDQuery1.ParamByName('tabel').AsString := Edit1.Text;
GlavFrm.FDQuery1.ParamByName('name').AsString := UTF8Encode(Edit2.Text);
GlavFrm.FDQuery1.ParamByName('birthday').Value := DateTimePicker1.Date;
GlavFrm.FDQuery1.ParamByName('citizenship').AsString := ComboBox1.Text;
GlavFrm.FDQuery1.ParamByName('nationality').AsString := ComboBox2.Text;
GlavFrm.FDQuery1.ParamByName('gender').AsString := ComboBox3.Text;
GlavFrm.FDQuery1.ParamByName('military_rank').AsString := ComboBox4.Text;
GlavFrm.FDQuery1.ParamByName('photo').AsString := label8.Caption;
GlavFrm.FDQuery1.ParamByName('password').AsString := Edit3.Text;
GlavFrm.FDQuery1.ExecSQL;