FireDAC Query подключиться к DBGrid

У меня есть FDQuery и DataSource и DBGrid. Теперь я пишу этот код в кнопке

  FDQuery2->Active = false;
  FDQuery2->SQL->Clear();
  FDQuery2->SQL->Add(" SELECT C.patient_id, P.patient_name, C.check_id "
                  " FROM Checkup C "
                  " INNER JOIN Patient P ON (C.patient_id=P.patient_id) "
                  " WHERE C.today = " + MaskEdit1->Text +
                  " ORDER BY C.check_id ");
  FDQuery2->Active = true;

и я подключаю FDQuery к DataSource и tDataSource к DBGrid, но когда я нажимаю кнопку, он не показывает строки. и я уверен, что код SQL работает, потому что когда я пишу внутри строки SQL, строки были показаны. есть идеи.

1 ответ

Решение

Вы скучаете по ' вокруг вашего значения при объединении текста. Измени свой WHERE пункт:

FDQuery2->SQL->Clear();
FDQuery2->SQL->Add(" SELECT C.patient_id, P.patient_name, C.check_id "
                " FROM Checkup C "
                " INNER JOIN Patient P ON (C.patient_id=P.patient_id) "
                " WHERE C.today = '" + MaskEdit1->Text + "'" +
                " ORDER BY C.check_id ");

Вы действительно должны научиться использовать параметризованные запросы. Он позволяет драйверу базы данных обрабатывать такие вещи, как правильное цитирование текста или форматирование дат, а также (что важно) предотвращает внедрение SQL.

FDQuery2->SQL->Clear();
FDQuery2->SQL->Add(" SELECT C.patient_id, P.patient_name, C.check_id "
                " FROM Checkup C "
                " INNER JOIN Patient P ON (C.patient_id=P.patient_id) "
                " WHERE C.today = :today" + 
                " ORDER BY C.check_id ");
FDQuery2->ParamByName("today")->AsString = MaskEdit1.Text;
FDQuery2->Active = true;
Другие вопросы по тегам