Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1748 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Prob : Type de données VB6 et SQL Server

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Prob : Type de données VB6 et SQL Server

n°1545739
nicquehen
le gras c'est la vie
Posté le 20-04-2007 à 14:05:42  profilanswer
 

Bonjour :)  
 
Donc j'ai un petit probleme.
 
Je possede une application vb6 sur un poste client, cette application à besoin d'une base de données,
 
celle-ci se trouve sur le poste serveur plus précisement sur Windows 2000 serveur, c'est une base de données sql server.
 
La connexion du logiciel vers la base de données se passe bien (sans dsn).
 
J'ai voulu rajouter une gestion des utilisateurs dans cette application donc sur un poste client lorsque que l'on lance l'application vb cette personne arrive sur une form F_admin
 
elle rentre son login et mot de passe puis elle accede aux differente form celon sa catégorie (administrateur, responsable, secraitaire).
 
Les utilisateurs son gerer dans la base de données (une table utilisateur et type_utilisateur).
 
Le probleme c'est que le type de données dans sql server pr le login et mot de passe est du text  
 
et dans vb ma requete qui extrai le login n'extrai rien du tout.  
J'ai changé le type de donné du champ login en car (15). Ma requete cette foi si extrait bien le login mais par exemple si la personne s'appelle richard vb extrait "richard        " et donc la verification du ma variable local est differente...
 
Du coup je ne vois pas comment faire.
 
Y'a t'il possibilité de declarer un certain nombre de caractere dans vb? ou sinon comment que je peux faire .
 
 
 

mood
Publicité
Posté le 20-04-2007 à 14:05:42  profilanswer
 

n°1545744
jpcheck
Pioupiou
Posté le 20-04-2007 à 14:13:35  profilanswer
 

peux-tu nous donner tes lignes de codes pour qu'on voit de quoi il s'agit stp ?
ton create table et ta requete
 
d'autre part, l'orthographe n'est pas une option  :non:

n°1545747
tegu
Posté le 20-04-2007 à 14:20:34  profilanswer
 

Si les caractères qui suivent le mot « richard » sont des espaces alors tu peux utiliser les fonctions RTrim$ ou Trim$
 
En VB tu peux déclarer une variable texte d'une longueur précise avec la syntaxe :
Dim sLogin As String * 15
 
Mais cela peut poser des problèmes en paramètre de certaines API car cela formate systématiquement ta chaine avec des blancs à la fin si celle-ci est d'une longueur inférieure à ta déclaration (comme initialement pour ton champ SQL).
 
Exemple :
Dim s As String * 10
s= "12"
MsgBox "-" & s & "-"     ' renvoie « -12        - »
MsgBox "-" & RTrim$(s) & "-"     ' renvoie « -12- »
 
 
 

n°1545751
MagicBuzz
Posté le 20-04-2007 à 14:27:32  profilanswer
 

=> TEXT ça sert à stocker des informations de plus de 8000 caractères. Donc à moins que le mot de passe de test utilisateurs soit le contenu de l'encyclopédie universalis, ça n'a pas d'intérêt (TEXT stocke jusqu'à 4 Go)
 
CHAR(x) a une taille fixe de X caractèes.
Ca veut dire que si tu écrit "TOTO" dans un CHAR(15) ça va stocker en réalité : "TOTO           " (avec 11 espaces derrière).
Et en SQL, 'TOTO           ' <> 'TOTO'
Tu vas donc devoir user et abuser de la commande TRIM() ce qui est loin d'être une bonne idée.
 
Passe-moi ça tout de suite en VARCHAR(20) (20 caractères pour un login et un mot de passe, ça me semble amplement suffisant, alors que 15 pourraît s'avérer trop court.
Tu peux aussi utiliser NVARCHAR() si tu veux permettre à tes utilisateurs d'utiliser des caractères étendus pour leur mot de passe (genre un mot de passe écrit en arabe, c'est assez pratique pour se protéger, puisque même écrit sur un bout de papier dans un tirroire, ça va empêcher 95% des petits malins de savoir l'écrire ;))
 
Sinon, en VB, pour reproduire le comportement de CHAR(x) alors tu peux déclarer tes variables comme ceci :

Code :
  1. Dim login As String * 15


 
MAIS JE TE LE DECONSEILLE TRES FORTEMENT !

n°1545753
MagicBuzz
Posté le 20-04-2007 à 14:28:02  profilanswer
 

groumpf grillé.
 
m'enfin dans tous les cas, VARCHAR ou NVARCHAR est la seule solution recevable :o

n°1545770
nicquehen
le gras c'est la vie
Posté le 20-04-2007 à 14:39:09  profilanswer
 

jpcheck a écrit :

peux-tu nous donner tes lignes de codes pour qu'on voit de quoi il s'agit stp ?
ton create table et ta requete

 

d'autre part, l'orthographe n'est pas une option  :non:

 


Voici ma table utilisateurs http://img245.imageshack.us/img245/9630/sqlserverkh8.th.jpg

 


Voici mon code vb : http://img297.imageshack.us/img297/8913/vbkl5.th.jpg

 

Donc ma variable locale login ne récupère rien et ma requete récupére  = "hélène         " (si l'utilisateur tape hélène dans le champ du login)

 

en string sur vb bien sur


Message édité par nicquehen le 20-04-2007 à 14:40:35
n°1545776
nicquehen
le gras c'est la vie
Posté le 20-04-2007 à 14:43:40  profilanswer
 

En vchar 20 sur sql server  
en String * 20 sur vb  
 
 
Ma variable login extrait des caractère bizarre de la forme de carré :p.

n°1545778
nicquehen
le gras c'est la vie
Posté le 20-04-2007 à 14:45:43  profilanswer
 

En nvarchar 20 sur sqlserver

 

la meme chose d'ailleur


Message édité par nicquehen le 20-04-2007 à 14:45:55
n°1545812
jpcheck
Pioupiou
Posté le 20-04-2007 à 15:13:59  profilanswer
 

2 clés primaires dans une table ?  :pt1cable:  
ca se programme comme ca

n°1545822
nicquehen
le gras c'est la vie
Posté le 20-04-2007 à 15:24:40  profilanswer
 

C'est pour gerer la relation sinon il prend pas en compte mes jointure dans vb

mood
Publicité
Posté le 20-04-2007 à 15:24:40  profilanswer
 

n°1545849
jpcheck
Pioupiou
Posté le 20-04-2007 à 15:57:08  profilanswer
 

au lieu de faire un .open "ta_requete"
passe par un :
dim RS as DAO.RecordSet
set RS = tabase.openrecordset("ta_requete" )
puis travaille sur  
RS!ton_champs :)

n°1545858
nicquehen
le gras c'est la vie
Posté le 20-04-2007 à 16:18:00  profilanswer
 

tu crois que ado gere mal les type de données? et de passé en dao serait mieu?

n°1545863
jpcheck
Pioupiou
Posté le 20-04-2007 à 16:28:53  profilanswer
 

j'ai mis DAO par habitude, ce n'est pas nécessaire de le mettre il me semble
dim RS as RecordSet devrait faire l'affaire :)

n°1545929
MagicBuzz
Posté le 20-04-2007 à 18:25:19  profilanswer
 

jpcheck a écrit :

2 clés primaires dans une table ?  :pt1cable:  
ca se programme comme ca


c'est pas "deux clés primaires", mais une clé composite. ce sont les tuples composés des deux colonnes qui forment la PK.
 
ainsi : 1,1 ; 1,2 ; 2,1 sont des valeurs possibles pour la PK, ce qui est impossible à obtenir avec une clé simple. ça fait 100% partie de merise, et ça permet l'utilisation d'index de PK bien plus optimisés qu'une clé simple.
 
 
edit : ceci dit, il est parfaitement possible (et prévu par merise) d'avoir deux "clés primaires". plus exactement, il y a une clé primaire et une ou plusieurs clés composites. aujourd'hui, ça se traduit généralement par un index unique.
 
par exemple, dans une table utilisateur, tu vas avoir une PK et au moins deux clés compostites :
PK : ID
ALT1 : LOGIN
ALT2 : EMAIL
 
Car chacune de ces trois colonnes ne peut contenir QUE des valeurs identiques (email pouvant dans certains cas être null, possibilité qu'apporte la clé alternative)


Message édité par MagicBuzz le 20-04-2007 à 18:30:58
n°1545936
MagicBuzz
Posté le 20-04-2007 à 18:28:39  profilanswer
 

sinon...
 
Lance ce script (pour les alter, je suis pas sûr de la syntaxe... change les types en varchar(20) quoi...)
Surtout, une fois le changement de type effectué, lance bien le update ! Sinon les blancs inserrés abusivement par CHAR(15) vont rester.

Code :
  1. ALTER TABLE utilisateurs ALTER COLUMN id_util AS varchar(20)
  2. go
  3. ALTER TABLE utilisateurs ALTER COLUMN pwd_util AS varchar(20)
  4. go
  5. UPDATE utilisateurs SET id_util = trim(id_util), pwd_util = trim(pwd_util)
  6. go


 
Ensuite, dans ton code VB, partout où t'as mis des string * 15 ou stirng * 20, remet string tout court.
 
Et ça va marcher.

n°1546039
nicquehen
le gras c'est la vie
Posté le 20-04-2007 à 22:27:37  profilanswer
 

Merci bien sa marche nikel :) la fonction trim n'est pas trouvé par sql server j'ai donc fait avec rtrim.
 
 
UPDATE utilisateurs SET id_util = rtrim(id_util), pwd_util = rtrim(pwd_util)
 
 
Maintenant j'ai une nouvelle erreur qu'il faut que je contourne.
 
Lorsque par exemple lorsque je clic sur mon bouton valider et que l'utilisateur ou le mot de passe (ou les deux ) n'est pas valide.  
 
Vb renvoie directement une erreur  : http://img440.imageshack.us/img440/6352/erreuriduy0.th.jpg
 
Car en effet il ne trouve pas le login dans la base de donnée mais je ne vois pas pallier l'erreur vb car il bloque direct au IF et il s'arrete il ne fais pas le else avec le message d'erreur.  

n°1546040
ingenieurc​esi
Posté le 20-04-2007 à 22:30:13  profilanswer
 

avec un on error goto fin:  
 
.....
fin:
end sub
 
ca pourrait peut etre marcher
 
EDIT: quelqu'un qui a du gout
death note c'est de la balle mais mieu en scan


Message édité par ingenieurcesi le 20-04-2007 à 22:32:35
n°1546044
MagicBuzz
Posté le 20-04-2007 à 22:39:08  profilanswer
 

même pas besoin de gestion d'erreur tardive...
 
avant de lire dans le recordset, tu vérifies qu'il n'est pas à EOF :
 

Code :
  1. if RS.EOF then
  2.   msgbox("dtc" )
  3. else
  4.   msgbox("supaïr t'as un mot de passe valide" )
  5. end if

n°1546060
nicquehen
le gras c'est la vie
Posté le 20-04-2007 à 23:10:17  profilanswer
 

Merci de vos réponses tout cela marche parfaitement :).
 

