COMMENT CRÉER UNE BASE ACCESS, CRÉER TABLE, LIRE COLONNE, EN QUELQUES LIGNES VB5

Messages postés
363
Date d'inscription
jeudi 20 décembre 2001
Statut
Membre
Dernière intervention
25 août 2003
- - Dernière réponse : psy460
Messages postés
10
Date d'inscription
mercredi 14 janvier 2009
Statut
Membre
Dernière intervention
24 avril 2009
- 4 févr. 2009 à 13:28
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/2722-comment-creer-une-base-access-creer-table-lire-colonne-en-quelques-lignes-vb5-vb6

cs_shivan
Messages postés
363
Date d'inscription
jeudi 20 décembre 2001
Statut
Membre
Dernière intervention
25 août 2003
-
ben si c toi, c parfait !!! je voulais mettre au propre un tutoriel dans le genre, mais la je suis coiffé au poteau !!! ;-)
bon ben un 10/10 pour la clarté !

$hîv@n
106
Messages postés
39
Date d'inscription
jeudi 17 janvier 2002
Statut
Membre
Dernière intervention
14 janvier 2008
-
C'est une solution. Et en plus, elle peut fonctionner avec d'autres types de base de données.
J'utilise une autre méthode, j'essaierai d'en faire un petit extrait.

Aller 9/10 pour pas mettre 10.
cs_bigane
Messages postés
46
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
12 février 2004
-
Merci pour les notes, oui c'est bien de moi.
safireevil
Messages postés
18
Date d'inscription
mercredi 2 janvier 2002
Statut
Membre
Dernière intervention
23 septembre 2002
-
g 1 problème !
y me dit type défini par l'utilisateur non défini à propos de "Dim db As DAO.Database"

qqn peut-il m'aider ?
cs_bigane
Messages postés
46
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
12 février 2004
-
Facile, ce qu'il te manque c'est le moteur jet (DAO) :
Tu vas dans le menu Projet / Références, et tu coches
Microsoft DAO 3.51 Object Library
(PS: tu peux avoir DAO 3.6, ou un autre suivant ton installation de VB6)
(PS/PS évite DAO 2.5/3.51 qui est une compatibilité pour ancien composant)
A+
Leortien
Messages postés
6
Date d'inscription
vendredi 27 octobre 2000
Statut
Membre
Dernière intervention
24 juillet 2002
-
le prend pas mal mais
je t'adore toi
c exactement ce que je cherchais
t un amour
cs_bigane
Messages postés
46
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
12 février 2004
-
Merci, bon code et bisous...
Si tu as un souci, écris le ici, je te répondrai, et cela peut dépanner les autres.
A+
Bigane
Leortien
Messages postés
6
Date d'inscription
vendredi 27 octobre 2000
Statut
Membre
Dernière intervention
24 juillet 2002
-
lol moi fo pas me proposer de l'aide je suis un vrai parasite (je ne sais pas si tu connais le terme "boulet" ;op)

