Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

EOleVariantException при открытии ADOTable

259
09 февраля 2005 года
AlexandrVSmirno
1.4K / / 03.12.2004
Есть две таблицы в MS SQLServer2000. Между ними задан relation и определены соответствующие индексы. Через ADO открываю обе таблицы (провайдер MSDASQL). При попытке открыть мастер-таблицу (программа запускается из среды Builder V6.0) получаем EOleVariantException "Не могу преобразовать Variant(NUUL) к Variant(WString)". При запуске программы непосредстенно из Windows exception не возникает. В обоих вариантах сама программа далее работает как из пушки. Вопрос, почему так и где это может вылезти потом?
2.1K
09 февраля 2005 года
greyich
117 / / 02.02.2005
боюсь ошибиться, но не может ли это быть связано со свойством "IsNull" полей таблицы на сервере? и соответственно таких же свойств где-нибудь у ADOTable...
259
09 февраля 2005 года
AlexandrVSmirno
1.4K / / 03.12.2004
Цитата:
Originally posted by greyich
боюсь ошибиться, но не может ли это быть связано со свойством "IsNull" полей таблицы на сервере? и соответственно таких же свойств где-нибудь у ADOTable...


В таблицах есть поля IsNull, но в триггере OnCreate туда лепится пробел, а Exception возникает здесь:

Код:
procedure TCustomADODataSet.UpdateIndexDefs;
const
  SUnique = 'UNIQUE';                      { Do not localize + 5 }
  SIndexName = 'INDEX_NAME';
  SColumnName = 'COLUMN_NAME';
  SPrimaryKey = 'PRIMARY_KEY';
  SAutoUpdate = 'AUTO_UPDATE';
  SOrdinalPosition = 'ORDINAL_POSITION';
var
  IndexInfo: _Recordset;
begin
  try
    FieldDefs.Update;
    IndexDefs.Clear;
    if (CommandType in [cmdTable, cmdTableDirect]) and (CommandText <> '') then
    begin
      SetConnectionFlag(cfIndex, True);
      try
        IndexInfo := Command.ActiveConnection.OpenSchema(adSchemaIndexes,
          VarArrayOf([Unassigned, Unassigned, Unassigned, Unassigned, CommandText]),
          EmptyParam);
        while not IndexInfo.EOF do
        begin
          if TagVariant(IndexInfo.Fields[SOrdinalPosition].Value).ulVal > 1 then [COLOR=red]
{Вот именно на этом операторе}
            with IndexDefs.Find(IndexInfo.Fields[SIndexName].Value) do
{---}[/COLOR]
              Fields := Format('%s;%s', [Fields, IndexInfo.Fields[SColumnName].Value])
          else
            with IndexDefs.AddIndexDef do
            begin
              Name := VarToStr(IndexInfo.Fields[SIndexName].Value);
              Fields := VarToStr(IndexInfo.Fields[SColumnName].Value);
              if IndexInfo.Fields[SPrimaryKey].Value = True then
                Options := Options + [ixPrimary];
              if IndexInfo.Fields[SUnique].Value = True then
                Options := Options + [ixUnique];
              if IndexInfo.Fields[SAutoUpdate].Value = False then
                Options := Options + [ixNonMaintained];
            end;
          IndexInfo.MoveNext;
        end;
      finally
        SetConnectionFlag(cfIndex, False);
      end;
    end;
  except
    { do nothing }
  end;
end;
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог