#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 перед открытием запроса?