Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Проблема с dxdbGrid


Автор: Гость_Татьяна 5.4.2005, 17:09

dxdbGrid связан с таблицей в которой динимачески формируются поля.
Пусть поле1 в таблице имеет тип lookup. Делаю динамически в Гриде поле типа LookupColumn на поле1. При сохранении значение в LookUpColumn
вываливается ошибка
"Произошли ошибки во время выполнения многошаговой операции. Проверьте значения всех состояний"
Что это такое???
Отьветьте пожайлуйста кто знает. Меня эта проблему уже достала.

Автор: Medved 10.4.2005, 23:35
А какой тип имеет поле, в которое вы сохраняете? И что за данные вы сохраняете?
Пришлите свой проект, я посмотрю.

Автор: Гость_Татьяна 14.4.2005, 15:02
Проект слишком большой. Я его выслать не могу. Но проблема такая.
Есть справочники:простые и составные.Составные - это те, которые в своем описании ссылаются на уже существуующие справочники.Нужно отображать их все.
Как я это делаю:
На клиенте используется Ado.
На клиенты исходя из построенного спец. образом представления, говорящего, какие поля как обзывать и если поле подстановочное, то из какой таблицы брать его значение.
Например,
Код


CREATE       VIEW dbo.VW_CALL_NOTES
AS
SELECT dbo.call_notes.cd AS [_ID], 
    dbo.call_notes.nm AS [Наименование],
    dbo.call_notes.short_nm AS [Краткое_наименование],
    IsNull(dbo.call_notes.spec_reg_type_cd,'') AS [_#Тип спецучета*@dbo.spec_reg_type$cd%nm], 
    dbo.call_notes.start_date AS [_START], 
    dbo.call_notes.finish_date AS [_FINISH]
FROM dbo.call_notes LEFT OUTER JOIN
    dbo.spec_reg_type ON
    dbo.call_notes.spec_reg_type_cd = dbo.spec_reg_type.cd
WHERE dbo.call_notes.finish_date is null


База на MS SQL Server.Формируется компонент таблица, которая если поле подстановочное, то делает его как lookup и формирует к нему динамический набор данных.Если поле просто типа fkData тоего и создает с соблюдением типов.
Вот и все.
Проблема: при постировании данных
а). если поле неподстановочное, то все нормально.
б). Если поле подстановочное, то выдается сообщение об ошибке "Проверьте значение всех состояний"+ эта ошибка происходит в юните Adodb в строке.
Recordset.Fields[FieldNo-1].Value := Data;
Постирования не происходит.
при этом Data имеет правильное значение.
Код

 procedure UpdateData;
  var
    I: Integer;
    FieldData: PVariantList;
    Data: OleVariant;
  begin
    try
      FieldData := PVariantList(ActiveBuffer + SizeOf(TRecInfo));
      for I := 0 to FModifiedFields.Count - 1 do
        with TField(FModifiedFields[I]) do
        if not ReadOnly then
        begin
          Data := FieldData[Index];
          if not VarIsEmpty(Data) then
          Recordset.Fields[FieldNo-1].Value := Data;
        end;
      if (Recordset.EditMode * (adEditInProgress + adEditAdd)) <> 0 then
        Recordset.Update(EmptyParam, EmptyParam);
    except
      CursorPosChanged;
      Recordset.CancelUpdate;
      raise;
    end;
  end;
smile

Автор: Гость_Татьяна 14.4.2005, 15:12
Поле имеет тип Lookup в таблице.Соответственно отображаем string а записываем integer

Автор: Medved 15.4.2005, 00:49
Проблема не с TdxGrid, мне так сложно сказать в чем именно проблемма, надо разбираться.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)