Проблема с Delphi и Access: EDatabaseError: Field not Found!

Имеется проект на delphi который работает с БД access. Я переименовал одно поле из столбца таблицы access, сменил его имя также на новое во всех местах проекта где оно есть, во всех SQL вызовах. И при вызове ADOQuery, который должен использовать его имя, с помощью ADOQuery.Open, я получаю ошибку Delphi и Access: EDatabaseError: Field not Found, причем имя поля, которое значится ненайденным-старое и нигде не используется больше! В чем может быть проблема? ? Может обновить как-то проект надо, в Access я нажимал кнопку "Обновить всё" - не помогает. При возврате к старому имени всё хорошо работает.

1 ответов


Драйвер ODBC для MS Access работает в реальном режиме с базой на прямую!

Код как правельно соедениться и работать с Access через ODBC :
procedure TForm1.FormCreate(Sender: TObject);
  begin
    ADOConnection1.ConnectionString := 'Provider=MSDASQL.1;Persist Security' +
      #20'Info=False;Data Source=MS Access Database';
    try
      ADOConnection1.Open;
      ADOQuery1.Connection := ADOConnection1;
      try
        ADOQuery1.SQL.Text := 'SELECT [Поле1],[Поле2] FROM [Тест1] WHERE' +
          #20'[Поле1]=:key_name';
        ADOQuery1.Parameters.ParamByName('key_name').Value := '^ключ1';
        ADOQuery1.Open;
        while not ADOQuery1.Eof do
        try
          Memo1.Lines.Add('' +
            ADOQuery1.FieldByName('Поле1').AsString + ' = ' +
            ADOQuery1.FieldByName('Поле2').AsString {ENDL} );
        finally
          ADOQuery1.Next;
        end;
      finally
        if ADOQuery1.Active then
          ADOQuery1.Close;
        ADOQuery1.ClearFields;
      end;
    finally
      if ADOConnection1.Connected then
        ADOConnection1.Close;
    end;
  end;

Желательно использовать преконструктор TQuery на подобие :

function TfmMain.NewQuery(SQL_ID: string): TUniQuery;
  begin
    Result := TUniQuery.Create(Self);
    Result.Connection := UniConn;
    Result.SQL.Text := ConfSQL( SQL_ID );
  end;

var MyNewQuery: TUniQuery;
MyNewQuery := NewQuery('TEST_QUERY');
try
  // Тут что-то делаем
finally
  FreeAndNil(MyNewQuery);
end

Результат выполнения в Memo1 появилось :
Memo1
^Ключ1=Херня1
^Ключ1=ХерняАААА


ps: Вроде всё работает. Попробуй удалить .dcu файлы и перекомпелировать проект, возможно ошибка там.
pss: Тут есть группа "Pascal & Delphi" там быстрее ответ получить можно. Воросы группы я проверяю 1 раз в неделю.