OVH Cloud OVH Cloud

PB URGENT

5 réponses
Avatar
JCM
Bonjour =E0 tous

j'ai un beug sur mon appli: je teste l'existance d'une=20
table par un function, quand je fais un pas-=E0-pas, le=20
chemin et le nom de la table sont bons, les variables sont=20
d=E9clar=E9es Public, la table existe et pourtant il me met=20
tableExists =3D false.

Voici mon code pouvez-vous me dire ou est l'erreur

Public Function TableExists(cat As ADOX.Catalog, TableName=20
As String) As Boolean
cheminTable =3D cheminBase & BaseName

'creation d'une connection sur la base
With ADOcn
.Provider =3D "Microsoft.Jet.OLEDB.4.0"
.ConnectionString =3D "Data Source=3D" & cheminTable
.CursorLocation =3D adUseClient
.Open
End With

' Enum=E8re toutes les tables du catalogue
For Each tbl In cat.Tables
If tbl.Name =3D TableName Then 'TableName=3Dtable=20
recherch=E9e
TableExists =3D True
Exit For
End If
Next
If TableExists =3D False Then
Call CreerTable(cat, TableName)
End If
'Set tbl =3D Nothing
End Function

Merci de votre aide
cordialement
JCM

5 réponses

Avatar
Clive Lumb
Je ne suis pas expert en ADO, mais puisque c'est urgent et personne n'a
repondu...

1) D'ou sort "ADOcn" ? il sert à quoi ??
2) "cat" est passé en argument, a-t-il été initialisé avant avec un
.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0... etc ?
3) Si ça marche en pas-à-pas, que se passe-t-il si tu fais un "debug.print
tbl.Name" avant ton test, voit-on la table ? Si oui, respectes-tu les
minuscules/majuscules ?(bien que cela ne devrait pas marcher en pas à pas si
c'est le problème)

Je me suis référé à l'exemple MSDN/MDAC suivant qui semble être d'une
simplicité ...
*********
Sub ADOListTables()
Dim cat As New ADOX.Catalog
Dim tbl As ADOX.Table

' Open the catalog
cat.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=.NorthWind.mdb;"

' Loop through the tables in the database and print their name
For Each tbl In cat.Tables
If tbl.Type <> "VIEW" Then Debug.Print tbl.Name
Next
End Sub
*********

Clive

"JCM" a écrit dans le message de
news:18be701c41bbf$5ea54750$
Bonjour à tous

j'ai un beug sur mon appli: je teste l'existance d'une
table par un function, quand je fais un pas-à-pas, le
chemin et le nom de la table sont bons, les variables sont
déclarées Public, la table existe et pourtant il me met
tableExists = false.

Voici mon code pouvez-vous me dire ou est l'erreur

Public Function TableExists(cat As ADOX.Catalog, TableName
As String) As Boolean
cheminTable = cheminBase & BaseName

'creation d'une connection sur la base
With ADOcn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Data Source=" & cheminTable
.CursorLocation = adUseClient
.Open
End With

' Enumère toutes les tables du catalogue
For Each tbl In cat.Tables
If tbl.Name = TableName Then 'TableName=table
recherchée
TableExists = True
Exit For
End If
Next
If TableExists = False Then
Call CreerTable(cat, TableName)
End If
'Set tbl = Nothing
End Function

Merci de votre aide
cordialement
JCM
Avatar
JCM
Salut Clive

Effectivement j'avais oublié :

cat.ActiveConnection = ADOcn
avant la ligne : For Each tbl In cat.Tables

Désolé de t'avoir mis la pression, mais cette appli est
tellement Hard que j'en ai la tete dans le brouillard.

Merci pour ton aide
Cordialement
JCM
-----Message d'origine-----
Je ne suis pas expert en ADO, mais puisque c'est urgent


et personne n'a
repondu...

1) D'ou sort "ADOcn" ? il sert à quoi ??
2) "cat" est passé en argument, a-t-il été initialisé


avant avec un
..ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0...


etc ?
3) Si ça marche en pas-à-pas, que se passe-t-il si tu


fais un "debug.print
tbl.Name" avant ton test, voit-on la table ? Si oui,


