Здравствуйте,
При выполнении запроса UniDAC создает поля используя типы которые возвращает MySQL. Если Вы создали постоянные поля (persistent fields) в датасете используя один запрос а потом изменили запрос на другой, то Вам необходимо пересоздать постоянные поля.
При использовании приведенного выше кода Вы можете контролировать тип поля datas_list используя опцию LongStrings. LongStrings используется для представления строковых полей с длиной большей 255 символов типом TStringField (TWideStringField) вместо TMemoField (TWideMemoField). Например:
Код: Выделить всё
UniQuery1.SQL.Text := 'SELECT CONVERT(group_concat(CONCAT_WS(''.'',EXTRACT(DAY FROM dt), EXTRACT(MONTH FROM dt)) SEPARATOR '','') USING UTF8) datas_list FROM testdates';
UniQuery1.Options.LongStrings := True;
UniQuery1.Open;
ShowMessage(UniQuery1.FieldByName('datas_list').ClassName); // TWideStringField
UniQuery1.Close;
UniQuery1.Options.LongStrings := False;
UniQuery1.Open;
ShowMessage(UniQuery1.FieldByName('datas_list').ClassName); // TWideMemoField
Также, начиная с UniDAC версии 4.2.7, Вы можете испльзовать новую функциональность - Data Type Mapping. Data Type Mapping позволяет создавать соответствие между типами базы данных и типами IDE. Например:
Код: Выделить всё
UniQuery1.DataTypeMap.AddFieldNameRule('datas_list', ftWideString);
UniQuery1.SQL.Text := 'SELECT CONVERT(group_concat(CONCAT_WS(''.'',EXTRACT(DAY FROM dt), EXTRACT(MONTH FROM dt)) SEPARATOR '','') USING UTF8) datas_list FROM testdates';
UniQuery1.Options.LongStrings := True;
UniQuery1.Open;
ShowMessage(UniQuery1.FieldByName('datas_list').ClassName); // TWideStringField
UniQuery1.Close;
UniQuery1.Options.LongStrings := False;
UniQuery1.Open;
ShowMessage(UniQuery1.FieldByName('datas_list').ClassName); // TWideStringField
Более подробную информацию о Data Type Mapping Вы найдете в статье "Working with Data Type Mapping" документации UniDAC.