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;