n°1546218
nicquehen
le gras c'est la vie
Posté le 21-04-2007 à 13:35:25  profilanswer
 

Allé une petite question encore :p  
 
 
Comment transformer la premiere lettre d'un champ en majuscule?
 
Par exemple si dans mon champ login je tape "nicolas"
Que le "n" se tranforme en majuscule automatiquement.
 

n°1546249
MagicBuzz
Posté le 21-04-2007 à 14:52:29  profilanswer
 

regarde si ton sgbd propose ce type de fonctions. généralement, ça s'appelle... hmmm... mince, je sais plus :) capitalize ou un truc du genre. sinon, va falloir le faire à la main avec des sous-chaînes

n°1546698
jpcheck
Pioupiou
Posté le 22-04-2007 à 20:27:16  profilanswer
 

a voir =>UCASE

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Prob : Type de données VB6 et SQL Server

 

Sujets relatifs
Correction d'une requete SQL Delete....Mysql - Compression de données texte / index fulltext ?
Mettre en route une base de données Mysql svpPocket PC et accès base de données distante
Formatter une balise <input type='txt'>Mettre en tableau des données entrelacées
Variable dans macro Excel et requête SQLCréer un trigger sur un schéma/user d'une base de données
Transposer les données d'une Colonne MySql en plusieurs Colonnes$_FILES[]["tmp_name"] et $_FILES[]["type"] vide, pourquoi ?
Plus de sujets relatifs à : Prob : Type de données VB6 et SQL Server


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR