Je cherche a controler l'existence d'un enregistrement=20
dans une table Access
Call MyFonctions.ExecSQL("Select * from ListeTablesIDC=20
where IDtypeIDC=3D'" & RubIDCSelect & "'", ADOrst, ADOcnx)
If Not IsNull(ADOrst("IDtypeIDC")) Then
msgBox "N'existe pas"
End If
L'enregistrement n'existe pas et pourtant le IF fait comme=20
si
Peu-etre la condition IF END IF est mal =E9crite ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Zoury
Salut Jean-Claude! :O)
si ton curseur est du côté client (adUseClient), tu peux vérifier le RecordCount : '*** If (ADOrst.RecordCount = 0) Then Call MsgBox("n'exite pas") End If '***
sinon, tu peux testé si le curseur dans le recordset pointe au début ET à la fin : '*** If (ADOrst.BOF And ADOrst.EOF) Then Call MsgBox("n'exite pas") End If '***
si ton curseur est du côté client (adUseClient), tu peux vérifier le
RecordCount :
'***
If (ADOrst.RecordCount = 0) Then
Call MsgBox("n'exite pas")
End If
'***
sinon, tu peux testé si le curseur dans le recordset pointe au début ET à la
fin :
'***
If (ADOrst.BOF And ADOrst.EOF) Then
Call MsgBox("n'exite pas")
End If
'***
si ton curseur est du côté client (adUseClient), tu peux vérifier le RecordCount : '*** If (ADOrst.RecordCount = 0) Then Call MsgBox("n'exite pas") End If '***
sinon, tu peux testé si le curseur dans le recordset pointe au début ET à la fin : '*** If (ADOrst.BOF And ADOrst.EOF) Then Call MsgBox("n'exite pas") End If '***
> Tout d'abord merci pour ta réponse sur mon problème de cocher et décocher les noeuds du treeView, cela marche impec
Excellent ! :O)
Par contre les modifs ci-dessous ne change rien au problème cela me dit que l'enregistrement existe alors que c'est faux
j'ai mal interpréter ton problème ...
regarde cette exemple il devrait pouvoir t'aider à mieux visualiser les possibilités : '*** ' Ajouter la référence Microsoft Data Object 2.X Library ' Module1 Option Explicit
Private Sub Main()
Dim cn As ADODB.Connection Dim rs As ADODB.Recordset
' initialise la connexion Set cn = New ADODB.Connection ' mettre TA chaine de connexion ici.. Call cn.Open("Provider=SQLOLEDB.1;Persist Security Infoúlse;User ID=login;PDW=password;Initial CatalogÚtabase;Data Source=server;") ' initialise le recordset Set rs = New ADODB.Recordset rs.CursorLocation = adUseClient ' on créer la table pour le test Call cn.Execute("create table t(i int, s varchar(10))")
' ** Premier test, rs est vide ' ' on exécute la requête Call rs.Open("select * from t", cn, adOpenForwardOnly, adLockReadOnly) ' imprime les résultats Call PrintResults("Test rs vide", rs)
' ** Deuxième test, rs n'est pas vide, ' mais l'enregistrement ne contient que des NULL ' ' on ajoute un enregistrement à la table Call cn.Execute("insert into t(i, s) values(null, null)") ' ' on exécute la requête Call rs.Close Call rs.Open("select * from t", cn, adOpenForwardOnly, adLockReadOnly) ' imprime les résultats Call PrintResults("Test valeurs NULL", rs)
' on détruit la table et ferme les ressources Call cn.Execute("drop table t") Call rs.Close Call cn.Close
End Sub
Private Sub PrintResults(ByRef Description As String, ByRef rs As ADODB.Recordset) Debug.Print Description Debug.Print " rs.RecordCount : " & rs.RecordCount Debug.Print " rs.BOF : " & rs.BOF Debug.Print " rs.EOF : " & rs.EOF If (rs.RecordCount > 0) Then If (Not IsNull(rs.Fields("i"))) Then Debug.Print " rs.Fields(""i"").Value : " & rs.Fields("i").Value Else Debug.Print " rs.Fields(""i"").Value : NULL" End If If (Not IsNull(rs.Fields("s"))) Then Debug.Print " rs.Fields(""s"").Value : " & rs.Fields("s").Value Else Debug.Print " rs.Fields(""s"").Value : NULL" End If Else Debug.Print " no records found" End If End Sub '***
Maintenant, dans le case d'une valeur de type String qui serait NULL, tu peux, au lieu d'employer IsNull(), concatener une chaine vide à ta valeur avant de l'affecter.. Exemple : '*** MyValue = rs.Fields("s").Value & "" ' évite de planter si s est null. '***
> Tout d'abord merci pour ta réponse sur mon problème de
cocher et décocher les noeuds du treeView, cela marche
impec
Excellent ! :O)
Par contre les modifs ci-dessous ne change rien au problème
cela me dit que l'enregistrement existe alors que c'est
faux
j'ai mal interpréter ton problème ...
regarde cette exemple il devrait pouvoir t'aider à mieux visualiser les
possibilités :
'***
' Ajouter la référence Microsoft Data Object 2.X Library
' Module1
Option Explicit
Private Sub Main()
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
' initialise la connexion
Set cn = New ADODB.Connection
' mettre TA chaine de connexion ici..
Call cn.Open("Provider=SQLOLEDB.1;Persist Security Infoúlse;User
ID=login;PDW=password;Initial CatalogÚtabase;Data Source=server;")
' initialise le recordset
Set rs = New ADODB.Recordset
rs.CursorLocation = adUseClient
' on créer la table pour le test
Call cn.Execute("create table t(i int, s varchar(10))")
' ** Premier test, rs est vide
'
' on exécute la requête
Call rs.Open("select * from t", cn, adOpenForwardOnly, adLockReadOnly)
' imprime les résultats
Call PrintResults("Test rs vide", rs)
' ** Deuxième test, rs n'est pas vide,
' mais l'enregistrement ne contient que des NULL
'
' on ajoute un enregistrement à la table
Call cn.Execute("insert into t(i, s) values(null, null)")
'
' on exécute la requête
Call rs.Close
Call rs.Open("select * from t", cn, adOpenForwardOnly, adLockReadOnly)
' imprime les résultats
Call PrintResults("Test valeurs NULL", rs)
' on détruit la table et ferme les ressources
Call cn.Execute("drop table t")
Call rs.Close
Call cn.Close
End Sub
Private Sub PrintResults(ByRef Description As String, ByRef rs As
ADODB.Recordset)
Debug.Print Description
Debug.Print " rs.RecordCount : " & rs.RecordCount
Debug.Print " rs.BOF : " & rs.BOF
Debug.Print " rs.EOF : " & rs.EOF
If (rs.RecordCount > 0) Then
If (Not IsNull(rs.Fields("i"))) Then
Debug.Print " rs.Fields(""i"").Value : " & rs.Fields("i").Value
Else
Debug.Print " rs.Fields(""i"").Value : NULL"
End If
If (Not IsNull(rs.Fields("s"))) Then
Debug.Print " rs.Fields(""s"").Value : " & rs.Fields("s").Value
Else
Debug.Print " rs.Fields(""s"").Value : NULL"
End If
Else
Debug.Print " no records found"
End If
End Sub
'***
Maintenant, dans le case d'une valeur de type String qui serait NULL, tu
peux, au lieu d'employer IsNull(), concatener une chaine vide à ta valeur
avant de l'affecter..
Exemple :
'***
MyValue = rs.Fields("s").Value & "" ' évite de planter si s est null.
'***
> Tout d'abord merci pour ta réponse sur mon problème de cocher et décocher les noeuds du treeView, cela marche impec
Excellent ! :O)
Par contre les modifs ci-dessous ne change rien au problème cela me dit que l'enregistrement existe alors que c'est faux
j'ai mal interpréter ton problème ...
regarde cette exemple il devrait pouvoir t'aider à mieux visualiser les possibilités : '*** ' Ajouter la référence Microsoft Data Object 2.X Library ' Module1 Option Explicit
Private Sub Main()
Dim cn As ADODB.Connection Dim rs As ADODB.Recordset
' initialise la connexion Set cn = New ADODB.Connection ' mettre TA chaine de connexion ici.. Call cn.Open("Provider=SQLOLEDB.1;Persist Security Infoúlse;User ID=login;PDW=password;Initial CatalogÚtabase;Data Source=server;") ' initialise le recordset Set rs = New ADODB.Recordset rs.CursorLocation = adUseClient ' on créer la table pour le test Call cn.Execute("create table t(i int, s varchar(10))")
' ** Premier test, rs est vide ' ' on exécute la requête Call rs.Open("select * from t", cn, adOpenForwardOnly, adLockReadOnly) ' imprime les résultats Call PrintResults("Test rs vide", rs)
' ** Deuxième test, rs n'est pas vide, ' mais l'enregistrement ne contient que des NULL ' ' on ajoute un enregistrement à la table Call cn.Execute("insert into t(i, s) values(null, null)") ' ' on exécute la requête Call rs.Close Call rs.Open("select * from t", cn, adOpenForwardOnly, adLockReadOnly) ' imprime les résultats Call PrintResults("Test valeurs NULL", rs)
' on détruit la table et ferme les ressources Call cn.Execute("drop table t") Call rs.Close Call cn.Close
End Sub
Private Sub PrintResults(ByRef Description As String, ByRef rs As ADODB.Recordset) Debug.Print Description Debug.Print " rs.RecordCount : " & rs.RecordCount Debug.Print " rs.BOF : " & rs.BOF Debug.Print " rs.EOF : " & rs.EOF If (rs.RecordCount > 0) Then If (Not IsNull(rs.Fields("i"))) Then Debug.Print " rs.Fields(""i"").Value : " & rs.Fields("i").Value Else Debug.Print " rs.Fields(""i"").Value : NULL" End If If (Not IsNull(rs.Fields("s"))) Then Debug.Print " rs.Fields(""s"").Value : " & rs.Fields("s").Value Else Debug.Print " rs.Fields(""s"").Value : NULL" End If Else Debug.Print " no records found" End If End Sub '***
Maintenant, dans le case d'une valeur de type String qui serait NULL, tu peux, au lieu d'employer IsNull(), concatener une chaine vide à ta valeur avant de l'affecter.. Exemple : '*** MyValue = rs.Fields("s").Value & "" ' évite de planter si s est null. '***