respectes-tu les
minuscules/majuscules ?(bien que cela ne devrait pas


marcher en pas à pas si
c'est le problème)

Je me suis référé à l'exemple MSDN/MDAC suivant qui


semble être d'une
simplicité ...
*********
Sub ADOListTables()
Dim cat As New ADOX.Catalog
Dim tbl As ADOX.Table

' Open the catalog
cat.ActiveConnection


= "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=.NorthWind.mdb;"

' Loop through the tables in the database and print


their name
For Each tbl In cat.Tables
If tbl.Type <> "VIEW" Then Debug.Print tbl.Name
Next
End Sub
*********

Clive

"JCM" a écrit dans le


message de
news:18be701c41bbf$5ea54750$
Bonjour à tous

j'ai un beug sur mon appli: je teste l'existance d'une
table par un function, quand je fais un pas-à-pas, le
chemin et le nom de la table sont bons, les variables sont
déclarées Public, la table existe et pourtant il me met
tableExists = false.

Voici mon code pouvez-vous me dire ou est l'erreur

Public Function TableExists(cat As ADOX.Catalog, TableName
As String) As Boolean
cheminTable = cheminBase & BaseName

'creation d'une connection sur la base
With ADOcn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Data Source=" & cheminTable
.CursorLocation = adUseClient
.Open
End With

' Enumère toutes les tables du catalogue
For Each tbl In cat.Tables
If tbl.Name = TableName Then 'TableName=table
recherchée
TableExists = True
Exit For
End If
Next
If TableExists = False Then
Call CreerTable(cat, TableName)
End If
'Set tbl = Nothing
End Function

Merci de votre aide
cordialement
JCM


.



Avatar
Antoun
en pas à pas, il passe sur ton TableExists = True et sur ton Exit For ?

ton cheminTable = cheminBase & BaseName me semble louche... ce ne serait
pas plutôt cheminTable = cheminBase & TABLEName ou cheminTable =
cheminBase & BaseName & TableName ? (en oubliant les séparateurs)


JCM a écrit:
Bonjour à tous

j'ai un beug sur mon appli: je teste l'existance d'une
table par un function, quand je fais un pas-à-pas, le
chemin et le nom de la table sont bons, les variables sont
déclarées Public, la table existe et pourtant il me met
tableExists = false.

Voici mon code pouvez-vous me dire ou est l'erreur

Public Function TableExists(cat As ADOX.Catalog, TableName
As String) As Boolean
cheminTable = cheminBase & BaseName

'creation d'une connection sur la base
With ADOcn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Data Source=" & cheminTable
.CursorLocation = adUseClient
.Open
End With

' Enumère toutes les tables du catalogue
For Each tbl In cat.Tables
If tbl.Name = TableName Then 'TableName=table
recherchée
TableExists = True
Exit For
End If
Next
If TableExists = False Then
Call CreerTable(cat, TableName)
End If
'Set tbl = Nothing
End Function

Merci de votre aide
cordialement
JCM


Avatar
Antoun
> ton cheminTable = cheminBase & BaseName me semble louche... ce ne serait
pas plutôt cheminTable = cheminBase & TABLEName ou cheminTable =
cheminBase & BaseName & TableName ? (en oubliant les séparateurs)



c'est idiot ce que je dis là... oublie !
Avatar
Antoun
en fait tu ne dis tj pas d'où sors le ADOcn... de plus, si tu fais

> cat.ActiveConnection = ADOcn
> avant la ligne : For Each tbl In cat.Tables

ça veut dire que tu transmets un cat existant et que tu lui affectes une
autre connexion à l'intérieur de ta fonction, je comprends absolument
pas pourquoi tu fais ça... encore une fois, tu peux créer directement
tes objets à l'intérieur de la fonction, transmettre des trucs vides
c'est un peu bizarre (sauf si tu t'en ressers en-dehors).

JCM a écrit:
Salut Clive

Effectivement j'avais oublié :

cat.ActiveConnection = ADOcn
avant la ligne : For Each tbl In cat.Tables

Désolé de t'avoir mis la pression, mais cette appli est
tellement Hard que j'en ai la tete dans le brouillard.

Merci pour ton aide
Cordialement
JCM

-----Message d'origine-----
Je ne suis pas expert en ADO, mais puisque c'est urgent



et personne n'a

repondu...

1) D'ou sort "ADOcn" ? il sert à quoi ??
2) "cat" est passé en argument, a-t-il été initialisé



avant avec un

..ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0...



etc ?

3) Si ça marche en pas-à-pas, que se passe-t-il si tu



fais un "debug.print

tbl.Name" avant ton test, voit-on la table ? Si oui,



respectes-tu les

minuscules/majuscules ?(bien que cela ne devrait pas



marcher en pas à pas si

c'est le problème)

Je me suis référé à l'exemple MSDN/MDAC suivant qui



semble être d'une

simplicité ...
*********
Sub ADOListTables()
Dim cat As New ADOX.Catalog
Dim tbl As ADOX.Table

' Open the catalog
cat.ActiveConnection



= "Provider=Microsoft.Jet.OLEDB.4.0;" & _

"Data Source=.NorthWind.mdb;"

' Loop through the tables in the database and print



their name

For Each tbl In cat.Tables
If tbl.Type <> "VIEW" Then Debug.Print tbl.Name
Next
End Sub
*********

Clive

"JCM" a écrit dans le



message de

news:18be701c41bbf$5ea54750$
Bonjour à tous

j'ai un beug sur mon appli: je teste l'existance d'une
table par un function, quand je fais un pas-à-pas, le
chemin et le nom de la table sont bons, les variables sont
déclarées Public, la table existe et pourtant il me met
tableExists = false.

Voici mon code pouvez-vous me dire ou est l'erreur

Public Function TableExists(cat As ADOX.Catalog, TableName
As String) As Boolean
cheminTable = cheminBase & BaseName

'creation d'une connection sur la base
With ADOcn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Data Source=" & cheminTable
.CursorLocation = adUseClient
.Open
End With

' Enumère toutes les tables du catalogue
For Each tbl In cat.Tables
If tbl.Name = TableName Then 'TableName=table
recherchée
TableExists = True
Exit For
End If
Next
If TableExists = False Then
Call CreerTable(cat, TableName)
End If
'Set tbl = Nothing
End Function

Merci de votre aide
cordialement
JCM


.