COMMENT CRÉER UNE BASE ACCESS, CRÉER TABLE, LIRE COLONNE, EN QUELQUES LIGNES VB5
cs_shivan
Messages postés363Date d'inscriptionjeudi 20 décembre 2001StatutMembreDernière intervention25 août 2003
-
2 mars 2002 à 18:50
psy460
Messages postés10Date d'inscriptionmercredi 14 janvier 2009StatutMembreDernière intervention24 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.
psy460
Messages postés10Date d'inscriptionmercredi 14 janvier 2009StatutMembreDernière intervention24 avril 2009 4 févr. 2009 à 13:28
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
cs_bigane
Messages postés46Date d'inscriptionlundi 4 février 2002StatutMembreDernière intervention12 février 2004 4 févr. 2009 à 08:17
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és10Date d'inscriptionmercredi 14 janvier 2009StatutMembreDernière intervention24 avril 2009 2 févr. 2009 à 22:01
j'ai un problème : il ne reconnait pas workspaces(0) :s
pourquoi il n'en veut pas ??
Reelaxman
Messages postés56Date d'inscriptionvendredi 21 mars 2003StatutMembreDernière intervention 9 décembre 2007 8 déc. 2007 à 22:45
Du sur mesure !!!!!!!!!!!!!!
cs_bigane
Messages postés46Date d'inscriptionlundi 4 février 2002StatutMembreDernière intervention12 février 2004 25 févr. 2007 à 19:37
Merci,
a ton service et bon code.
a+
Bigane
cs_Exploreur
Messages postés4821Date d'inscriptionlundi 11 novembre 2002StatutMembreDernière intervention15 novembre 201615 21 févr. 2007 à 20:41
Salut,
Qui cherche, trouve...j'ai cherché...j'ai trouvé !!
Cela ma évité de poser une question sur le forum..
10/10
A+
Exploreur
Munkyubi
Messages postés16Date d'inscriptionmardi 24 mai 2005StatutMembreDernière intervention23 mars 2010 12 janv. 2006 à 09:37
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 ^^
pi_givinchi
Messages postés5Date d'inscriptionmardi 8 mars 2005StatutMembreDernière intervention 3 juillet 2005 3 juil. 2005 à 00:15
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?
cs_bigane
Messages postés46Date d'inscriptionlundi 4 février 2002StatutMembreDernière intervention12 février 2004 2 juil. 2005 à 01:16
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+
igorois
Messages postés1Date d'inscriptionlundi 4 avril 2005StatutMembreDernière intervention30 juin 2005 30 juin 2005 à 20:35
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és46Date d'inscriptionlundi 4 février 2002StatutMembreDernière intervention12 février 2004 2 mai 2005 à 18:51
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
stefdsig
Messages postés4Date d'inscriptiondimanche 16 janvier 2005StatutMembreDernière intervention 5 mai 2005 2 mai 2005 à 16:27
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
stefdsig
Messages postés4Date d'inscriptiondimanche 16 janvier 2005StatutMembreDernière intervention 5 mai 2005 26 avril 2005 à 09:47
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é.
cs_bigane
Messages postés46Date d'inscriptionlundi 4 février 2002StatutMembreDernière intervention12 février 2004 20 sept. 2004 à 19:12
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.
hastan
Messages postés6Date d'inscriptionmercredi 21 juillet 2004StatutMembreDernière intervention20 septembre 2004 20 sept. 2004 à 16:28
hello !! g un ch'tit problem: j ai besoin d exporter un resutlat de requette sql depuis vb vers Acces !! please ! help!!
zeunz
Messages postés200Date d'inscriptionjeudi 26 février 2004StatutMembreDernière intervention30 juin 2008 5 mai 2004 à 08:37
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
cs_bigane
Messages postés46Date d'inscriptionlundi 4 février 2002StatutMembreDernière intervention12 février 2004 4 mai 2004 à 19:38
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és200Date d'inscriptionjeudi 26 février 2004StatutMembreDernière intervention30 juin 2008 4 mai 2004 à 09:04
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.
capoueidiablo
Messages postés316Date d'inscriptionjeudi 9 janvier 2003StatutMembreDernière intervention 1 février 20101 29 juil. 2003 à 09:30
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...
cs_bigane
Messages postés46Date d'inscriptionlundi 4 février 2002StatutMembreDernière intervention12 février 2004 28 juil. 2003 à 22:58
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és316Date d'inscriptionjeudi 9 janvier 2003StatutMembreDernière intervention 1 février 20101 28 juil. 2003 à 14:41
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.....
marchmat
Messages postés1Date d'inscriptionmardi 11 mars 2003StatutMembreDernière intervention26 mars 2003 26 mars 2003 à 15:11
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....
blackwizzard
Messages postés1258Date d'inscriptionmercredi 21 mars 2001StatutMembreDernière intervention21 juin 20092 10 déc. 2002 à 03:23
T un champion!
tu me sauve la vie! :p
cs_bigane
Messages postés46Date d'inscriptionlundi 4 février 2002StatutMembreDernière intervention12 février 2004 25 août 2002 à 14:41
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.
cs_bigane
Messages postés46Date d'inscriptionlundi 4 février 2002StatutMembreDernière intervention12 février 2004 25 août 2002 à 13:58
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.
programheure
Messages postés2Date d'inscriptionmercredi 21 août 2002StatutMembreDernière intervention22 août 2002 22 août 2002 à 09:50
programheure
Messages postés2Date d'inscriptionmercredi 21 août 2002StatutMembreDernière intervention22 août 2002 21 août 2002 à 16:07
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.
Leortien
Messages postés6Date d'inscriptionvendredi 27 octobre 2000StatutMembreDernière intervention24 juillet 2002 22 juil. 2002 à 11:51
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/ )
cs_bigane
Messages postés46Date d'inscriptionlundi 4 février 2002StatutMembreDernière intervention12 février 2004 20 juil. 2002 à 11:06
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és6Date d'inscriptionvendredi 27 octobre 2000StatutMembreDernière intervention24 juillet 2002 19 juil. 2002 à 12:57
le prend pas mal mais
je t'adore toi
c exactement ce que je cherchais
t un amour
cs_bigane
Messages postés46Date d'inscriptionlundi 4 février 2002StatutMembreDernière intervention12 février 2004 8 mai 2002 à 19:57
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+
safireevil
Messages postés18Date d'inscriptionmercredi 2 janvier 2002StatutMembreDernière intervention23 septembre 2002 8 mai 2002 à 18:37
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és46Date d'inscriptionlundi 4 février 2002StatutMembreDernière intervention12 février 2004 28 mars 2002 à 23:36
Merci pour les notes, oui c'est bien de moi.
106
Messages postés39Date d'inscriptionjeudi 17 janvier 2002StatutMembreDernière intervention14 janvier 2008 28 mars 2002 à 09:40
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_shivan
Messages postés363Date d'inscriptionjeudi 20 décembre 2001StatutMembreDernière intervention25 août 2003 2 mars 2002 à 18:50
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é !
4 févr. 2009 à 13:28
4 févr. 2009 à 08:17
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
2 févr. 2009 à 22:01
pourquoi il n'en veut pas ??
8 déc. 2007 à 22:45
25 févr. 2007 à 19:37
a ton service et bon code.
a+
Bigane
21 févr. 2007 à 20:41
Qui cherche, trouve...j'ai cherché...j'ai trouvé !!
Cela ma évité de poser une question sur le forum..
10/10
A+
Exploreur
12 janv. 2006 à 09:37
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 ^^
3 juil. 2005 à 00:15
2 juil. 2005 à 01:16
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+
30 juin 2005 à 20:35
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)
2 mai 2005 à 18:51
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
2 mai 2005 à 16:27
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
26 avril 2005 à 09:47
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é.
20 sept. 2004 à 19:12
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.
20 sept. 2004 à 16:28
5 mai 2004 à 08:37
merci.
zeunz
4 mai 2004 à 19:38
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
4 mai 2004 à 09:04
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.
29 juil. 2003 à 09:30
merci bien bigane, quand j'aurai fini mon code je vous fournirai quelques fonctions...
28 juil. 2003 à 22:58
Bon courage,
je serai curieux de connaitre la fin de cette histoire,
ne nous oublie pas.
28 juil. 2003 à 14:41
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.....
26 mars 2003 à 15:11
Merci....
10 déc. 2002 à 03:23
tu me sauve la vie! :p
25 août 2002 à 14:41
L'ensemble de l'exemple de mon précédent message y est inclu.
Bon code à tous,
Bigane.
25 août 2002 à 13:58
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.
22 août 2002 à 09:50
db.Execute "INSERT INTO MaTable ( MonChamp ) values (" & MaVaraible & ");"
Et ça... ça fonctionne !
21 août 2002 à 16:07
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.
22 juil. 2002 à 11:51
****************
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/ )
20 juil. 2002 à 11:06
Si tu as un souci, écris le ici, je te répondrai, et cela peut dépanner les autres.
A+
Bigane
19 juil. 2002 à 12:57
je t'adore toi
c exactement ce que je cherchais
t un amour
8 mai 2002 à 19:57
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+
8 mai 2002 à 18:37
y me dit type défini par l'utilisateur non défini à propos de "Dim db As DAO.Database"
qqn peut-il m'aider ?
28 mars 2002 à 23:36
28 mars 2002 à 09:40
J'utilise une autre méthode, j'essaierai d'en faire un petit extrait.
Aller 9/10 pour pas mettre 10.
2 mars 2002 à 18:50
bon ben un 10/10 pour la clarté !
$hîv@n