****************
en fait je cherche un moyen de mettre un mot de passe sur la base que je crée et j'arrive pas à trouver comment on fait
je crois que je suis po doué (et surtout que je m'y prends mal pour apprendre VB)
****************

bisous aussi
tu veux po être mon papa/ma maman pour visual basic? lol (je suis un vrai gamin et je commence à me croire sur un site de chat :o/ )
programheure
Messages postés
2
Date d'inscription
mercredi 21 août 2002
Statut
Membre
Dernière intervention
22 août 2002
-
Salut,

Je débute dans la programmation VB et en m'attaque déjà à l'ADO.. un peu fou le mec mais bref... Voilà ton exemple et très clair et très compréhensible. J'ai cependant essayer de l'adapter à mes besoins en utilisant non pas une chaine de caractère définie mais en passant par une variable dna sle code suivant :

ton code :
'On crée une ligne dans cette table
db.Execute "INSERT INTO TableY ( ColonneX ) values ('Ceci est un test');"

Mon code :
j'ai défini bien entendu correctement la variable utilisisée.
'On crée une ligne dans cette table
db.Execute "INSERT INTO MaTable ( MonChamp ) values (MaVaraible);"

Voici le message d'erreur :
Erreur d'execution '3061'
Too Few parameters. Expected 1

Autre question. Pourquoi n'utilises tu pas les recordsets ? Peux tu donner la version avec l'utilisation d'un recordset STP ?

Merci par avance pour ton aide précieuse.
programheure
Messages postés
2
Date d'inscription
mercredi 21 août 2002
Statut
Membre
Dernière intervention
22 août 2002
-
J'apporte ma propre réponse :

db.Execute "INSERT INTO MaTable ( MonChamp ) values (" & MaVaraible & ");"

Et ça... ça fonctionne !
cs_bigane
Messages postés
46
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
12 février 2004
-
Réponse à programheure:
Oui, je peux aussi utiliser des recordsets au lieu du db.execute.
Voici la syntaxe (de tête, je reviens de vacances...)

Au lieu de la ligne :
'On crée une ligne dans cette table
db.Execute "INSERT INTO TableY ( ColonneX ) values ('Ceci est un test');"

Mettre les lignes suivantes :
'(Ce dim est mal placé, il doit être mis en début de la fonction normalement)
Dim rs As Recordset
'Ouverture de la table en lecture et écriture
'dbOpenTable = indique l'accès à une table en direct,
'le traitement sera plus rapide.
Set rs = db.OpenRecordset("TableY", dbOpenTable)
'Crée une nouvelle ligne dans la table
rs.AddNew

'3 méthodes d'accès à la même donnée:
'------------------------------------

'Méthode 1 : Accède au champ numéroté 0 (colonne 1 de la table)
rs.Fields(0).Value = "Ceci est un test V1"

'Méthode 2 : Accède au champ nommé ColonneX
rs.Fields("ColonneX").Value = "Ceci est un test V2"

'Méthode 3 : Accède au champ nommé ColonneX, mais notation simplifiée
rs!ColonneX.Value = "Ceci est un test V3"

'Méthode 3 bis: les crochets permettent les noms avec les espaces
rs![ColonneX].Value = "Ceci est un test V4"

'Valide toutes les modifications et effectue les tests d'intégrité (si il y en a).
'Seule la dernière modification est effectuée dans la base après cette ligne (V4).
'Durant toutes les modifications précédentes, la ligne était illisible
'par une autre connexion à la base.
rs.Update

'Referme la table proprement
rs.Close

'Voilà, la chose est faite. remplacé la valeur par MaVariable est alors plus simple.
'La lecture est aussi aisée, on ouvre la table de la même façon,
'on se déplace par des rs.MoveNext après avoir traité la première ligne,
'et ceci tant qu'il y a encore quelque chose dans la table :

'Ouverture de la table en lecture écriture
Set rs = db.OpenRecordset("TableY", dbOpenTable)

'Tant qu'il y a des lignes dans la table
Do While Not rs.EOF

'Fait un reste sur une colonne de cette table
'(ce test est un exemple)
If rs.Fields(0).Value <> "Une autre valeur" Then

'Passe en mode modification
rs.Edit

'Modifie cette ligne
rs.Fields("ColonneX").Value = "Correctif"

'Valide la dernière modification
rs.Update

'Sinon...
Else

'Détruit pour toujours cette ligne ignoble !
rs.Delete

End If


'On passe à la prochaine ligne de la table
rs.MoveNext

'Je boucle sur le tant que
Loop

'Referme la table proprement
rs.Close

'Libère l'objet (très important et souvent oublié)
Set rs = Nothing


Des questions ou remarques ?
Bigane.
cs_bigane
Messages postés
46
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
12 février 2004
-
PS: le code source est mis à jour avec un nouveau bouton permettant la création de la table avec les objets DAO au lieu d'une requête.
L'ensemble de l'exemple de mon précédent message y est inclu.

Bon code à tous,
Bigane.
blackwizzard
Messages postés
1277
Date d'inscription
mercredi 21 mars 2001
Statut
Modérateur
Dernière intervention
21 juin 2009
2 -
T un champion!
tu me sauve la vie! :p
marchmat
Messages postés
1
Date d'inscription
mardi 11 mars 2003
Statut
Membre
Dernière intervention
26 mars 2003
-
comment on fait pour creer un index et l'autoincrementer??? il doit y avoir moyen mais je suis débutant alors si tu pouvait me donner un coup de main, ca m'arrangerais fortement...
Merci....
capoueidiablo
Messages postés
316
Date d'inscription
jeudi 9 janvier 2003
Statut
Membre
Dernière intervention
1 février 2010
1 -
Bon ba je vois que vous êtes tous des grosses têtes :-p alors je vais vous poser une question qui je suis sure est simple pour vous :
bon ba voila je veux faire exactement la meme chose que le code source si dessus mais sans utilisé l'ADO ou la DAO mon boss il m'a dis qu'il ne voulais en aucun cas ces technique de prog et qu'il fallais que j'utilise des API donc j'ai fais des recherche, mais je trouve pas ttes les sources sur les sites dédiés au VB et au base de données parlent de la DAO :'( s'il vous plait aidé moi.....
cs_bigane
Messages postés
46
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
12 février 2004
-
Si tu n'utilise pas ADA ou DAO, alors il te reste l'ODBC. Par exemple tu installe mySQL sur un poste, tu crée une source ODBC avec ta base de données Access, et tu interroge ta base avec du PHP. C'est simple, efficace et tu te passes de ADO et DAO. Pour finir, si ton boss veux quand même utiliser les API, qu'il le fasse lui même. Ce n'est pas la peine de réinventer la roue. L'appel aux api ne serait qu'un accès à une source d'ODBC. C'est bien lourd pour un bénéfice zéro. Vu que tu semble débutant, ton code sera approximatif, difficile à maintenir. Tu passeras des heures à réinventer des accès déjà programmés par des équipes de développeurs... bref ton boss va perdre son temps et son argent. Toi, par contre, tu te formera et ton expérience vaudra de l'or (celui de ton boss).
Bon courage,
je serai curieux de connaitre la fin de cette histoire,
ne nous oublie pas.
capoueidiablo
Messages postés
316
Date d'inscription
jeudi 9 janvier 2003
Statut
Membre
Dernière intervention
1 février 2010
1 -
ba en faite il m'a dis que l'ado reste superficiel et que tu ne peux justement pas tout géré par cette methode et donc qu'il était preferable d'utilisé de l'odbc enfin bref aujourd'hui j'ai une reunion je vais lui en parler et le cogné s'il le faut ;-)
merci bien bigane, quand j'aurai fini mon code je vous fournirai quelques fonctions...
zeunz
Messages postés
201
Date d'inscription
jeudi 26 février 2004
Statut
Membre
Dernière intervention
30 juin 2008
-
salut.
merci pr ton code source ki me sera tres utile. chez moi je possede access 2000 et les reference ne sont pas les memes qu'access97.
dc mnt j'ai les deux.

