Результат запроса — «Объект не найден».

#mysql #delphi #firedac

#mysql #дельфи #firedac

Вопрос:

  iQuery := TFDQuery.Create( AConnection );
 iQuery.Connection := AConnection;
 iQuery.SQL.Add( 'Select I.Clino, I.Date, I.Type, I.Cash, I.Checke, I.Card, I.Acct, ' );
 iQuery.SQL.Add( 'I.ROA, I.Charges, I.Invno, I.LaterPaid, I.Station, ' );
 iQuery.SQL.Add( 'I.Tax, I.Discount, I.ToBePaid, I.Time, I.ClinCode, I.Clinno, C.LastName, C.Firstname ' );
 iQuery.SQL.Add( 'from Invoice I join Client C on I.Clino = C.Clino ' );
 iQuery.SQL.Add( 'where I.Date = :D order by I.Invno' );
 iQuery.ParamByName('D').AsDate := dDate;
 iQuery.IndexFieldNames := 'Invno';
 iQuery.IndexesActive := true;
 iQuery.DetailFields := 'Invno';
 iQuery.Open;

 rQuery := TFDQuery.Create( AConnection );
 rQuery.Connection := AConnection;
 rQuery.SQL.Add( 'Select R.Invno, R.Related, R.Entry, P.Patient, R.Charge, R.Discount, R.Tax, R.ClinCode' );
 rQuery.SQL.Add( 'from Records R' );
 rQuery.SQL.Add( 'join Patient P on P.Patno = R.Patno' );
 rQuery.SQL.Add( 'where R.SSDO = true' );
 rQuery.SQL.Add( 'order by R.Related' );
 rQuery.IndexFieldNames := 'Invno';
 rQuery.IndexName := 'Invno';
 rQuery.IndexesActive := true;
 rQuery.MasterFields := 'Invno';
 rQuery.MasterSource := srcInv;
 rQuery.Open;
 

Таблица ЗАПИСЕЙ (rQuery) содержит около 3 миллионов записей. Этот запрос должен выдать около дюжины таких записей. Записи имеют индекс «Invno (invno )». Когда я выполняю этот код, я получаю следующую ошибку:

[FireDAC][DatS]-2. Объект [Invno] не найден.

Что я делаю не так?

Spyke

Комментарии:

1. Я надеюсь, что в реальном коде вы используете try..finally блоки для защиты своих ресурсов.

2. А я нет. Где я должен его использовать в этом случае?

3. rQuery := TFDQuery.Create(nil) try {use rQuery} finally rQuery.Free; end Ну, не только для rQuery , но и для всех экземпляров вашего объекта.

4. Вы пробовали запрашивать SQL-запрос моего инструмента запросов MySQL, чтобы убедиться, что все в порядке?

5. Почему вы устанавливаете IndexesActive, IndexFieldNames и MasterSource / MasterFields перед открытием запроса?