Il ne manque pas un Clear ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 ShowMessage(txtRequete.Text); OracleDataSet1.SQL.Clear; OracleDataSet1.SQL.Add(txtRequete.Text); OracleDataSet1.Open;
Il ne manque pas un Clear ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 ShowMessage(txtRequete.Text); OracleDataSet1.SQL.Clear; OracleDataSet1.SQL.Add(txtRequete.Text); OracleDataSet1.Open;
L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ Écrivez dans un français correct !!
C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.1 Entreprise
OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.4)
Je suis sur que TestADO2.zip que j'ai fait pour un autre sujet devrait te plaire
c'est ADO et non DOA, il faut changer la chaine de connexion pour utiliser ton DSN Oracle !
Cela peut t'inspirer
Question conne : "param2" c'est le nom d'une table ?
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
Oui il manquait le .Clear merci
Par contre si je veux re-saisir une requête cela ne fonctionne pas et em garde mon ancienne j'ai tenté un :
Mais sans succès...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 procedure Tfrm_TestConnectOracleDBGrid.btnOKClick(Sender: TObject); begin DBGrid1.CleanupInstance; OracleDataSet1.SQL.Clear; OracleDataSet1.SQL.Add(txtRequete.Text); OracleDataSet1.Open; end;
Oui param2 c'est le nom d'une table paramètre il me semble (on m'a donné la requête pour que je teste).
Oui je pense que je vais jeter un coup d'oeil j'ai commencé à regarder hier pour DBExpress où il s'agissait de sauvegarder dans un fichier xml et de recharger ensuite dans le DBGrid ... Mais dans la fenêtre de connexion qu'ils proposent on ne peut sélectionner la base de données...enfin je n'ai pas pousssé plus loin pour le moment...
Pourquoi tu me conseilles plutôt ADO que DOA ? DOA avait l'air bien foutu après je sais pas du tout ... je comptais tous les tester avant de choisir...
Tu as le lien du sujet ? J'ai récupéré le .zip mais je n'arrive pas à accéder au sujet...
Windows XP
Delphi 7
WinDev Mobile 17
Euh, tu as lu l'aide de CleanupInstance
C'est une fonction qu'il ne faut typiquement pas utilisé !
Pitié, arrête de tenter des trucs au pif !
Le marché de l'informatique est saturé de développeur médiocre, évite d'en devenir une, pour le moment ... c'est mal parti !
tu n'as pas compris que le DBGrid n'est qu'une "vue" du DataSet lié au DataSource !Achève de libérer les chaînes longues, les variants et les variables d'interface d'une classe.
void __fastcall CleanupInstance();
Description
N'appelez pas directement la méthode CleanupInstance. CleanupInstance est appelée automatiquement quand l'instance d'objet est détruite à l'aide du mot clé delete.
CleanupInstance libère toutes les chaînes longues et les variants. Elle définit à vide les chaînes longues et les variants à Unassigned.
Open pour afficher, donc Close pour masquer
Version ClientDataSet;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 procedure Tfrm_TestConnectOracleDBGrid.btnOKClick(Sender: TObject); begin OracleDataSet1.Close; OracleDataSet1.SQL.Text := txtRequete.Text; DataSource1.DataSet := OracleDataSet1; DBGrid1.DataSource := DataSource1; OracleDataSet1.Open; end;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 procedure Tfrm_TestConnectOracleDBGrid.btnOKClick(Sender: TObject); begin ClientDataSet.Close; DataSource1.DataSet := ClientDataSet; DBGrid1.DataSource := DataSource1; OracleDataSet1.Close; OracleDataSet1.SQL.Text := txtRequete.Text; OracleDataSet1.Open; CopieDataSet(OracleDataSet1, ClientDataSet); OracleDataSet1.Close; // une fois la copie effectué, on ferme // ClientDataSet est lui ouvert par CreateDataSet dans CopieDataSet end;
Le sujet concerne l'utilisation d'Image dans un BLOB avec ADO, tu n'es pas encore prête pour cela !
Mon exemple était pour montrer les diverses solutions pour utiliser une Query !
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
Merci pour de développeur médiocre c'est vrai que quand on est stagiaire et pas encore complètement dans le monde du travail on a vraiment besoin d'entendre ça...
Si j'avais compris pour le datasource et modifié mon code en conséquence avant ta réponse, mais pour le cleanupinstance il me semblait l'utiliser quand j'étais en BTS c'est pour ça que j'ai pas regardé l'aide, mais j'aurais dû apparemment.
Merci ça fonctionne!
Code fini :
Tu penses que ADO est mieux que DOA ?
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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138 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; txtRequete: TEdit; btnOK: TButton; procedure bt_QuitterClick(Sender: TObject); procedure bt_ConnectClick(Sender: TObject); procedure bt_ReqClick(Sender: TObject); procedure bt_DecoClick(Sender: TObject); procedure btnOKClick(Sender: TObject); private { Déclarations privées } public { Déclarations publiques } 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; ShowMessage('Connecté'); end; OracleDataSet1.Close; OracleDataSet1.SQL.Text := 'Select * from entxres'; DataSource1.DataSet := OracleDataSet1; DBGrid1.DataSource := DataSource1; OracleDataSet1.Open; CopieDataSet(OracleDataSet1, ClientDataSet); OracleDataSet1.Master := nil; ClientDataSet.MasterSource := nil; DataSource1.DataSet := ClientDataSet; DBGrid1.DataSource := DataSource1; OracleDataSet1.Close; OracleSession1.LogOff; ShowMessage('Déconnecté'); end; procedure Tfrm_TestConnectOracleDBGrid.bt_DecoClick(Sender: TObject); begin OracleSession1.LogOff; ShowMessage('Déconnecté'); end; procedure CopieDataSet(OracleDataSet : TOracleDataSet; ClientDataSet : TClientDataSet); var i : integer; begin ClientDataSet.Close(); ClientDataSet.FieldDefs.Clear(); 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; procedure Tfrm_TestConnectOracleDBGrid.btnOKClick(Sender: TObject); begin if not OracleSession1.Connected then begin OracleSession1.LogonUsername := username; OracleSession1.LogonPassword := password; OracleSession1.LogonDatabase := database; OracleSession1.LogOn; ShowMessage('Connecté'); end; OracleDataSet1.Close; ClientDataSet.Close; OracleDataSet1.SQL.Text := txtRequete.Text; DataSource1.DataSet := OracleDataSet1; DBGrid1.DataSource := DataSource1; OracleDataSet1.Open; CopieDataSet(OracleDataSet1, ClientDataSet); OracleDataSet1.Master := nil; ClientDataSet.MasterSource := nil; DataSource1.DataSet := ClientDataSet; DBGrid1.DataSource := DataSource1; OracleDataSet1.Close; OracleSession1.LogOff; ShowMessage('Déconnecté'); end; end.
Windows XP
Delphi 7
WinDev Mobile 17
Tu n'as tout lu !
Tu ne l'es pas encore, tu redresse la barre !... évite d'en devenir une ...
Et puis après tout, je suis un TROLL Mechant !
J'ai fait un DUT et une licence Pro, 3 ans d'apprentissage, stagiaire je connais !...quand j'étais en BTS ...
La seule chose utile que j'ai appris en 3 ans à l'école fut la recursivité, j'ai codé un explorateur de base de registre en pur itératif (mon 3eme projet d'entreprise servant à nettoyer la BDR parce Delphi 4 laissait trainer plein de truc), c'était bien lent et compliqué, après le cours sur la récursivité, j'ai peu diviser par 5 le temps du code !
J'ai appris plus en 2 mois en entreprise que 3 ans à l'école !
Le pire cela été les cours de Delphi en licence, j'ai séché les 3er TP de Delphi pour aller au Bureau (faire du vrai code en delphi), j'ai eu un bon zéro pointé, j'ai demandé au prof si je pouvais faire les 4 TP durant le temps du 4eme, je pense que j'ai baclé 16h de TP en 2h avec un bon 18/20 (je crois qu'il ma mis -2 parce que j'avais corrigé des erreurs dans sa Tortue)
Oubli ton BTS, tu vas maintenant apprendre la vraie programmation des véritables entreprises qui doivent boucler des projets sous-vendus, sous-côtés à livrer la veille !
Je ne connais pas DOA !
Comme il est dédié à Oracle, il est théoriquement plus rapide !
Surtout le TOracleQuery qui n'est pas un TDataSet, normalement, si il est codé correctement, on peut espérer un gain x2 ou x3 sur la récupération des données d'un SELECT !
ADO étant fourni avec Delphi depuis plus de 10 ans (vraiment stable à partir de la 7), je n'ai jamais cherché ailleurs !
En ce moment, je découvre DBExpress et Sybase, je dirais que c'est comme toutes les lib DB, cela n'as pas un grand intérêt, la DB c'est chiant, le SQL c'est très utile mais vraiment pas fun du tout !
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
Moi j'ai suivi tous les tp et tout mais bon ça remonte a y'a 3 ans et j'en reviens pas de la vitesse à laquelle on oublie !! Mais oui je suis d'accord avec toi l'apprentissage cours et entreprise est différent et je sais que je suis trop scolaire je vais m'améliorer mais ça se fera pas comme ça, merci de ton aide en tout cas.
Pour DOA c'est vrai que la rapidité m'intéresse, parce qu'en fait ce sont des scanners qui vont lire des codes barres pour interroger une base de données : beaucoup de scanners : beaucoup d'interrogation de base il faut que ce soit transparent pour l'utilisateur... et intuitif...
Genre la fenêtre de connexion LogOn que propose DOA est super bien pour l'utilisateur quoi il peut mettre login mot de passe et choisir une base de donnée...
Mais je regarde ton programme pour me donner une idée...
Windows XP
Delphi 7
WinDev Mobile 17
Qu'est-ce que beaucoup ?
Un de mes programmes servers devait lancer entre 20 et 50 requêtes par seconde, pour piloter un sytème de triage de vêtement (~7000 article/h)
Le tout sous BDE\Paradox (au bout de 24h de ce traitement, le BDE plantait), la recherche dans la table article des code-barre était désastreuses, heureusement, je n'avais jamais plus de 1000 références simultanément, ce qui permettait d'avoir un mini catalogue calculé en fonction des commandes a dispatcher, une recherche sur 1000 contre 300000, il n'y a pas photo !
Impact d'un SELECT sur une table de 1000 à 300000 records !
Paradox, EAN13 en CHAR(13), c'est 1 ms à 120 secondes (même avec Index)
Paradox, EAN13 en 2 Champs INT, c'est 1 ms à 30 secondes
Machine : P4 1,6Ghz 1Go RAM - Win2K SP4
Avec MySQL 4.1, EAN13 en CHAR(13), c'est 0,5 ms à 5 ms
Avec MySQL 4.1, EAN13 en LargeInt, c'est 0,1 ms à 1 ms
Machine : P4 1,4Ghz 512Mo RAM - Win2K SP2
Même un vieux MySQL 4.1 fourni déjà des temps formidable !
sur un vrai server avec un MySQL 5 bien configuré, les temps sont évidemment meilleure !
Toujours tester sur la machine la plus pourri du parc !
Je connais certains développeur qui doivent utiliser des Octo-Core et 8Go RAM pour faire tourner de petite application PHP !
Un Développeur Delphi doit savoir affontrer un Win2K obselète du client mais aussi le WinSvr2008 d'un autre client !
Avec Oracle, tu ne devrais pas avoir de soucis, c'est conçu pour les grands volumes !
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
Ok je te remercie pour ces informations !
Windows XP
Delphi 7
WinDev Mobile 17
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager