IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants VCL Delphi Discussion :

Delphi & DOA


Sujet :

Composants VCL Delphi

  1. #21
    Membre régulier
    Profil pro
    Inscrit en
    Février 2010
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 533
    Points : 124
    Points
    124
    Par défaut
    Citation Envoyé par Linkin Voir le message
    Je proposais la même chose que Shai (TClientDataSet).

    Le principe est d'ajouter un TClientdataSet avec les mêmes champs que ton TOracleDataSet et de copier celui-ci lignes à lignes dans le ClientDataSet
    J'ai relié mon TClientDataSet par :
    - MasterSource = TDataSource
    - DataSet = TOracleDataSet

    Ma question est par contre comment copie t-on un TOracleDataSet ? J'ai cherché sur le net et dans l'aide mais je n'ai pas trouvé ... J'ai voulu essayer de le sauvegarder dans un fichier xml mais la fonction SaveToFile n'existe pas...
    Windows XP
    Delphi 7

    WinDev Mobile 17

  2. #22
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Faut un jour coder, tout n'existe pas déjà tout fait prêt à être utiliser !
    tu le fais à la main !

    un code proche de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
      ClientDataSet.Close();
      ClientDataSet.FieldDefs.Clear();
      // ClientDataSet.FieldDefs.Assign(OracleDataSet.FieldDefs);
      for i := 0 to OracleDataSet.FieldCount - 1 do
         ClientDataSet.FieldDefs.Add(OracleDataSet.Field[i].Name, OracleDataSet.Field[i].DataType, OracleDataSet.Field[i].Size);
     
      ClientDataSet.CreateDataSet();
     
      while not OracleDataSet.EOF do
      begin
        OracleDataSet.Appedn;    
        for i := 0 to OracleDataSet.FieldCount - 1 do
          OracleDataSet.Fields[I].value =  ClientDataSet.Fields[I].value 
     
        OracleDataSet.Next();
        OracleDataSet.Post;    
      end;
    Poisson Frais !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #23
    Membre régulier
    Profil pro
    Inscrit en
    Février 2010
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 533
    Points : 124
    Points
    124
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    tu le fais à la main !

    un code proche de

    ClientDataSet.Close();
    ClientDataSet.FieldDefs.Clear();
    for i := 0 to OracleDataSet.FieldCount - 1 do

    ClientDataSet.FieldDefs.Add('Champ1', ftInteger);
    ClientDataSet.FieldDefs.Add('Champ2', ftString, 10);
    ClientDataSet.FieldDefs.Add('Champ3', ftBoolean);
    ClientDataSet.FieldDefs.Add('Champ4', ftDateTime);
    ClientDataSet.FieldDefs.Add('Champ5', ftWideString, 10);
    ClientDataSet.CreateDataSet();
    Donc en gros je suis obligée de savoir combien j'ai de champs dans ma requête ?
    Y'a pas une autre solution ? Sinon je perd tout le côté dynamique de l'affichage de ma requête...
    Windows XP
    Delphi 7

    WinDev Mobile 17

  4. #24
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Lol, tu as eu le temps de choper mon copier coller de mon appli de test !
    Tu es pressée, tu passes ton temps à attendre que l'on te fasse le boulot ?
    J'ai appuyé sur Entrée, cela m'a validé mon post avant que j'ai eu le temps de finir !
    Regarde ma vrai réponse !
    Poisson Frais !


    Sinon, tu ne fais aucun effort, tu pourrais regarder les mots clé que tu ne connais pas comme FieldDefs tu aurais vu que c'est une collection donc qu'il est possible de la parcourir !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #25
    Membre régulier
    Profil pro
    Inscrit en
    Février 2010
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 533
    Points : 124
    Points
    124
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Faut un jour coder, tout n'existe pas déjà tout fait prêt à être utiliser !
    tu le fais à la main !

    un code proche de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
      ClientDataSet.Close();
      ClientDataSet.FieldDefs.Clear();
      for i := 0 to OracleDataSet.FieldCount - 1 do
         ClientDataSet.FieldDefs.Add(OracleDataSet.Field[i].Name, OracleDataSet.Field[i].DataType, OracleDataSet.Field[i].Size);
     
      ClientDataSet.CreateDataSet();
     
      while not OracleDataSet.EOF do
      begin
        OracleDataSet.Appedn;    
        for i := 0 to OracleDataSet.FieldCount - 1 do
          OracleDataSet.Fields[I].value =  ClientDataSet.Fields[I].value 
     
        OracleDataSet.Next();
        OracleDataSet.Post;    
      end;
    Poisson Frais !
    Je veux bien coder mais je pensais qu'il existait une fonction de copie comme pour un DataSet normal.
    Le .Post me permet de mettre à jour mon OracleDataSet c'est ça ?

    Si je comprend bien ton code tu ajoutes les données de mon OracleDataSet dans mon ClientDataSet à partir duquel tu crées un DataSet et puis tu remets toutes ces valeurs dans mon OracleDataSet..
    c'est ça ?

    Et du coup c'est quand même mon OracleDataSet qui est relié à mon DataSource ?
    Windows XP
    Delphi 7

    WinDev Mobile 17

  6. #26
    Membre régulier
    Profil pro
    Inscrit en
    Février 2010
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 533
    Points : 124
    Points
    124
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Lol, tu as eu le temps de choper mon copier coller de mon appli de test !
    J'ai appuyé sur Entrée, cela m'a validé mon post avant que j'ai eu le temps de finir !
    Regarde ma vrai réponse !

    Sinon, tu ne fais aucun effort, tu pourrais regarder les mots clé que tu ne connais pas comme FieldDefs tu aurais vu que c'est une collection donc qu'il est possible de la parcourir !
    J'ai regardé pour FieldDefs mais c'est pas pour autant que j'ai compris ... oui j'ai vu après ta vraie réponse j'essaie de la mettre en place... en lisant les mots clés bien sûr !
    Windows XP
    Delphi 7

    WinDev Mobile 17

  7. #27
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    En plus faut que le code soit parfait !

    Tu aurais pu déduire toi même qu'en tapant vite fait ce code pour toi, j'ai commis une erreur de copier-coller !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    ClientDataSet.Close();
      ClientDataSet.FieldDefs.Clear();
      // ClientDataSet.FieldDefs.Assign(OracleDataSet.FieldDefs); 
      for i := 0 to OracleDataSet.FieldCount - 1 do
         ClientDataSet.FieldDefs.Add(OracleDataSet.Field[i].Name, OracleDataSet.Field[i].DataType, OracleDataSet.Field[i].Size);
     
      ClientDataSet.CreateDataSet();
     
      while not OracleDataSet.EOF do
      begin
        ClientDataSet.Appedn;    
        for i := 0 to OracleDataSet.FieldCount - 1 do
          ClientDataSet.Fields[I].value =  OracleDataSet.Fields[I].value 
        ClientDataSet.Post;    
     
        OracleDataSet.Next();
      end;
    Post, cela valide l'enregistrement en cours, c'est une fonction cruciale à maitriser ! tu ne devrais même pas poser la question !

    Si j'avais posé autant de question lorsque j'étais stagiaire (oui je suis passé par là aussi, en tant qu'apprenti), je n'en serais pas où j'en suis aujourd'hui !
    Débrouille un peu plus !
    Soit plus autonome !
    Consulte l'aide !
    Si tu ne comprends pas l'aide et que tu proposes une tentative cohérente de code mais incomplète on sera ravi de t'aider !
    Ce n'est pas nous qui passerons ton diplôme (en même temps, je me rappelle le mien, n'importe quel débile peut avoir un DUT d'informatique en étant bon en anglais, math, gestion)
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  8. #28
    Membre régulier
    Profil pro
    Inscrit en
    Février 2010
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 533
    Points : 124
    Points
    124
    Par défaut
    Mais j'essaie juste de comprendre ... je débute !
    Je recopie pas bêtement ton code d'où mes questions avant de le tester, enfin en compilant je comprendrais peut être je te tiens au courant.
    Windows XP
    Delphi 7

    WinDev Mobile 17

  9. #29
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Pendant mes 3 ans d'étude, je n'ai pas posé une seule question sur un Forum !
    Je pense que lorsque l'on est débutant en informatique, il faut d'abord savoir chercher : Guide du développeur Delphi devant un problème
    Ce qui compte c'est la démarche de la recherche !
    On apprend plus que l'on voulait en savoir au départ !

    Je m'en rappelle comme si c'était hier !
    Ma 1ère question ce fut au bout de 4 mois de CDI après ma licence, sur "comment retirer les octets parasites dans un record échangé par Socket TCP\IP via SendBuf\ReceiveBuf entre Delphi et VS C++", j'ai finalement trouvé ma réponse tout seul sur la gestion de l'alignement des record et le mot clé packed, merci à l'unité Windows.pas et son TMsg, je m'étais dit que l'utilisation de DLL devait neccessité une compatibilité des langages !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  10. #30
    Membre régulier
    Profil pro
    Inscrit en
    Février 2010
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 533
    Points : 124
    Points
    124
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    procedure CopieDataSet(OracleDataSet : TOracleDataSet; ClientDataSet : TClientDataSet);
    var
      i : integer;
    begin
    ClientDataSet.Close();
    ClientDataSet.FieldDefs.Clear();
      // ClientDataSet.FieldDefs.Assign(OracleDataSet.FieldDefs);
    for i := 0 to OracleDataSet.FieldCount - 1 do
      ClientDataSet.FieldDefs.Add(OracleDataSet.Fields[i].Name, OracleDataSet.Fields[i].DataType, OracleDataSet.Fields[i].Size);
      ClientDataSet.CreateDataSet();
      while not OracleDataSet.Eof do
      begin
        ClientDataSet.Append;
        for i := 0 to OracleDataSet.FieldCount - 1 do
          ClientDataSet.Fields[I].Value := OracleDataSet.Fields[I].Value;
          ClientDataSet.Post;
          OracleDataSet.Next;
      end;
    end;
    j'ai mis en place le code en corrigeant les fautes de frappe :
    J'execute mais ça me fait l'erreur sur le ClientDataSet.FieldDefs.Add... Nom de Champ Manquant...
    Windows XP
    Delphi 7

    WinDev Mobile 17

  11. #31
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    .FieldName

    Je fais la même erreur à chaque fois !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  12. #32
    Membre régulier
    Profil pro
    Inscrit en
    Février 2010
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 533
    Points : 124
    Points
    124
    Par défaut
    Exact je te remercie...
    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, Grids, DBGrids, StdCtrls, Oracle, DB, OracleData, DBClient;
     
    type
      Tfrm_TestConnectOracleDBGrid = class(TForm)
        bt_Connect: TButton;
        bt_Req: TButton;
        DBGrid1: TDBGrid;
        bt_Quitter: TButton;
        OracleSession1: TOracleSession;
        OracleDataSet1: TOracleDataSet;
        DataSource1: TDataSource;
        bt_Deco: TButton;
        OracleLogon1: TOracleLogon;
        ClientDataSet: TClientDataSet;
        procedure bt_QuitterClick(Sender: TObject);
        procedure bt_ConnectClick(Sender: TObject);
        procedure bt_ReqClick(Sender: TObject);
        procedure bt_DecoClick(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
       // procedure CopieDataSet(OracleDataSet : TOracleDataSet; ClientDataSet : TClientDataSet);
      end;
     
    var
      frm_TestConnectOracleDBGrid: Tfrm_TestConnectOracleDBGrid;
      username : String;
      password : String;
      database : String;
      procedure CopieDataSet(OracleDataSet : TOracleDataSet; ClientDataSet : TClientDataSet);
    implementation
     
    {$R *.dfm}
     
    procedure Tfrm_TestConnectOracleDBGrid.bt_QuitterClick(Sender: TObject);
    begin
    frm_TestConnectOracleDBGrid.Close;
    end;
     
    procedure Tfrm_TestConnectOracleDBGrid.bt_ConnectClick(Sender: TObject);
    begin
    OracleLogon1.Execute;
    username := OracleSession1.LogonUsername;
    password := OracleSession1.LogonPassword;
    database := OracleSession1.LogonDatabase;
    end;
     
    procedure Tfrm_TestConnectOracleDBGrid.bt_ReqClick(Sender: TObject);
    begin
    if OracleSession1.Connected = True then
      begin
      OracleDataSet1.Open;
      CopieDataSet(OracleDataSet1, ClientDataSet);
      ClientDataSet.Open;
      end
    else
      begin
      OracleSession1.LogonUsername := username;
      OracleSession1.LogonPassword := password;
      OracleSession1.LogonDatabase := database;
      OracleSession1.LogOn;
      OracleDataSet1.Open;
      ClientDataSet.Open;
      end;
    OracleSession1.LogOff;
    end;
     
    procedure Tfrm_TestConnectOracleDBGrid.bt_DecoClick(Sender: TObject);
    begin
      OracleSession1.LogOff;
    end;
     
    procedure CopieDataSet(OracleDataSet : TOracleDataSet; ClientDataSet : TClientDataSet);
    var
      i : integer;
    begin
    ClientDataSet.Close();
    ClientDataSet.FieldDefs.Clear();
      // ClientDataSet.FieldDefs.Assign(OracleDataSet.FieldDefs);
    for i := 0 to OracleDataSet.FieldCount - 1 do
      ClientDataSet.FieldDefs.Add(OracleDataSet.Fields[i].FieldName, OracleDataSet.Fields[i].DataType, OracleDataSet.Fields[i].Size);
      ClientDataSet.CreateDataSet();
      while not OracleDataSet.Eof do
      begin
        ClientDataSet.Append;
        for i := 0 to OracleDataSet.FieldCount - 1 do
          ClientDataSet.Fields[I].Value := OracleDataSet.Fields[I].Value;
          ClientDataSet.Post;
          OracleDataSet.Next;
      end;
    end;
     
    end.
    Mais cela ne m'affiche toujours pas ma requête
    Windows XP
    Delphi 7

    WinDev Mobile 17

  13. #33
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Tu avais oublié le CopieDataSet de la 1ere connection (vu que tu la ferme à chaque fois, cela ne devait jamais fonctionné)

    Voici un code plus court et fonctionnel !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    procedure Tfrm_TestConnectOracleDBGrid.bt_ReqClick(Sender: TObject);
    begin
      if not OracleSession1.Connected then
      begin
        OracleSession1.LogonUsername := username;
        OracleSession1.LogonPassword := password;
        OracleSession1.LogonDatabase := database;
        OracleSession1.LogOn;
      end;
     
      // OracleDataSet1.SQL.Text := 'SELECT * FROM Toto';
      OracleDataSet1.Open;
      CopieDataSet(OracleDataSet1, ClientDataSet);
      DBGrid1.DataSource.DataSet := ClientDataSet;
     
      OracleSession1.LogOff;
    end;
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  14. #34
    Membre régulier
    Profil pro
    Inscrit en
    Février 2010
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 533
    Points : 124
    Points
    124
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, Grids, DBGrids, StdCtrls, Oracle, DB, OracleData, DBClient;
     
    type
      Tfrm_TestConnectOracleDBGrid = class(TForm)
        bt_Connect: TButton;
        bt_Req: TButton;
        DBGrid1: TDBGrid;
        bt_Quitter: TButton;
        OracleSession1: TOracleSession;
        OracleDataSet1: TOracleDataSet;
        DataSource1: TDataSource;
        bt_Deco: TButton;
        OracleLogon1: TOracleLogon;
        ClientDataSet: TClientDataSet;
        procedure bt_QuitterClick(Sender: TObject);
        procedure bt_ConnectClick(Sender: TObject);
        procedure bt_ReqClick(Sender: TObject);
        procedure bt_DecoClick(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
       // procedure CopieDataSet(OracleDataSet : TOracleDataSet; ClientDataSet : TClientDataSet);
      end;
     
    var
      frm_TestConnectOracleDBGrid: Tfrm_TestConnectOracleDBGrid;
      username : String;
      password : String;
      database : String;
      procedure CopieDataSet(OracleDataSet : TOracleDataSet; ClientDataSet : TClientDataSet);
    implementation
     
    {$R *.dfm}
     
    procedure Tfrm_TestConnectOracleDBGrid.bt_QuitterClick(Sender: TObject);
    begin
    frm_TestConnectOracleDBGrid.Close;
    end;
     
    procedure Tfrm_TestConnectOracleDBGrid.bt_ConnectClick(Sender: TObject);
    begin
    OracleLogon1.Execute;
    username := OracleSession1.LogonUsername;
    password := OracleSession1.LogonPassword;
    database := OracleSession1.LogonDatabase;
    end;
     
    procedure Tfrm_TestConnectOracleDBGrid.bt_ReqClick(Sender: TObject);
    begin
      if not OracleSession1.Connected then
      begin
        OracleSession1.LogonUsername := username;
        OracleSession1.LogonPassword := password;
        OracleSession1.LogonDatabase := database;
        OracleSession1.LogOn;
      end;
     
      OracleDataSet1.Open;
      CopieDataSet(OracleDataSet1, ClientDataSet);
      DBGrid1.DataSource := ClientDataSet.DataSource;
     
      OracleSession1.LogOff;
    end;
     
    procedure Tfrm_TestConnectOracleDBGrid.bt_DecoClick(Sender: TObject);
    begin
      OracleSession1.LogOff;
    end;
     
    procedure CopieDataSet(OracleDataSet : TOracleDataSet; ClientDataSet : TClientDataSet);
    var
      i : integer;
    begin
    ClientDataSet.Close();
    ClientDataSet.FieldDefs.Clear();
      // ClientDataSet.FieldDefs.Assign(OracleDataSet.FieldDefs);
    for i := 0 to OracleDataSet.FieldCount - 1 do
      ClientDataSet.FieldDefs.Add(OracleDataSet.Fields[i].FieldName, OracleDataSet.Fields[i].DataType, OracleDataSet.Fields[i].Size);
      ClientDataSet.CreateDataSet();
      while not OracleDataSet.Eof do
      begin
        ClientDataSet.Append;
        for i := 0 to OracleDataSet.FieldCount - 1 do
          ClientDataSet.Fields[I].Value := OracleDataSet.Fields[I].Value;
          ClientDataSet.Post;
          OracleDataSet.Next;
      end;
    end;
     
    end.
    J'ai remplacé ton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DBGrid1.DataSource := ClientDataSet;
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DBGrid1.DataSource := ClientDataSet.DataSource;
    je pense ne pas m'être trompé...
    Cependant mon grid se vide toujours...
    Et ma migraine augmente
    Windows XP
    Delphi 7

    WinDev Mobile 17

  15. #35
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Si tu t'es trompé !
    Ne bricole pas ! Reflechi !

    en plus je n'ai pas écrit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DBGrid1.DataSource := ClientDataSet;
    mais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DBGrid1.DataSource.DataSet := ClientDataSet;
    Cette ligne permet de corriger ton oubli évident que tu n'as pas changé OracleDataSet dans DataSource1 par ClientDataSet, et comme tu connectes les composants n'importe comment !

    En te relisant MasterSource ne doit pas être modifié, c'est pour gérer les relations entre les tables, n'utilise pas n'importe comment les propriétés, si tu dois passer 8 heures à lire l'aide ! fait le ou change de métier !

    Utilise ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    OracleDataSet1.Open;
    CopieDataSet(OracleDataSet1, ClientDataSet);
    DBGrid1.DataSource := DataSource1;
    DBGrid1.DataSource.DataSet := ClientDataSet;
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  16. #36
    Membre régulier
    Profil pro
    Inscrit en
    Février 2010
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 533
    Points : 124
    Points
    124
    Par défaut
    Oh mon dieu !! Je suis vraiment désolée j'aurais dû refaire le copier coller qu'elle boulette !! Je comprend pas comment j'ai fait ! Toutes mes excuses.

    Après modif et exécution superbe message d'erreur :
    "DataSource1 : Liaison de données circulaires non autorisées"
    Windows XP
    Delphi 7

    WinDev Mobile 17

  17. #37
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Tu devrais déconnecter tous composants dans l'IDE en particulier MasterSource !


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    OracleDataSet1.MasterSource := nil;
    ClientDataSet.MasterSource := nil;
    OracleDataSet1.Open;
    CopieDataSet(OracleDataSet1, ClientDataSet);
    DataSource1.DataSet := ClientDataSet;
    DBGrid1.DataSource := DataSource1
    ;
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  18. #38
    Membre régulier
    Profil pro
    Inscrit en
    Février 2010
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 533
    Points : 124
    Points
    124
    Par défaut
    Yahooooooooooooooooooooo !!!!
    Super ça fonctionne merci mille fois !!

    Par contre c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      OracleDataSet1.Master := nil;
    (j'ai vérifié avant )

    Merci
    Windows XP
    Delphi 7

    WinDev Mobile 17

  19. #39
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Essaye de corriger dans l'IDE de façon à retirer les deux "... := nil"

    ?
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  20. #40
    Membre régulier
    Profil pro
    Inscrit en
    Février 2010
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 533
    Points : 124
    Points
    124
    Par défaut
    Je sens que je vais me faire gronder mais l'IDE c'est dans l'inspecteur d'objet tu veux dire ?
    Pour moi c'est l'interface Delphi mais bon je l'ai jamais appelé IDE donc c'est pour être sûre

    Sinon oui résolu même si j'ai malgré tout une petite question

    Du coup maintenant on m'a demandé d'essayer de faire donc une zone de texte pour saisir une requête à la main et ainsi remplir mon DataGrid...
    J'ai donc mis une zone de texte et fait un bouton OK avec ce petit code pour commencer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure Tfrm_TestConnectOracleDBGrid.btnOKClick(Sender: TObject);
    begin
      ShowMessage(txtRequete.Text);
      OracleDataSet1.SQL.Add(txtRequete.Text);
      OracleDataSet1.Open;
    end;
    et j'ai une erreur ORA-00933 : la commande SQL ne se termine pas correctement alors que ma commande SQL est toute bête :

    J'ai essayé avec un ; mais je vois pas ce qu'il n'arrive pas à gérer là ...
    Windows XP
    Delphi 7

    WinDev Mobile 17

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 3 PremièrePremière 123 DernièreDernière

Discussions similaires

  1. Delphi 7 et DOA : valeurs nulles
    Par delphim dans le forum Bases de données
    Réponses: 4
    Dernier message: 16/11/2004, 09h18
  2. [delphi 7 / DOA] valeur null dans setvariable
    Par delphim dans le forum Bases de données
    Réponses: 1
    Dernier message: 05/11/2004, 10h14
  3. Réponses: 4
    Dernier message: 27/03/2002, 11h03
  4. Réponses: 2
    Dernier message: 20/03/2002, 23h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo