Comment initialiser la propriété DecimalDeparator dans un SQLConnection, par du code ?
(sachant que je me connecte à une bdd Oracle).
Dans l'inspecteur d'objets, la propriété est bien présente, mais je ne vois pas comment l'initialiser par code.
Comment initialiser la propriété DecimalDeparator dans un SQLConnection, par du code ?
(sachant que je me connecte à une bdd Oracle).
Dans l'inspecteur d'objets, la propriété est bien présente, mais je ne vois pas comment l'initialiser par code.
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)
Pour Oracle, je passe par ces requêtes pour déterminer le format de valeurs, après la connexion du TSQLConnection (parce qu'en Delphi 7 je n'ai pas de propriété DecimalSeparator):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 'ALTER SESSION SET NLS_DATE_FORMAT=''DD/MM/YYYY HH24:MI:SS''' 'ALTER SESSION SET NLS_NUMERIC_CHARACTERS = ". "'
Delphi 7/XE2/XE3
C#
Oracle 9i à 12c
SQL Server 2008 à 2014
C'est ce que je fais dans une fonction appelée à la connexion pour le NLS_NUMERIC_CHARACTERS. Et je cherchais à modifier le DecimalSeparator du SQLConnection, juste après, pour le mettre en conformité.
A moins que ça ne soit pas nécessaire.
Mais, pour l'instant, quand je ne spécifiais pas de valeur pour le DecimalSeparator, j'avais des problèmes lors de mes requêtes.
Si imposer le NLS_NUMERIC_CHARACTERS suffit, mon problème est résolu.
Je creuse ...
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)
ALors, imposer le NLS_NUMERIC_CHARACTERS est utile pour une exécution correcte du SQL; mais par contre je bute sur un autre problème :
Il y a des postes (tous sauf le mien, en fait ) qui m'affiche mal les nombres à virgule.
7,38 sur mon poste, s'affiche 738 sur d'autres. Ce qui est assez génant.
Y a t'il un autre paramétrage à faire ?
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)
Le sujet n'a pas l'air d'intéresser grand monde en cette période estivale.
Pour ma part j'ai en plus
Par contre, je n'affiche jamais directement les résultats dans des composants DB. Je créé des listes d'objets et c'est à partir de ces listes que j'affiche les résultats. Mes champs sont es NUMBER(28,5) et je les récupère avec des AsFloat.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2Application.UpdateFormatSettings:=False;
Delphi 7/XE2/XE3
C#
Oracle 9i à 12c
SQL Server 2008 à 2014
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)
Perso, je n'ai eu pas de problème en D7 avec Oracle
Pourquoi ce besoin de modifier le séparateur décimal ?
Pour les Flottants et les Dates, je ne génère JAMAIS le SQL, je passe par un paramètre puis un AsFloat ou AsDate sur le ParamByName !
Pourquoi s'embetter avec FloatToStr ou FormatDateTime lors que l'objet TParam, le fait très bien !
Trop risqué de se poser la question sur le séparateur décimal, le "prepare statement" fait nettement mieux le travail que nous !
Code : Sélectionner tout - Visualiser dans une fenêtre à part SELECT * FROM TABLE WHERE Valeur > :ValeurFlottanteTu peux procéder ainsi pour un INSERT ou UPDATE aussi !
Code : Sélectionner tout - Visualiser dans une fenêtre à part Query.FieldByName('ValeurFlottante').AsFloat := StrToFloat(Edit.Text);
Par contre, pour les Post depuis un DataSet, normalement, il n'y a pas de problème, c'est surtout pour du SQL manuel
Pour la Couche Objet Métier (InstantObjects, ECO, Bold ,...), rien n'empeche d'avoir des Composants DB lié à un Objet, j'ai fait ma propre couche de persistance, donc j'ai une certains expérience, c'est dommage de se priver des composants DB, en reprenant l'exemple du TMemoryDataSet sur Dev.com on peut faciler mapper un objet avec tous les composants DB, le TMemoryDataSet n'étant qu'un adaptateur sur l'objet Persistant ou une Collection d'objet Persistant (et gérer le LazyLoading est très important, les objets ne devant être créé qu'au moment opportun)
Bon, perso, j'ai fait mon propre système d'affichage (pour gérer le mapping un objet et des controls non DB), et avec le recul, je me dit que j'aurais pu mieux faire (surtout plus simple via ce TDataSetObjectAdapter)
C'est souvent le problème, sur Delphi, dès que l'on pousse le O/R Mapping un peu loin, faut toujours refaire la roue carrée ! moi la mienne approche de l'hexagone, c'est déjà pas si mal
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 non plus en D6 avec le BDE.
Pour pouvoir utiliser les procédures stockées (http://www.developpez.net/forums/d16...bcd-cest-quoi/).
Moi aussi, généralement.
Mais, ca ne change pas mon problème d'affichage.
C'est ce que je faisais sous D6 avec le BDE.
Avec DBExpress sous D2010, pour une procédure stockée (par exemple), ca donne :Trop compliqué pour moi de ré-inventer des composants.
Code : Sélectionner tout - Visualiser dans une fenêtre à part SQLStoredProc.ParamByName('QuantiteFabriquee').AsFMTBCD := DoubleToBcd(1.38);
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)
Salut Ludwig,
Et voila :
En fait il faut faire attention car le nom de paramètres dans l'inspecteur d'objets n'est pas forcément le même que celui qu'on retrouve dans Params. La preuve avec le Decimal Separator, dans l'inspecteur d'objet sans espace et avec un espace dans Params.
Code : Sélectionner tout - Visualiser dans une fenêtre à part SQLConnection1.Params.Values['Decimal Separator']:='.';
Donc le mieux c'est une petite boucle pour tester tous les paramètres, pour pouvoir vérifier le nom de chaque paramètre :
Chaque ligne apparaitra alors sous la forme :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 for i := 0 to SQLConnection1.Params.Count - 1 do begin showmessage(SQLConnection1.Params[i]); end;La partie gauche avant le = est donc le nom du paramètre.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Decimal Separator=,
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 viens de refaire un test et j'ai remarqué quelque chose de bizarre. Si à la conception dans Decimal Separator je mets "." alors mon paramètre n'apparait pas. Par contre si je mets "," alors il apparait bien.
Je suppose que le "." doit être le spéarateur par défaut et que c'est pour ça qu'il doit le supprimer.
Donc fais un test avec la virgule et là tu dois le voir.
Effectivement !
Si je spécifie le séparateur de Windows (la virgule sur mon poste), il n'apparait pas dans la liste des paramètres. Mais, sinon oui.
Un problème de résolu.
Par contre, j'ai encore mon problème d'affichage.
Sur mon poste, les nombres à virgule apparaissent bien avec la virgule dans une DBGrid, mais pas sur d'autres postes.
7,38 devient 738
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)
- Pour Oracle, les paramètres sont différents, mais je modifie la session Oracle pour cette raison, après la connexion :- Pour Windows, on est tous en Français(France) avec la virgule en séparateur décimal. Donc SysUtils.DecimalSeparator est identique.
Code : Sélectionner tout - Visualiser dans une fenêtre à part SQLQuery.SQL.Add('alter session set NLS_NUMERIC_CHARACTERS = ''' + DecimalSeparator + ThousandSeparator + '''');
- Pour DBExpress, je ne sais pas où regarder. Il n'y a rien en rapport dans les deux fichiers INI dbxconnections.ini et dbxdrivers.ini
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)
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