Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / TdxMemData.LoadFromDataSet и строковые поля / 5 сообщений из 5, страница 1 из 1
20.06.2019, 09:40
    #39828660
dartveider13
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TdxMemData.LoadFromDataSet и строковые поля
Добрый день!
Заполняю MemDat-y значениями из запроса TIBQuery через процедуру LoadFromDataSet
Нормально перенеслись значения Integer, Date, а вот строковые почему-то не перенеслись. Не подскажете в чем может быть загвоздка.
Делфи юникодная, наименование и размер полей в мемке и запросе совпадают. БД - Firebird 3.0. Кодировка БД - Win1251
...
Рейтинг: 0 / 0
20.06.2019, 11:23
    #39828698
dartveider13
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TdxMemData.LoadFromDataSet и строковые поля
Ну как мне кажется, я нашел в чем проблема. В запросе IBQuery, строковое поле представлено типом TIBStringField. В мемке типом поля является TStringField. Несовпадение типов однако) Вот теперь как бы победить?
...
Рейтинг: 0 / 0
20.06.2019, 11:47
    #39828706
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TdxMemData.LoadFromDataSet и строковые поля
Цепочка...

Код: pascal
1.
TIBStringField = class(TWideStringField)


Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
constructor TStringField.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  SetDataType(ftString);
end;

constructor TWideStringField.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  SetDataType(ftWideString);
end;



Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
procedure TdxCustomMemData.LoadFromDataSet(DataSet : TDataSet);

  function CanAssignTo(ASource, ADestination: TFieldType): Boolean;
  begin
    Result := ASource = ADestination;  // ftString <> ftWideString
    if not Result then
      Result := (ASource = ftAutoInc) and (ADestination = ftInteger);
  end;

var
  i : Integer;
  AField : TField;
  mField: TdxMemField;
begin
...
  while not DataSet.EOF do
  begin
    Append;
    for i := 0 to DataSet.FieldCount - 1 do
    begin
      AField := FindField(DataSet.Fields[i].FieldName);
      if(AField <> nil) and CanAssignTo(DataSet.Fields[i].DataType, AField.DataType) then
      begin
...
Рейтинг: 0 / 0
20.06.2019, 11:58
    #39828712
dartveider13
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TdxMemData.LoadFromDataSet и строковые поля
Ну да, я там и посмотрел. Получается WideString должен подойти. Сейчас проверим
...
Рейтинг: 0 / 0
20.06.2019, 12:04
    #39828718
dartveider13
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TdxMemData.LoadFromDataSet и строковые поля
DimaBr, Ооо спасибо тебе добрый человек. WideString это то что надо)
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / TdxMemData.LoadFromDataSet и строковые поля / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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