CREATE DATABASE

Résolu
Compufly Messages postés 15 Date d'inscription vendredi 2 septembre 2005 Statut Membre Dernière intervention 21 octobre 2006 - 4 mars 2006 à 18:28
Compufly Messages postés 15 Date d'inscription vendredi 2 septembre 2005 Statut Membre Dernière intervention 21 octobre 2006 - 4 mars 2006 à 21:23
Bonjour,

J'essaie d'utiliser une base de données ACCESS dans mon code en VB6.
J'aimerais que mon code crée une base de données ACCESS vide nommée pool.mdb si elle n'existe pas déjà.

Partout où je cherche, tout le monde dit d'utiliser ADODB pour gérer les bases de données ACCESS, mais tous les exemples de création d'un fichier de base de données ACCESS utilisent DAO...

Quelqu'un peut m'expliquer cette contradiction?
Mais surtout, quelqu'un peut m'indiquer comment créer ma base ACCESS avec ADODB?

Ensuite, je voudrais savoir comment lister le nom des tables existantes d'une base de données ACCESS existante.
Autrement dit, l'équivalent MySQL :
SHOW DATABASES;
SHOW TABLES;
SELECT DATABASE();
DESCRIBE table;

Puis, surtout, pourquoi :
CREATE TABLE player_name IF NOT EXIST ( ...

ne fonctionne pas?
Comment je peux détecter si une table existe ou non avant d'essayer de la créer?

Compufly

11 réponses

cs_Willi Messages postés 2375 Date d'inscription jeudi 12 juillet 2001 Statut Modérateur Dernière intervention 15 décembre 2018 22
4 mars 2006 à 18:49
Salut,
Rajoute la référence Microsoft ADO Ext 2.xx for dll and security.

Donc pour créer ta base access rien de plus simple:
Set catX = New ADOX.Catalog
catX.Create "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\TaBase.mdb"
3
cs_Willi Messages postés 2375 Date d'inscription jeudi 12 juillet 2001 Statut Modérateur Dernière intervention 15 décembre 2018 22
4 mars 2006 à 19:14
Pour lister les tables de ta base (ajoute la réf microsoft activex data objects 2.x....)
Exemple dans un listbox:

Dim con As New ADODB.Connection
Dim rs As New ADODB.Recordset

'connection à la base
con.Provider = "Microsoft.Jet.OLEDB.4.0;User ID=admin;Data Source=C:\TaBase.mdb"
con.Open

'lecture des tables
Set rs = con.OpenSchema(adSchemaTables)

Do Until rs.EOF
If rs.Fields("TABLE_TYPE") = "TABLE" Then
List1.AddItem rs.Fields("TABLE_NAME")
End If
rs.MoveNext
Loop

rs.Close
con.Close
3
cs_Willi Messages postés 2375 Date d'inscription jeudi 12 juillet 2001 Statut Modérateur Dernière intervention 15 décembre 2018 22
4 mars 2006 à 21:10
Merci Darksidious de ton point de vue

Sinon Compufly pour récupérer les champs d'une table c'est à peu près pareil...

Do Until rs.EOF
If (rs.Fields("TABLE_NAME") = "NHL") Then
If rs.Fields("COLUMN_NAME") <> "" Then List1.AddItem rs.Fields("COLUMN_NAME")
End If
rsBase.MoveNext
Loop

Voila
Bon courage
3
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
4 mars 2006 à 18:59
C'est tout simplement qu'il est bien plus simple de créer une base de données avec DAO qu'avec ADO !!!

Voir par exemple mon tutorial pour créer une base de données sur www.ProgOtoP.com

_

<spa></spa>
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Compufly Messages postés 15 Date d'inscription vendredi 2 septembre 2005 Statut Membre Dernière intervention 21 octobre 2006
4 mars 2006 à 19:07
Je trouve la réponse de Willi pourtant très simple ;)

Merci beaucoup...

Compufly
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
4 mars 2006 à 19:25
Eh eh, le code qu'il t'a donné précédement te permet juste de créer le fichier, mais pas la base en elle même !

Son deuxième messaye permet par contre de créer 1 table (et déjà, pas mal de lignes de code !!!), je te laisse imaginé le nombre de ligne qu'il faut pour créer une table complète avec des champs indéxés... ca fait peur !!!

Le mieux : fait comme moi : créer une classe permettant de créer facilement et rapidement des tables/champs/index, etc.

Désolé, mais je ne peux pas te donner le code de ma classe : étant donné que je veux vendre le produit d'ici peu...

_

<spa></spa>
0
cs_Willi Messages postés 2375 Date d'inscription jeudi 12 juillet 2001 Statut Modérateur Dernière intervention 15 décembre 2018 22
4 mars 2006 à 19:46
Darksidious a raison pour ce qui concerne la création de la base, la on créer que le fichier.
C'est sur après comme te conseilles Darksidious créer une classe pour simplifier les actions sur ta base...

Par contre il m'a semblait avoir lu il y a quelques temps voir plus d'un an, qu'il fallait préférer ado à dao.
Qu'en pensez-vous ??
0
Compufly Messages postés 15 Date d'inscription vendredi 2 septembre 2005 Statut Membre Dernière intervention 21 octobre 2006
4 mars 2006 à 19:50
Désolé Dark Sidious, je m'étais probablement mal exprimé au départ, je cherchais vraiment un code pour créer le fichier .mdb donc le code de Willi était exactement ce que je cherchais.

Je connais déjà SQL, mais les seules applications que j'ai eu à faire jusqu'à maintenant étaient en PERL et MySQL.
C'est surtout une question d'adaptation au VB6 et M$ ACCE$$ qui me bloque chaque fois que j'essaie de faire quelque chose.

Donc, encore une fois, merci Willi pour le code de création du fichier.

Pour ce qui est de ADODB, je savais la base, mais je ne me serais jamais imaginé que ça prenait autant de code pour remplacer la bonne ville commande MySQL :
SHOW TABLES;

Merci

Par contre, le mystère suivant reste entier...

DESCRIBE table;
CREATE TABLE player_name IF NOT EXIST (...

Est-ce que la seule façon de ne pas recréer une table est vraiment de lister toutes les tables et de faire une boucle de comparaison pour voir si celle qu'on veut créer existe déjà où puis-je simplement demander à ACCESS comme je le fais pour MySQL de créer la table seulement si elle n'existe pas?

Compufly
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
4 mars 2006 à 20:21
Willi : j'ai toujours préféré utiliser DAO à ADO, non pas parce que je suis contre les nouvelles technologies (je prog toujours en VB6, et je ne pense pas migrer vers .NET !!!), mais tout simplement parce que DAO est plus léger et plus rapide qu'ADO. (cependant, je programme qu'en ADO maintenant car il paraît que DAO est obsolète...)

Maintenant, ADO apporte une approche plus objet que DAO, c'est pas plus mal, mais le problème, c'est qu'on a pas mal de dépendances si on veux créer une base et la gérer dans son intégralité, alors qu'avec DAO : on référence la librairie de base (qui en plus était très bien intégrée à VB6), et hop, le tour est joué.

Compufly : oui en effet, ca doit être possible de recréer ensuite toute ta base avec des instructions SQL.

_

<spa></spa>
0
Compufly Messages postés 15 Date d'inscription vendredi 2 septembre 2005 Statut Membre Dernière intervention 21 octobre 2006
4 mars 2006 à 20:57
Je vois.

Je n'ai par contre jamais utilisé les class, donc je préfère ne pas trop m'aventurer à l'extérieur de ce que je connais pour l'instant.

J'ai commencé à travailler avec VB6 il y a un an seulement, avant j'étais toujours avec QBasic sous DOS et C++ sous DOS également.
J'ai aussi utilisé PERL sous Linux et MySQL comme base de données avec mon site Internet de l'époque, donc VB n'est pas vraiment "user freindly" pour moi.
Les objets, je commence à comprendre, mais les class et tout le tralala des ActiveX, j'ai de la misère.

Merci beaucoup pour votre aide.

Willi : Une dernière chose, je vois bien comment lister les tables maintenant, mais comment puis-je lister le nom des fields dans la table?
Par exemple, j'ai une table NHL qui contient les fields PLAYER_NAME et SCORE qui eux même contiennent les valeurs Saku et 20 (admettons).

Que puis-je faire au lieu d'un DESCRIBE TABLE NHL pour lister les noms des deux fields : PLAYER_NAME et SCORE ?

Compufly
0
Compufly Messages postés 15 Date d'inscription vendredi 2 septembre 2005 Statut Membre Dernière intervention 21 octobre 2006
4 mars 2006 à 21:23
Merci encore une fois ;0)

Compufly
0
Rejoignez-nous