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

  FORUM HardWare.fr
  Programmation

  Problème VB6 at ADO

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème VB6 at ADO

n°13780
Bendes
Posté le 11-02-2001 à 21:11:43  profilanswer
 

J'exécute l'instruction suivante :
 
adodc1.recordset.find "champs = " & valeur, , , 1
 
le '1' c'est pour qu'il commence tj la recherche à partir du premier record, et il me dit qu'il est en EOF alors que je suis sûr que le record recherché existe ????

mood
Publicité
Posté le 11-02-2001 à 21:11:43  profilanswer
 

n°13807
Hepil
Posté le 12-02-2001 à 09:06:15  profilanswer
 

dis-moi, es-tu obligé de passer par un find ?
 
je te proposerai plutôt un  
recordser.open "select * from table1 where champ1 like '" & valeur & '"'
à condition que ton recordset soit fermé avant
sinon, utilise un recordset temporaire qui te servira toujours pour ce genre d'utilisation !
 
sinon, le find m'embête ...

n°13814
thegti
La constipation se soigne ...
Posté le 12-02-2001 à 09:21:03  profilanswer
 

Moi le find ne m'embête pas :D
Je l'ai même testé un certain nombre de fois, pas de problème
 
Une piste: ton champ ne serait pas du string par hasard, auquel cas:
champs = '" & valeur & "'"

n°13815
Hepil
Posté le 12-02-2001 à 09:24:10  profilanswer
 

je remarque qu'à l'affichage, il y a un problème entre ' et "" quand ils sont accolés comme dans '" ou "'", non ?
mais pas à l'édition du message !

 

--Message édité par Hepil--

n°13832
MagicBuzz
Posté le 12-02-2001 à 11:22:04  profilanswer
 

Bon, 2 points...
 
1) Ne jamais faire à la main les '...
En effet, je jour où il y a une appostrophe, ben proutch !
Créer une fonction quote...
 
function Quote(str)
     if cstr(str) <> "" then
          Quote = "'" & replace(str, "'", "''" ) & "'"
     else
          Quote = "''"
     end if
end function
 
2) Le find est à banir...
Seuls rs.open et cnx.execute doivent être utilisés.
Pkoi ? Tout simplement pour deux raisons principales...
a- Votre code sera peut-être un jour repris dans un langage qui ne supporte pas les options avancées des reccordsets de VB.
b- Selon la version des drivers ODBC, du SGDB et de la requête, les résultats peuvent être différents...
 
Même le reccordcount est à banir...
 
Je ne retrouve plus l'article, mais grosso-modo, les drivers ADO ODBC 2.0 pour SQL Server et Oracle sont buggés, et lors d'une jointure, une grande partie des propriétés des recordsets partent en live (notamment recordcount = -1)
 
Note: Pour voir si un RS est vide ou non, à tout moment, vous pouvez faire :
 
if rs.EOF and rs.BOF then
    ' le recordset est vide
else
    ' le recordset contient au moins un élément
end if

 

--Message édité par MagicBuzz--

n°13837
MagicBuzz
Posté le 12-02-2001 à 11:38:23  profilanswer
 

sinon, aussi, met des '%' devant et après ta valeur...
 
il y a peut-être des espaces cachés (selon les types, les SGBD en rajoutent parfois)

n°13846
thegti
La constipation se soigne ...
Posté le 12-02-2001 à 12:16:27  profilanswer
 

Merci pour tes éclaircissements
 
Mais, à mon avis, faut pas se prendre la tête pour 2 ou 3 bugs dans des cas particuliers
"Seuls rs.open et cnx.execute doivent être utilisés"
je sais que Microsoft c'est pas des dieux, mais quand même, ne pas utiliser les 99 % des fonctionnalités de ADO, c'est un peu exagéré
On a le droit au rs.MoveNext quand même, parce que sinon se taper toutes les lignes une par une :D

n°13857
MagicBuzz
Posté le 12-02-2001 à 14:51:14  profilanswer
 

Oui...
 
Mais moi, je ne fais que ressortir bêtement les différentes infos que j'ai pu lire dans MSDN (doc officielle de M$)
 
seuls rs.movenext et rs.movefirst doivent être utilisés pour se déplacer des les rs.
 
Seuls rs.EOF et rs.BOF doivent être utilisés pour savoir où on est.
 
seule cnx.execute doit être utilisée pour éxécuter des requêtes muettes (INSERT, UPDATE, DELETE, ...)
 
seule rs.open doit être utilisée pour éxécuter des requêtes retournant un résultat (SELECT)
 
il ne faut ouvrir des recordset qu'avec les propriété FORWARD_ONLY, et LOCKED (pas de rs.update, etc. dispo)
 
En effet, car le jour où plusieurs personnes sont connectées à la base en même temps, des modifs peuvent avoir lieu dans la base. Donc les RS ne sont plus des vues exactes de la base, ce qui risque de faire des choses inatendues et des erreures...
 
deplus modifier le résultat d'un select par exemple ne fait absolument pas partie du standard SQL (sur lequel se base ODBC) donc d'une version de pilotes à l'autre il y a de grandes chances que les fonctions ne fonctionnement pas correctement.
 
et surtout pense toujours qu'un jour ton appli (même si c'est un petit truc à la con) risque d'être portée sur un autre OS/La,gage/SGDB, donc plus tu restes dans les fonctions standard, moins tu risque d'avoir de soucis d'intégration.

n°13864
Hepil
Posté le 12-02-2001 à 15:15:53  profilanswer
 

je confirme le tout ( quelle référence ! )
j'ai testé tout ça et suis tombé sur les problèmes et les mêmes conclusions !

n°14057
thegti
La constipation se soigne ...
Posté le 13-02-2001 à 12:56:21  profilanswer
 

Merci pour les infos
Je viens de me choper au moins 1 an d'expérience :D

mood
Publicité
Posté le 13-02-2001 à 12:56:21  profilanswer
 

n°14105
Bendes
Posté le 13-02-2001 à 15:04:42  profilanswer
 

Merci à tous, j'sens que v utiliser que le SQL...;)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  Problème VB6 at ADO

 

Sujets relatifs
Problème con mais important pour moi..[JAVA][PHP] problème include ...
[VB6] masque pour un TextBoxproblème de saisie de chaines de caractères en JAVA
probleme sur liste chainéePetit probleme de cookies en ASP...
[PhotoS] Petit problème de Layer ..[VB6] les guillemets dans une recherche ... avec SQL
VB6 Passé un objet form a une procédure commune???[C++] Problème avec les classes
Plus de sujets relatifs à : Problème VB6 at ADO


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