Delphi et access /dbgrid

Soyez le premier à donner votre avis sur cette source.

Vue 23 814 fois - Téléchargée 4 683 fois

Description

Ayant cherché à nombreuse reprise sur le net sans de rééel conclusion une explication d'accés à access et à l'interconnexion avec une dbgrid, j'ai enfin réussi à faire une synthése de quelques trucs.
Le source suivant donne les informations suivantes :
Accés à la base de données access
Connexion à une DBGRid
Filtre sur des dates (et c'est pas du kuxe d'avoir un vrai exemple)
Between
Filtre date précise
Filtre Texte (plus simple)

Pour les novice, comme moi, il faudra, cliquer sur l'icone ADO dans l'onglet Design de l'éditeur Delphi
A gauche vous avez dans objectInspector zone Database ConnectionString cliquez sur ....
Boite de dialogue
cliquez sur Build
Onglez connexion
cliquez sur ...de la zone 1 et pointez sur la base de données DataBase.mdb
Cliquez sur testez la connexion
Message de dialogue de victoire

Source / Exemple :


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ADODB, DB, Grids, DBGrids, StdCtrls;

type
  TForm1 = class(TForm)
    DBGrid1: TDBGrid;
    ADOConnection1: TADOConnection;
    ADOQuery1: TADOQuery;
    DataSource1: TDataSource;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    procedure Button4Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

// Pour fonctionner directement il faut que la requete soit active : Miscellaneous Active TRUE

procedure TForm1.Button1Click(Sender: TObject);
begin
 AdoQuery1.SQL.Clear;
 AdoQuery1.SQL.Add('Select * From TableTest Where ChampTXT='+QuotedStr('TEST1'));
 AdoQuery1.Open;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 AdoQuery1.SQL.Clear;
 AdoQuery1.SQL.Add('Select * From TableTest');// Where ChampTXT='+QuotedStr('*'));
 AdoQuery1.Open;
end;

procedure TForm1.Button3Click(Sender: TObject);
Var
  Chaine : String;
  Date   : TDateTime;
  Year,Month,Day : Word;
  Hour,Min,Sec,MSec : Word;

begin
 Date := StrToDateTime('11/11/2007 11:09:05');
 DecodeDate (Date,Year,Month,Day);
 DecodeTime (Date,Hour,Min,Sec,MSec);

 // FONCTIONNE AdoQuery1.SQL.Clear;
 // FONCTIONNE AdoQuery1.SQL.Add('Select * From TableTest Where ChampDate=#03/03/2007#');
 AdoQuery1.SQL.Clear;
 // INFO FORUM WHERE (Cdate(checktime) = Date()) And Hour(checktime) > 11 And Minute(checktime) > 11 And Second(checktime) > 43;
 // Marche pas AdoQuery1.SQL.Add('Select * From TableTest Where ChampDate=#11/11/2007 11:09:05#');
 // FONCTIONNE AdoQuery1.SQL.Add('Select * From TableTest Where (Int(ChampDate)=#11/11/2007#)');// And Hour(ChampDate)>11');
 // FONCTIONNE AdoQuery1.SQL.Add('Select * From TableTest Where (Int(ChampDate)=#11/11/2007#) And (Hour(ChampDate)=11)');
 // FONCTIONNE AdoQuery1.SQL.Add('Select * From TableTest Where (Int(ChampDate)=#11/11/2007#) And (Hour(ChampDate)=11) And (Minute(ChampDate)=09)And (Second(ChampDate)=05)');
 AdoQuery1.SQL.Add('Select * From TableTest Where (Int(ChampDate)=#'+
    IntToStr(Day)+'/'+
    IntToStr(Month)+'/'+
    IntToStr(Year)+'#)'+
    'And (Hour(ChampDate)='+IntToStr(Hour)+') '+
    'And (Minute(ChampDate)='+IntToStr(Min)+')'+
    'And (Second(ChampDate)='+IntToStr(Sec)+')');

 AdoQuery1.Open;
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
 AdoQuery1.SQL.Clear;
 AdoQuery1.SQL.Add('Select * From TableTest ' +
 'Where ((Int(ChampDate)>#10/10/2007#) And ' +
 '(Int(ChampDate)<#12/11/2007#)) Or ' +
 '(Int(ChampDate)=#10/10/2007#) Or ' +
 '(Int(ChampDate)=#12/10/2007#)');

 AdoQuery1.Open;
end;

end.

Conclusion :


J'espére que ce source servira à ceux qui comme moi on galérait pour trouver un fonctionnement plus ou moins sympatique entre Delphi

Comme c'est mon premier source pardon pour les écarts avec la régle.
Je ferais mieux la prochaine fois.

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
109
Date d'inscription
lundi 6 mars 2006
Statut
Membre
Dernière intervention
5 octobre 2011

bonjour à tous,
j'ai le même probleme de filtrage par date dans requete sql,
j'ai essayé la solution proposé par cantador, mais sans résultat, je reçois toujours un message d'erreur indiquant paramètre introuvable ('param') que j'ai créé sur l'AdoQuery
par contre quand je met deux paramètre et j'utilise la requete BETWEEN :parm1 and param2, ça marche.

voici le code qui fonctionne:
begin
Close;
SQL.Clear;
SQL.Add('SELECT * From recette where Date BETWEEN :Date1 and :Date2');
Parameters.ParseSQL(QrCaisse.SQL.Text, True);
Parameters.ParamByName('Date1').Value:=DateTimePicker1.Date;
Parameters.ParamByName('Date2').Value:=DateTimePicker2.Date;
Open;
ExecSql;
end;

et celui qui ne fonctionne pas
begin
Close;
SQL.Clear;
SQL.Add('SELECT * From recette where Date :=Date1');
Parameters.ParseSQL(QrCaisse.SQL.Text, True);
Parameters.ParamByName('Date1').Value:=DateTimePicker1.Date;
Open;
ExecSql;
end;

merci pour votre aide.
Messages postés
1
Date d'inscription
vendredi 1 février 2008
Statut
Membre
Dernière intervention
21 juillet 2008

tres bien
Messages postés
4715
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
13
Salut aghtor,

C'est un exercice sur les requêtes SQL ACCESS..
Il y a bcp de tutos à ce sujet un peu partout sur le net..
Le mieux est encore d'utiliser des requêtes paramétrées :
"Where ChampDate =:param"
AdoQuery1.ParamByName('param').Value := DonneeDateHeure;
ce qui offre un traitement plus aisé des données et une simplification du SQL..
et peut-être même un poil de rapidité en plus à l'exécution..
Messages postés
637
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
9 janvier 2017

Bonjour,

Bon exemple ACCESS avec SQL

Par contre initialiser ADOConnection1.ConnectionString à l'exécution si la base access existe
Ce qui permet en plus de chamger de base ACCESS.
Voir pour cela mon exemple avec excel.
redimentionner la dggrille afin qu'elle soit lisible dbgrid1.Columns[i].width := 1...

Salutations

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.