EOleException Ошибка при попытке распечатать быстрый отчет - PullRequest
0 голосов
/ 03 июля 2018

У меня есть таблица базы данных Access с именем Receipts со следующими именами полей: receipt number item name, buying price, selling price. Я использую Adoquery и источник данных для подключения к базе данных доступа. Ниже приведен код, который я использую для печати отчета.

procedure TReceiptsform.BitBtn1Click(Sender: TObject);
var
qry :string;
begin
with ADOQuery1 do
         begin
         if ADOQuery1.Locate('receipt number',Edit1.Text,[]) then
      open;
      SQL.Clear;
qry:= 'SELECT*from Receipts WHERE (((Receipts.[receipt number])='+ edit1.Text+'))order by Receipts.[Item name]';
      SQL.Add(qry);
      Active:= True;
ReceiptForm.QuickRep1.Preview;
end;
end;

Однако, когда я запускаю программу, я нажимаю BitBtn1Click во время выполнения, я получаю эту ошибку.

ProjectSales.exe raised exception class EOleException with message 'Extra ) in query expression "(((Receipt.[item name])=))". Process stopped. Use Step or Run to continue.

Какой код обработки исключений можно использовать для предотвращения этой ошибки или есть проблема с запросом?

1 Ответ

0 голосов
/ 03 июля 2018

Ваша проблема в том, что если Edit1 равен Null , фильтруемый фильтр не имеет значения, так как использование + исключает кавычки:

'SELECT * from Receipts WHERE (((Receipts.[receipt number])='+ edit1.Text+'))order by Receipts.[Item name]'

=>

'SELECT * from Receipts WHERE (((Receipts.[receipt number])=)) order by Receipts.[Item name]'

Итак, используйте амперсанд и несколько пробелов:

'SELECT * from Receipts WHERE (((Receipts.[receipt number])=' & edit1.Text &')) order by Receipts.[Item name]'
...