Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Использование RXMemoryData / 14 сообщений из 14, страница 1 из 1
16.10.2018, 16:30
    #39718267
patrick1968
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование RXMemoryData
Добрый день. Есть у меня такая необходимость. Открыть запрос ADOQuery, далее результат один в один выгрузить в MemoryData ну и затем в гриде его редактировать и т.д. при выгрузке возникает исключение поле DeviceID cannot be modified, причина примерно ясна, только непонятно почему так происходит вот код
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
     UniMainModule.spDD.Open;
    UniMainModule.mdDD.EmptyTable;
    while not UniMainModule.spDD.Eof do begin
      UniMainModule.spDD.FieldByName('DeviceID').ReadOnly := false;
      UniMainModule.spDD.Next;
    end;
    UniMainModule.mdDD.CopyStructure(UniMainModule.spDD);
    UniMainModule.mdDD.LoadFromDataSet(UniMainModule.spDD,0, lmCopy);
    UniMainModule.spDD.Close;


следовал советам с форума http://www.sql.ru/forum/218052/rxmemorydata-loadfromdataset , но также не помогло

понятно что DeviceID - автоинкримент в исходной таблице, но почему оно не может просто загружаться в MemoryData?
...
Рейтинг: 0 / 0
16.10.2018, 16:40
    #39718272
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование RXMemoryData
16.10.2018 16:30, patrick1968 пишет:
> while not UniMainModule.spDD.Eof do begin
> UniMainModule.spDD.FieldByName('DeviceID').ReadOnly := false;
> UniMainModule.spDD.Next;
> end;

нахрена это в ЦИКЛЕ?!
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
16.10.2018, 16:52
    #39718285
patrick1968
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование RXMemoryData
Цикл вообще можно убрать (это из советов форума)
...
Рейтинг: 0 / 0
16.10.2018, 16:59
    #39718294
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование RXMemoryData
следуй
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
16.10.2018, 17:59
    #39718358
patrick1968
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование RXMemoryData
так не помогает
...
Рейтинг: 0 / 0
16.10.2018, 18:17
    #39718369
Кроик Семён
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование RXMemoryData
patrick1968понятно что DeviceID - автоинкримент в исходной таблице, но почему оно не может просто загружаться в MemoryData?

может поменять в таблице-приемнике тип поля на Integer ...
...
Рейтинг: 0 / 0
16.10.2018, 18:21
    #39718373
Кроик Семён
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование RXMemoryData
P.S.
просто комментарий к коду:

Код: pascal
1.
2.
3.
4.
    while not UniMainModule.spDD.Eof do begin
      UniMainModule.spDD.FieldByName('DeviceID').ReadOnly := false;
      UniMainModule.spDD.Next;
    end;


т.к. поле имеет свойства не зависимо от текущей записи в датасете, то по эффекту равносильно
Код: pascal
1.
    UniMainModule.spDD.FieldByName('DeviceID').ReadOnly := false;
...
Рейтинг: 0 / 0
16.10.2018, 18:38
    #39718382
Кроик Семён
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование RXMemoryData
P.P.S.
фантазии (не проверял)

для облегчения чтения ввел FromDS и ToDS
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
var
   FromDS  : ADOQuery;
   ToDS    : TRxMemoryData;
begin
   FromDS := UniMainModule.spDD;
   ToDS :=  UniMainModule.mdDD;
   
   FromDS.Open();
   
   ToDS.Active:=false;
   ToDS.AutoIncAsInteger:=true;  // подсмотрел в TJvMemoryData, может и в Rx есть (ибо предок)
   ToDS.EmptyTable();
   ToDS.CopyStructure(FromDS);   // возможно, это лишняя строка из-за LoadFromDataSet 
   ToDS.LoadFromDataSet(FromDS, 0, lmCopy);
...
Рейтинг: 0 / 0
17.10.2018, 10:14
    #39718591
patrick1968
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование RXMemoryData
Печалька, но у RX AutoIncToInteger нет
...
Рейтинг: 0 / 0
17.10.2018, 10:15
    #39718592
patrick1968
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование RXMemoryData
AutoIncAsInteger
...
Рейтинг: 0 / 0
17.10.2018, 10:27
    #39718598
Cobalt747
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование RXMemoryData
ReadOnly снять пробовал?
...
Рейтинг: 0 / 0
17.10.2018, 14:12
    #39718793
patrick1968
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование RXMemoryData
Поменял RXMemoryData на JVMemoryData вопрос решился само собой при изменении свойства AutoIncAsInteger в true, но попутно нарисовалась еще одна проблема в исходном запросе есть одно поле логического типа, но т.к. это MS SQL, то в запросе там 0 и 1, и если бы я просто отобразил этот запрос в гриде, то там бы в этом поле был бы checkbox, но при загрузке в JVMemoryData и отображении в гриде там показывает 0 и 1. Даже если я не копирую структуру и в лоб прописываю поля и определяю как boolean, видимо надо отказываться от использования MemoryData, вот только чем заменить, чтобы было похоже на ADOQuery?
...
Рейтинг: 0 / 0
17.10.2018, 14:59
    #39718833
patrick1968
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование RXMemoryData
Как вариант подумал, что может подойти ClientDataSet, только вот как лучше загрузить записи из ADO в ClientDataSet избегая варианта переноса по каждой записи?
...
Рейтинг: 0 / 0
17.10.2018, 15:36
    #39718873
makhaon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование RXMemoryData
patrick1968,

а LoadFromDataSet целиком разве переносит? тоже по одной. Целиком только FireDAC грузить умеет и то из/в свои наборы. насколько я помню.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Использование RXMemoryData / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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