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

 


Dernière réponse
Sujet : Problème VB6 at ADO
Bendes Merci à tous, j'sens que v utiliser que le SQL...;)

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
Bendes Merci à tous, j'sens que v utiliser que le SQL...;)
thegti Merci pour les infos
Je viens de me choper au moins 1 an d'expérience :D
Hepil 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 !
MagicBuzz 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.
thegti 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
MagicBuzz 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)
MagicBuzz 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--

Hepil 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--

thegti 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 & "'"
Hepil 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 ...
Bendes 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 ????

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