Objectif :
L'objet
TQuery
permet de faire une requête SQL sur des tables d'une base de données.
Les données qui proviennent de la requête, une fois qu'elle
s'est correctement exécutée, sont disponibles sous la forme
d'une liste d'enregistrements qui peuvent être lus comme on le fait
avec un TTable.
La fiche
principale, le code associé dans la unit
Exécuter
le programme
Pour utiliser pratiquement le composant TQuery :
La fiche principale du projet :
unit uFQueryTest1;
{On verra ultérieurement comment affecter
le contenu des tables
dont provient la requête si on essaie de modifier une des
enregistrements disponibles par le TQuery.
Conseil: pour ne pas devoir lancer le programme pour savoir
si la requête fonctionne ou pas, il est possible de demander à
la
requête de s'exécuter directement en mode conception en faisant
passer la propriété "Active" du TQuery à True. Si
il y a une erreur
SQL alors un message d'erreur apparaît (pas forcément très
explicite)
indiquant la nature de l'erreur dans le SQL (c'est la seule source
d'information pour essayer de déboguer le code incorrect); et la
propriété
"Active" refuse de passer à True. Il reste à modifier le
SQL en
conséquence, puis à réessayer. Quand tout est correct,
ne pas oublier
de remettre "Active" à Fals e dans le TQuery (sinon la requête
est toujours active même si on en n'a pas besoin).
Remarque: lorsqu'un TTable ou un TQuery a sa propriété "Active"
mise à True en mode conception (même si après elle
est réaffectée
à False), l'objet TDataBase qui est connecté au TTable ou
au TQuery
est connecté automatiquement sur le fichier de base de données
(sa propriété "Connected" passe à True); ce qui empêche
de pouvoir
faire des modifications dessus par la suite(comme changer le chemin
de la base de données par programme). Une erreur survient alors
à
l'exécution ("Impossible d'effectuer cette opération sur
une table ouverte")
Il faut donc penser, avant d'exécuter
le programme, à remettre la propriété "Connected"
du TDataBase à False.
}
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs,
DBTables, Db, Buttons, StdCtrls, Grids, DBGrids, ExtCtrls, DBCtrls,
Mask;
type
TFQueryTest1 = class(TForm)
Database1: TDatabase;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
Query1: TQuery;
SpeedButton1: TSpeedButton;
SpeedButton2: TSpeedButton;
Label1: TLabel;
LEtat: TLabel;
Memo1: TMemo;
SpeedButton3: TSpeedButton;
SpeedButton4: TSpeedButton;
Label2: TLabel;
procedure FormCreate(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);
procedure SpeedButton2Click(Sender: TObject);
procedure SpeedButton4Click(Sender: TObject);
procedure SpeedButton3Click(Sender: TObject);
private
{ Déclarations privées
}
public
{ Déclarations publiques
}
end;
var
FQueryTest1: TFQueryTest1;
implementation
{$R *.DFM}
procedure TFQueryTest1.FormCreate(Sender: TObject);
begin
DataBase1.Params[0]:='DATABASE NAME='+extractfilepath(application.exename)+'BaseAccess.mdb';
DataBase1.connected:=true;
Query1.SQL.savetofile(extractfilepath(application.exename)+'sql.txt');
Memo1.Lines.Assign(Query1.SQL);
end;
procedure TFQueryTest1.SpeedButton1Click(Sender: TObject);
begin
Query1.open;
LEtat.caption:='Ouvert';
end;
procedure TFQueryTest1.SpeedButton2Click(Sender: TObject);
begin
Query1.close;
LEtat.caption:='Fermé';
end;
procedure TFQueryTest1.SpeedButton4Click(Sender: TObject);
begin
Query1.SQL.clear;
LEtat.caption:='Fermé';
Memo1.Lines.assign(Query1.SQL);
end;
procedure TFQueryTest1.SpeedButton3Click(Sender: TObject);
begin
Query1.SQL.loadfromfile(extractfilepath(application.exename)+'sql.txt');
Memo1.Lines.assign(Query1.SQL);
end;
end.
Remonter