Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Заполнение константы pError в модуле ADODB.pas 
:(
    Опции темы
Elflight
Дата 23.7.2009, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 2.4.2007

Репутация: нет
Всего: нет



Здравствуйте! Я дописываю чужую программу (в зависимости от условия должен срабатывать либо старый функционал, либо новый, дописываемый). Мои дописки вызывают ошибку "Неопознанная ошибка", до причин возникновения которой я не могу докопаться :(
На форме расположен компонент типа TADODataSet, в типовом модуле ADODB.pas есть следующая стандартная процедура:
Код

procedure TADOConnection.ExecuteComplete(RecordsAffected: Integer;
  const pError: Error; var adStatus: EventStatusEnum;
  const pCommand: _Command; const pRecordset: _Recordset;
  const pConnection: _Connection);

При выполнении старого функционала pError = nil, а при выполнении моего - pError содержит указатель на ошибку. Не могу понять, на основании чего заполняется эта константа, отладчик не помогает...
Подскажите пожалуйста, куда копать? Сорри, если вопрос глупый - мой опыт работы с Delphi невелик...

Это сообщение отредактировал(а) Elflight - 23.7.2009, 18:21
PM MAIL   Вверх
niteo
Дата 23.7.2009, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 23.11.2006
Где: Брянск

Репутация: нет
Всего: 1



Вообще эта ошибка скорее всего возникает в работе компонента, то есть либо не корректные данные в рунтайме заносишь либо...
На самом деле я им и не пользовался, мне и ADOQuery хватало...
кстати пишешь что юзаешь TADODataSet а метод из TADOConnection пошешь?. Давай Код в студию. smile

--------------------
Мне чужого лишнего не нада.Ешь ананасы, рябчиков жуй,день твой последний приходит, буржуй...
PM MAIL   Вверх
Elflight
Дата 24.7.2009, 08:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 2.4.2007

Репутация: нет
Всего: нет



Кода много... В общих чертах, есть форма GroundContentForm, на ней таблица GroundContentGrid (TDBGridEh) с источником данных CatalogContentDataSource (TDataSource), в свою очередь связанным с CatalogContentDataSet (TADODataSet).
Код

procedure TGroundContentForm.UpdateGrid(Refresh: Boolean = False);
var
  SQL: String;
  FS: String;
begin
  if not CatalogTreeDataSet.Active then
    Exit;
  if Data.GetIniParam('use_new_light_version') <> 'y' then
    SQL := 'select * '+
           'FROM [offerslist] RIGHT JOIN ((((([company] RIGHT JOIN [catalog] ON [company].[ID] = [catalog].[Owner]) '+
           'RIGHT JOIN [items] ON [catalog].[ID] = [items].[Catalog]) LEFT JOIN [offer] ON [items].[IDInner] = [offer].[Product]) '+
           'LEFT JOIN [offerprice] ON [offer].[IDInner] = [offerprice].[Offer]) RIGHT JOIN [refers] ON [items].[IDInner] = [refers].[IDItem]) ON [offerslist].[IDInner] = [offerprice].[OfferList] '+
           'where ([Kind] in (1, 2) or ([Kind] in (3, 4) and [offerslist].[Base]=True and [offer].[IDInner] <> Null)) and [refers].[Catalog]="'+NormalizeSQLCommand(FCatalogID)+'"'
  else
    SQL := 'SELECT * '+
           'FROM ((company RIGHT JOIN [catalog] ON company.[ID] = catalog.[Owner]) RIGHT JOIN items ON catalog.[ID] = items.[Catalog]) RIGHT JOIN refers ON items.[IDInner] = refers.[IDItem] '+
           'WHERE (((refers.[Kind]) In (1,2)) AND ((refers.Catalog)="'+NormalizeSQLCommand(FCatalogID)+'")) OR (((refers.[Kind]) In (3,4)) AND ((refers.Catalog)="'+NormalizeSQLCommand(FCatalogID)+'"))';

  if Tree then
    SQL := SQL + ' and [Parent]='+IntToStr(CatalogTreeDataSetrefersIDInner.Value)+' and [Kind] in (1, 2, 3, 4)'
  else
    SQL := SQL + ' and [Kind] in (3, 4)';

  if FFilter then
    FS := FilterFrame.SQL
  else
    FS := SearchFrame.SQL;

  if FS <> '' then  
    SQL := SQL + ' and ('+FS+')';
    
  if FFilterString <> FS then
  begin
    FFilterString := FS;
    RecalcItemsCount(GroundTree, FItemsCount, FCatalogID, FFilterString);
  end;
    
  SQL := SQL + ' order by [items].[Relevance] Desc';

  if FOrder <> '' then
    SQL := SQL + ','+FOrder;


  if Data.GetIniParam('use_new_light_version') = 'y' then
    CatalogContentDataSet.CommandText:= 'SELECT * '+
    'FROM ((company RIGHT JOIN [catalog] ON company.[ID] = catalog.[Owner]) RIGHT JOIN items ON catalog.[ID] = items.[Catalog]) RIGHT JOIN refers ON items.[IDInner] = refers.[IDItem]';

  if not CatalogContentDataSet.Active or Refresh or (Trim(CatalogContentDataSet.CommandText) <> SQL) then
  begin
    CatalogContentDataSet.DisableControls;
    try
      GroundContentGrid.SelectedRows.Clear;
      CatalogContentDataSet.Close;
      //готовим DataSet к новым условиям
      if Data.GetIniParam('use_new_light_version') = 'y' then
        PrepareCatalogDataSet();
      //
      CatalogContentDataSet.CommandText := SQL;
      CatalogContentDataSet.Open;
      CatalogContentDataSet.Last;
      UpdateCount;
      GroundContentGrid.SumList.Active := not CatalogContentDataSet.RecordCount >= NetData.MaxRecord;
      CatalogContentDataSet.First;
    finally
      CatalogContentDataSet.EnableControls;
    end;
  end;
end;


Мои вставки здесь - условия if Data.GetIniParam('use_new_light_version') = 'y'. Если истина, то выполняется мой код. После строки CatalogContentDataSet.Open; выполняются только стандартные процедуры компонентов, и вылетает ошибка.
В процедуре PrepareCatalogDataSet() просто удаляются лишние поля из CatalogContentDataSet и лишние колонки из GroundContentGrid.
Как я понимаю, трабл возникает из-за несоответствия набора полей. Очень хотелось бы понять, где в коде pError получает свою ошибку, чтобы разобраться из-за чего...

Это сообщение отредактировал(а) Elflight - 24.7.2009, 08:41
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0402 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.