par contre je voualis te demander si tu sais comment créer les relations ds access (97 et 2000) par l'intermediaire du code vb.

je voudrai en qque sorte créer automatiquement une base de donnees avec des tables et reliée entre elles (par les clefs) des que l'utilisateur execute pr la 1ere fois le programme ke je créé.

sinon pour ta source, bon code propre et bien commentée. ca c'est tres important.

bonne continuation.

zeunz.
cs_bigane
Messages postés
46
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
12 février 2004
-
salut zeunz,

Voici ce que tu peux faire (par exemple)
Crée une base avec deux tables :
Clients [
idClient : numérique, primarykey
NomClient : Texte
]
Produits [
idProduit : numérique, primarykey ;
idClient : numérique ;
NomProduit : Texte
]

le but de la manip sera alors de relier les champs idClient des deux tables.

Voici le bout de code créant cette relation en ADO :
' Pour simplifier, je désigne db comme
' étant ma base dans la suite du code
Dim db As Database
Set db = CurrentDb()
Dim r As Relation

' Création d'une relation
Set r = New Relation

' Ma relation relie les clients et les produits, d'où ce nom pratique
r.Name = "ClientsProduits"

' J'indique les tables concernées par cette relation
r.Table = "Clients"
r.ForeignTable = "Produits"

' Je désigne le champ de la table "Clients"
r.Fields.Append r.CreateField("idClient")

' ce champ est relié à la table jointe (au champ idClient)
r.Fields("idClient").ForeignName = "idClient"

' J'ajoute la nouvelle relation à la collection de la base
db.Relations.Append r
' validation
db.Relations.Refresh

' libération propre et explicite des pointeurs
set r = nothing
set db = nothing

