|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Invité de passage
![]() |
Bonjour à tous,
Je développe une application client serveur avec une base sous fire Bird (Alterna. D’Interbase). Je possède plusieurs tables (évidemment ) composées de champs de type char et de dimensions différentes. Jusque là, rien de spécial… L’application est développée sous Delphi via les composant interbase. A plusieurs moments, j’insert et je récupère des données de la base via des Tedit ou de Tmemo. Code :
Code :
Si le champ est du type memo, pas de problème, la chaîne renvoyée est nickel. Mais si elle d’un type char(X), la chaîne renvoyée est bonne mais elle concaténée d’espace jusqu’à la taille maximum (X) Exemple : si j’ai un champ Cli_nom char(50), Et que je lui affecte la chaine ‘developpez.com’ La valeur renvoyée par : IBQuery.FieldByName(‘Cli_Nom’).AsString Sera ‘developpez.com________________________________________‘ et non ‘developpez.com’, je trouve ça dommage de devoir traiter les chaîne à chaque lecture ! Existe t’il un moyen de remédier à ce problème ou ce problème est un fait ? Merci d'avance...[/u][/b][/code]
|
||||
|
|
00
|
|
|
#2 |
|
Membre régulier
![]() Inscription : avril 2002 Messages : 70 ![]() |
Ton erreur est plutôt normal. En fait ce n'est pas une erreur. Tu peux utiliser deux types pour les chaînes de caractères (CHAR ou VARCHAR).
CHAR: renvoit toujours le nombre maximum de caractères. Si la longueur est de 10, alors tu récupères 10 caractères. VARCHAR: renvoit toujours le nombre de caractères requit. Si la longueur est 10, et que tu as besoin que de 3 caractères, tu récupères 3 caractères. Soi tu utilises la fonction trunc avec char ou tu changes ton type char pour varchar. Bonne journée ! |
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() |
hummm "dakor"
Merci à toi Dihap ... |
|
|
00
|
|
|
#4 |
|
Membre régulier
![]() Inscription : avril 2002 Messages : 70 ![]() |
Mais de rien
|
|
|
00
|
|
|
#5 |
|
Membre du Club
![]() Inscription : mars 2003 Messages : 44 ![]() |
pour pousser un poil plus loin les explications :
char ou varchar ? niveau taille mémoire : ~equivalent si tu comptes faire des recherches sur ce champ, ou ordonner dessus : utilise char si tu comptes avoir un champ de taille variable, sur lequel tu ne fait pas de recherche ni de order by, varchar est ton type de variable enfin , pour liquider les espaces surnuméraires, quelques UDF sont fournies avec firebird et peuvent etre intégrées à tes bases ... parmi celles ci, il y a rtrim, qui supprime tous les espaces situés à droite d'une chaine de caractères... |
|
|
00
|
|
|
#6 |
|
Invité de passage
![]() |
ça c'est interressent Gillou
Dit moi, un order by sur des champs de type varchar(X), c'est vraiment un risque au point de vue de la rapiditée ? ou ça va ? Et comment on utilise le rTrim ? |
|
|
00
|
|
|
#7 | ||
|
Membre du Club
![]() Inscription : mars 2003 Messages : 44 ![]() |
pour le order by désolé, je sais pas du tout j'ai pas fait de test moi meme ... si tu veux vraiment le savoir tu peux tester toi même
normalement dans le répertoire IB / FB , tu dois trouver rep UDF , avec IB_udf.dll rep exemples, avec ib_udf.sql qui te permettent de rajouter plusieurs fonctions a utiliser dans tes requetes SQL. ex : Code :
|
||
|
|
00
|
|
|
#8 |
|
Invité de passage
![]() |
Merci gillou (j'ai l'impression de faire que ça
Je viens de tester sur 2 bases différentes, avec varchar(x) et char(x). J'ai fait des vieilles requetes bien lourdes sur les 2 BDD que j'avais surchargée précédemment, et je ne vois pas vraiment de différences de temps de réponses... Donc, je vais rester sur les VarChar(x) qui me semble suffisant pour mon appli'. Merci encore |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com