Как я могу использовать символы Unicode (или просто кириллицу) в свойстве TStringField.FieldName в Delphi?

Как я могу использовать символы Unicode (или просто кириллицу) в свойстве TStringField.FieldName свойства TClientDataSet в Delphi?

Я пробовал это, и это не работает в последней строке:

aStringField := TStringField.Create(aClientDataSet);
aStringField.FieldName := 'аАяЯ';
aStringField.DataSet := aClientDataSet;
aClientDataSet.CreateDataset;

person Dmitry    schedule 23.05.2014    source источник
comment
Не работает, ничего не передает. Какое сообщение об ошибке вы получаете?   -  person MartynA    schedule 23.05.2014
comment
Ошибка: Поле не найдено. Английский FileName работает нормально.   -  person Dmitry    schedule 23.05.2014
comment
Люди обычно используют английские названия для столбцов.   -  person TLama    schedule 23.05.2014
comment
Мне нужно использовать кириллицу.   -  person Dmitry    schedule 23.05.2014
comment
Ну, для DisplayLabel я бы понял, но для FieldName это более чем странно. Это клиентский набор данных, который вы, похоже, создаете прямо сейчас. Почему у вас есть это требование?   -  person TLama    schedule 23.05.2014
comment
Вы знаете, поддерживает ли ваша Midas.Dll кириллицу в именах полей? Кроме того, является ли эта CDS автономной или она связана с серверной частью базы данных через TProvider?   -  person MartynA    schedule 23.05.2014
comment
Мне нужно сгенерировать XML с данными и заголовками столбцов, используя TClientDataSet.   -  person Dmitry    schedule 23.05.2014


Ответы (1)


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

program CDS;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils, db, dbclient;

procedure Test;
var
  aClientDataSet : TClientDataSet;
  aStringField : TStringField;
begin
  aClientDataSet := TClientDataSet.Create(Nil);
  aStringField := TStringField.Create(aClientDataSet);
  aStringField.FieldName := 'аАяЯ';
  aStringField.DataSet := aClientDataSet;
  aClientDataSet.CreateDataset;
end;

begin
  Test;
end.

Кроме того, если я использую ваше объявление aStringField (т.е. как TField) и ваш метод его создания, я получаю ошибку r/time «Неверный тип поля» в aClientDataSet.CreateDataset.

person MartynA    schedule 23.05.2014
comment
Я использовал TStringField и получил ошибку Поле не найдено. Вопрос упростился. - person Dmitry; 23.05.2014
comment
Ну, это работает для меня, как я сказал. Какую версию Delphi вы используете? Вы пробовали запускать то, что я написал? - person MartynA; 23.05.2014
comment
Делфи ХЕ5. Ваш код еще не пробовал, но он похож на мой. - person Dmitry; 23.05.2014
comment
Кроме того, вы не показываете все свойства вашего TClientDataSet, поэтому: определены ли на нем какие-либо FieldDefs. - person MartynA; 23.05.2014
comment
Нет, не видел: aClientDataSet := TClientDataSet.Create(nil); - person Dmitry; 23.05.2014
comment
Что ж, программа в моем ответе варит то, что вы отправили, в SSCCE, и это не выдает ошибок. Если у вас не работает, о чем вы еще не сказали, то, предположительно, проблема должна заключаться в какой-то разнице между XE4 и XE5; если это так, но ваш код все еще не работает, это должно быть из-за чего-то, что вы нам не показываете. - person MartynA; 23.05.2014
comment
Ваша программа работает нормально. Но мой код точно такой же, но в большом проекте. - person Dmitry; 23.05.2014
comment
Тогда удачной охоты! Я, очевидно, больше не могу вам помочь. - person MartynA; 23.05.2014
comment
Я обнаружил, что ошибка возникает со многими полями. (Одно поле отлично работает и в проекте.) - person Dmitry; 23.05.2014
comment
Затем сделайте SSCCE со вторым полем и проверьте его. - person MartynA; 23.05.2014