Au cas où, voici la syntaxe pour supprimer la relation
' db.Relations.Delete "ClientsProduits"

Il est facile pour comprendre les relations de les créer avec l'interface. Puis de regarder le résultat en mode debug avec des espions sur l'objet db.relations par exemple. C'est de cette façon que j'ai créé cet exemple.

A+
Bigane
zeunz
Messages postés
201
Date d'inscription
jeudi 26 février 2004
Statut
Membre
Dernière intervention
30 juin 2008
-
merci bigane pr le temps ke tu m'as consacré à ma question. je vais faire un essai avec tt ceci et je te tiendrai au courant.
merci.
zeunz
hastan
Messages postés
6
Date d'inscription
mercredi 21 juillet 2004
Statut
Membre
Dernière intervention
20 septembre 2004
-
hello !! g un ch'tit problem: j ai besoin d exporter un resutlat de requette sql depuis vb vers Acces !! please ! help!!
cs_bigane
Messages postés
46
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
12 février 2004
-
Donne plus d'explications :
Une requête ? elle rapatrie un ou plusieurs résultats ?

--> si un seul alors tu intégre les données avec une simple requête d'ajout ou un recordset ouvert sur la table de destination (et rs.addnew comme décrit plus haut).
--> si plusieurs tu peux faire une boucle pour relire les enregsitrements de ta requête un a un et utilisé la méthode utilisée pour un seul.
Sinon tu as encore la possibilité d'effectuer une requête d'insersion "insert into LaTable select xxx" et tu utilise ta fameuse requête comme sources de valeur à écrire dans ta table. Problème : il faut que tes données correspondent exactement à celles de la table de destination.
Cela doit te donner des pistes ... sinon, donne un exemple de requête, le type de tes données, la ou les tables de résultats ...
a+
Bigane.
stefdsig
Messages postés
4
Date d'inscription
dimanche 16 janvier 2005
Statut
Membre
Dernière intervention
5 mai 2005
-
Bonjour,
j'ai essayé le code et ca marche mais je n'arrive pas a integrer dans ma base de donné des enregistrements de type numérique. Le text fonctionne et ce place correctement dans les enregistrements mais pas les valeurs numériques.


'Création d'une table avec une requête (simple non ?)
db.Execute "CREATE TABLE [TableY] ( [ColonneX] Text(50) );" ok

'Création d'une table avec une requête (simple non ?)
db.Execute "CREATE TABLE [TableY] ( [ColonneX] single );" non


