I wrote simpliest program that connect to acceessdb and from Memo column I can execute SQL query.
Example query:
SELECT
company_name, date_of_order_start, date_of_order_finish
FROM
customers
INNER JOIN
orders ON customers.id_customer = orders.id_customer
WHERE
company_name='Ампер';
It works fine, but this query
SELECT
company_name, date_of_order_start, date_of_order_finish, amount
FROM
customers
INNER JOIN
orders ON customers.id_customer = orders.id_customer
INNER JOIN
invoice ON invoice.id_order = orders.id_order
WHERE
company_name='Ампер';
returns a syntax error
missing operator in expression 'customers.id_customer=orders.id_customer INNER JOIN invoice ON invoice.id_order=orders.id_orde' .
Yes, the final r
in .id_order
isn't showing.
Please help, where I made mistake.
Below the code of the program
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Data.DB, Vcl.StdCtrls, Vcl.DBCtrls,
Vcl.Grids, Vcl.DBGrids, Vcl.ExtCtrls, Data.Win.ADODB;
type
TForm1 = class(TForm)
ADOConnection1: TADOConnection;
DataSource1: TDataSource;
ADOQuery1: TADOQuery;
Panel1: TPanel;
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
Button1: TButton;
Button2: TButton;
Memo1: TMemo;
Label1: TLabel;
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Memo1Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
//проверим - есть ли текст в Memo. Если нет, выходим:
if Memo1.Text = '' then begin
ShowMessage('Вначале введите запрос!');
Memo1.SetFocus;
Exit;
end;
//текст есть. Очистим предыдущий запрос в наборе данных:
ADOQuery1.SQL.Clear;
//добавим новый запрос из Memo:
ADOQuery1.SQL.Add(Memo1.Text);
//открываем набор данных, т.е. выполняем запрос:
ADOQuery1.Open;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Memo1.Clear;
end;
procedure TForm1.Memo1Change(Sender: TObject);
begin
ADOQuery1.SQL.Add(Memo1.Text);
ADOQuery1.SQL := Memo1.Lines;
end;
end.