Mise à jour DBgrid à partir d'une requête SQL [Résolu]

cs_letrom 3 Messages postés lundi 5 mai 2008Date d'inscription 13 avril 2011 Dernière intervention - 5 mai 2008 à 09:58 - Dernière réponse : cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention
- 6 mai 2008 à 15:53
Bonjour tout le monde,

J'ai un fiche avec les composants suivants :
    Ttable (Name : StockOrsud , TableName : stock_orsud.db)
    TdataSource (DataSet : StockOrsud, Name : DataSource1)
    TDBgrid (DataSource : DataSource1)
    Tquery (DataSource : Datasource1)

A la création de ma fiche, le DBGrid m'affiche bien le contenu de stock_orsud.db

Ensuite
j'ai ajouté un TradioGroup (avec 3 boutons) et je veux lorsque l'on
sélectionne un des boutons, une requête SQL soit effectuée et que le
DBGrid m'en affiche le résultat.

        procedure TForm1.RadioGroup1Click(Sender: TObject);
        begin
             If RadioGroup1.ItemIndex=1 then
             begin
                  with query1 do
                  begin
                       close;
                       SQL.Clear;
                       SQL.add('select * from stock_orsud where Quantite < 2000');
                       try open;
                       except
                             showmessage('erreur');
                       end;
                  end;
             end;
             DbGrid1.Update;
        end;

Et
malheureusement le DBGrid ne se modifie pas. J'ai évidemment fait des
recherches avant de vous demander de l'aide mais tout ce que j'ai
trouvé ne m'a pas fait avancer.

Je vous remercie par avance de vos lumières.

A+
Afficher la suite 

Votre réponse

5 réponses

Rematrix 125 Messages postés jeudi 17 avril 2008Date d'inscription 16 juillet 2008 Dernière intervention - 6 mai 2008 à 10:19
+3
Utile
C normale tu utilise qu'un seul dataset, tu doit mettre une pour Ttable et une pour Tquery, et le DBgrid relier avec dataset de Tquery pour qu'il s'affiche le résultat des requets, et évite close et open, met plus tôt active false et active true.

Matrix
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Rematrix
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 5 mai 2008 à 18:38
0
Utile
Bonjour letrom,
il peut y avoir bcp de choses..
déjà, est ce que le prog passe sur l'open (met un point d'arrêt) ?


et à la place de DbGrid1.Update;
mets query1.Refresh;

on verra la suite..

cantador
Commenter la réponse de cs_cantador
cs_letrom 3 Messages postés lundi 5 mai 2008Date d'inscription 13 avril 2011 Dernière intervention - 6 mai 2008 à 08:50
0
Utile
Bonjour cantador et merci pour ta réponse

Malheureusement le fait de mettre query1.Refresh; ne modifie pas le contenu de mon DBGrid et en mettant un point d'arrêt dur "open", le prog y passe bien.

J'attends d'autres idées et bien sur je cherche de mon côté.

SVP aidez-moi !!!

Letrom
Commenter la réponse de cs_letrom
cs_letrom 3 Messages postés lundi 5 mai 2008Date d'inscription 13 avril 2011 Dernière intervention - 6 mai 2008 à 10:29
0
Utile
Salut Matrix,

merci beaucoup pour ta réponse, ça marche.

bonne journée

Letrom
Commenter la réponse de cs_letrom
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 6 mai 2008 à 15:53
0
Utile
Bonjour letrom,

voilà un exemple très simple utilisant :
                                      1 compo ADOCoonexion
                                      1 compo ADOQuery
                                      1 compo DataSource
                                      1 DBGrid
                                      1 RadioGroup (avec 3 positions)

La table est 'Orders' de la base :
C:\Program Files\Fichiers communs\Borland Shared\Data\dbdemos.mdb

unit Unit1;



interface



uses

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



type

  TForm1 = class(TForm)
    ADOConnection1: TADOConnection;
    ADOQuery1: TADOQuery;
    DataSource1: TDataSource;
    DBGrid1: TDBGrid;
    RadioGroup1: TRadioGroup;
    ADOQuery1OrderNo: TFloatField;
    ADOQuery1CustNo: TFloatField;
    ADOQuery1SaleDate: TDateTimeField;
    ADOQuery1ShipDate: TDateTimeField;
    ADOQuery1EmpNo: TIntegerField;
    ADOQuery1ShipToContact: TWideStringField;
    ADOQuery1ShipToAddr1: TWideStringField;
    ADOQuery1ShipToAddr2: TWideStringField;
    ADOQuery1ShipToCity: TWideStringField;
    ADOQuery1ShipToState: TWideStringField;
    ADOQuery1ShipToZip: TWideStringField;
    ADOQuery1ShipToCountry: TWideStringField;
    ADOQuery1ShipToPhone: TWideStringField;
    ADOQuery1ShipVIA: TWideStringField;
    ADOQuery1PO: TWideStringField;
    ADOQuery1Terms: TWideStringField;
    ADOQuery1PaymentMethod: TWideStringField;
    ADOQuery1ItemsTotal: TFloatField;
    ADOQuery1TaxRate: TFloatField;
    ADOQuery1Freight: TFloatField;
    ADOQuery1AmountPaid: TFloatField;
    procedure FormCreate(Sender: TObject);
    procedure RadioGroup1Click(Sender: TObject);
  private
    { Déclarations privées }
  public
    { Déclarations publiques }
  end;



var
  Form1: TForm1;


implementation


{$R *.dfm}


procedureTForm1.FormCreate(Sender: TObject);
begin
  ADOQuery1.Open;
end;


procedure TForm1.RadioGroup1Click(Sender: TObject);
begin
  try
    with ADOquery1.SQL do
    begin
      ADOquery1.close;
      case RadioGroup1.ItemIndex of
        0:
          begin
            Clear;
            Add('Select * from orders ');
            Add('Where PaymentMethod = ''Visa'' ');
          end;

        1:
          begin
            Clear;
            Add('Select * from orders ');
            Add('Where PaymentMethod = ''Credit'' ');
           end;


        2:
          begin
            Clear;
            Add('Select * from orders ');
            Add('Where PaymentMethod = ''MC'' ');
          end;
      end;


      ADOquery1.open;
    end;
  except
    showmessage('erreur');
  end;
end;
end.

Sans refresh, sans update et çà marche nickel




cantador
Commenter la réponse de cs_cantador

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.