Копирование записи из DataSet1 в DataSet2

Han Yuriy
Дата: 04.12.2007 18:25:09
Всем привет!
Казалось бы такая безобидная задачка, скопировать запись из одной TADODataSet в другую, но столкнулся с массой проблем, одну так и не могу решить:

DataSet1.CommandText := 'Select id, note, dbo.somefunc() [val] from table1 where id = 1';

DataSet2.CommandText := 'Select id, note, dbo.somefunc() [val] from table1 where id = 2';

Есть два, выше описанных датасета. Нужно текущую запись DataSet2 скопировать в текущую запись DataSet1; Схемы у обоих как видно одинаковые. Делаю так :

var
  i : integer;
begin
  DataSet1.Edit;
  for i := 0 to DataSet1.Fields.Count-1 do
  begin
    if DataSet1.Fields[i].DataType = ftMemo then
    begin
      try
        -- это необходимо если вы используете UNICODE
        DataSet1.Recordset.Fields[i].Value := DataSet2.Recordset.Fields[i].Value;
      except
      end
    end else
    begin
      DataSet1.Fields[i].ReadOnly := false;
      DataSet1.Fields[i].Required := false;
      DataSet1.Fields[i].Value := DataSet2.Fields[i].Value;
    end;
  end;
  DataSet1.Post;
end;

Поле Id копируется без проблем, а вот поле Val ни в какую ... SOS!!!
RENaissance
Дата: 04.12.2007 18:31:17
Han Yuriy

Поле Id копируется без проблем, а вот поле Val ни в какую ... SOS!!!

Потому что поле Val будет readonly. Это специфика ADO. Используйте другие компоненты доступа или связку
TADODataSet<->TDataSetProvider<->TClientDataSet.

Posted via ActualForum NNTP Server 1.4

Han Yuriy
Дата: 06.12.2007 09:50:35
Спасибо за ответ, копирование Readonly полей получается, но встает вопрос с UNICODE. Если в TADODataSet я мог получить MEMO обходя TMEMOField (из Recordset) то тут, я просто не могу найти решение. Может что нибудь подскажете ?
RENaissance
Дата: 06.12.2007 09:53:22
VCL не поддерживает Юникод. Так что работайте напрямую с обьектом Recordset.

Posted via ActualForum NNTP Server 1.4

Han Yuriy
Дата: 06.12.2007 10:00:06
У меня нет опыта работы с Recordset напрямую, подскажите решу ли я задачу с BatchUpdates, смогу ли изменять readonly поля, как показывал выше?
RENaissance
Дата: 06.12.2007 10:14:11
Попробуйте сами все проверить. Потом нам расскажете:)

Posted via ActualForum NNTP Server 1.4

Petro123
Дата: 06.12.2007 10:17:26
Han Yuriy
У меня нет опыта работы с Recordset напрямую, подскажите решу ли я задачу с BatchUpdates, смогу ли изменять readonly поля, как показывал выше?

попробуйте через интерфейсы и раннее связывание, раз юникод
LordMAD
Дата: 06.12.2007 10:19:53
Petro123
попробуйте через интерфейсы и раннее связывание, раз юникод
А у меня unicode и так работает. :P
Han Yuriy
Дата: 06.12.2007 12:04:26
автор

А у меня unicode и так работает. :P


Счастливый Вы человек!

Хорошо, может Вы мне подскажете как в TADODataSet по-другому обновить текущую запись с сервера ???
Anatoly Podgoretsky
Дата: 06.12.2007 12:59:07
Если с сервера, то нужна хранимая процедура.