merci pour le code qui ma bien aidé.
stefdsig
Messages postés
4
Date d'inscription
dimanche 16 janvier 2005
Statut
Membre
Dernière intervention
5 mai 2005
-
j'ai trouvé la solution
db.Execute "INSERT INTO ADULTE (LT,B,I) values (""" & tableauA(a).adulteLT1 & """, """ & tableauA(a).adulteB1 & """,""" & tableauA(a).adulteI1 & """ );"

Mais un autre probleme se pose. Je n'arrive pas a renseigner plusieur table. Les valeur sont bonne mais la seconde table ne se rempli pas.
Merci
cs_bigane
Messages postés
46
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
12 février 2004
-
Salut,

Désolé pour ton problème, mais tu ne peux pas insérer une ligne dans plusieurs tables en une seule requête.
Par contre si tu la décompose (une par table) alors tu devrais pouvoir y arriver.

Pour ton premier problème, voici une solution :
db.Execute "CREATE TABLE [TableA] ( [ColonneX] Long);"

db.Execute "CREATE TABLE [TableB] ( [ColonneX] Number );"

La table A contiendra une colonne de type Long (effecue des tests pour vérifier le type).
La table B contiendra une colonne de type Double, poun insérer une valeur tu feras par exemple :

db.Execute "INSERT INTO TableB ( ColonneX ) values (2.5);"

A+
Bigane
igorois
Messages postés
1
Date d'inscription
lundi 4 avril 2005
Statut
Membre
Dernière intervention
30 juin 2005
-
salut bigane,
moi, j'utilise la methode ADO pour gerer mes bases de donnees et je voudrais savoir si tu as un code qui cree une copie d'1e base de donnee deja concu sous access sans les donnes bien sur(ne pas oublier c'est ADO)
cs_bigane
Messages postés
46
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
12 février 2004
-
Salut Igorois,
Non, désolé je n'ai pas cela. Par contre j'ai déjà eu un problème similaire. C'est réélement complexe.
Tu peux utiliser la commande suivante :
Dim dbEng As DAO.DBEngine
dbEng.CompactDatabase scrName, DstName
Car celle-ci permet de créer une copie compressée de ta base initiale. Un balayage des tables permet ensuite de les vider une à une, et une dernière compression réinitialise les compteurs.
Une seconde méthode consiste à creer une base vide, à énumerer les tables et les colonnes de ta première base pour ensuite les créer dans la suivante. C'est long, mais si tu y arrive tu pourras tout faire avec cette méthode.
A+
pi_givinchi
Messages postés
5
Date d'inscription
mardi 8 mars 2005
Statut
Membre
Dernière intervention
3 juillet 2005
-
c'est un bon code, et permet moi vous donne une question j'ai utilise déja l'objet data pour me connecter deVB6 avec la BD sur access (j'ai déja convertie ma bd en 97) et j'ai connecté mes zone de text ,et ajouter des boutons de commande parmis la recherche mais il ne fonction pas correctement? si qq peut m'aide par un code standart je serai heureux?
Munkyubi
Messages postés
16
Date d'inscription
mardi 24 mai 2005
Statut
Membre
Dernière intervention
23 mars 2010
-
Bonjours. Tout d'abord merci beaucoup pour ce code c'est trés sympa et trés bien fait ^^
Par contre j'aimerais savoir. Peut-on, à la manière du DAO, créer des tables, champs etc... sans utiliser de requêtes mais en ADO ? Je sais qu'en DAO il y a déjà des méthodes définies pour le faire mais j'aimerais savoir si en ajoutant une référence ou autre on pourrait le faire en ADO. (Tout simplement parce-que mon boss n'aime pas vraiment les requêtes sql lol)
Merci d'avance ^^
cs_Exploreur
Messages postés
4824
Date d'inscription
lundi 11 novembre 2002
Statut
Membre
Dernière intervention
15 novembre 2016
12 -
Salut,

Qui cherche, trouve...j'ai cherché...j'ai trouvé !!
Cela ma évité de poser une question sur le forum..
10/10

A+
Exploreur
cs_bigane
Messages postés
46
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
12 février 2004
-
Merci,
a ton service et bon code.
a+
Bigane
Reelaxman
Messages postés
56
Date d'inscription
vendredi 21 mars 2003
Statut
Membre
Dernière intervention
9 décembre 2007
-
Du sur mesure !!!!!!!!!!!!!!
psy460
Messages postés
10
Date d'inscription
mercredi 14 janvier 2009
Statut
Membre
Dernière intervention
24 avril 2009
-
j'ai un problème : il ne reconnait pas workspaces(0) :s

pourquoi il n'en veut pas ??
cs_bigane
Messages postés
46
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
12 février 2004
-
Je suis désolé, ce code fonctionnait avec VB6 et VBA pour Office 97 à 2003.
Microsoft a évolué depuis et avec le temps j'ai abandonné tous leurs produits au profit des produits libres (entendre libre d'accès aux sources et gratuits).

Donc le premier test pour savoir si ce code est toujours d'actualité, c'est DAO. Si cet objet est reconnu (cf : 2- dans le menu projet, menu références, coche : Microsoft DAO 3.5 Object Library ou DAO avec une version supérieure) En saisissant le mot DAO puis le point dans la fenêtre du code, alors la complétion automatique devrait te proposer Workspace(0) ou quelque chose d'approchant. Au pire, il pourrait te proposer le mot OpenDatabase :
DAO.OpenDatabase( ...

Si tu n'arrives pas à avoir cette méthode : càd pas de complétion pour le mot DAO c'est que :
1) soit tu n'as pas mis Microsoft DAO x.y Object Library
2) soit tu n'utilises pas VB ou VBA

Bon courage,
Bigane
psy460
Messages postés
10
Date d'inscription
mercredi 14 janvier 2009
Statut
Membre
Dernière intervention
24 avril 2009
-
si dim db as dao.database par exemple il connais, ou dim wks as dao.worspace(s) il commais mais avec set db=dao.* il propose rien et connais rien :s