Problème base de données

ph014 Messages postés 4 Date d'inscription mercredi 25 novembre 2009 Statut Membre Dernière intervention 19 août 2010 - 19 août 2010 à 13:59
ph014 Messages postés 4 Date d'inscription mercredi 25 novembre 2009 Statut Membre Dernière intervention 19 août 2010 - 19 août 2010 à 23:07
bjr,
Je suis occupé à réaliser un code en vb6 permettant de retrancrire n'importe quel logo sur un bic, via un pyrograveur controlé par un automate. j'ai rajouté un code d'accès à ce programme, possédant une certaine durée de validité après la saisie correcte de celui-ci. Je propose à l'utilisateur de pouvoir changer le code d'accès et sa durée de validité. J'ai donc besoin d'une base de données pour sauvegarder les changement après la fermeture du fichier. J'ai trouvé certaines choses sur internet mais c assez vague. J'utilise access 97. ma base de données porte le nom "bd_pyro". j'ai créer une table en mode création (modification option), avec un champ auto pour la clé primaire, déclaré en numeroauto. j'ai créer 2 autres champs, "nouveau code" et "compte_rebour" déclarer en objet ole.

Maintenant dans le code vb, j'ai mis dans mon module:
Public db As Database
Public rst As Recordset
Public sql As String
dans le form load:
Set db = OpenDatabase(App.Path & "\base_données" & "db_pyro.mdb")
(ma base de données se trouve dans un dossier appelé, base_données, qui ce trouve lui même dans le dossier de mon application) quand j'execute, il me met une erreur 3024, dc il n'arrive pas à ce connecter à la base de données.

Enfin, quand j'appuye sur un bouton, les mises à jours doivent être effectué dans la table sur mes deux champs... Le code est le suivant:

sql = compte_rebour.Text (j'ai créé une textbox compte_rebour où je met la variable du même nom)
Set rst = db.OpenRecordset(sql, dbOpenDynaset)

rst.Edit
rst.Fields("compte_rebour") = compte_rebour
rst.Update
rst.Close

je ne sais pas si cette dernière partie est bonne parce qu'il n'arrive pas à se connecter à la bd...
Voilà, j'ai essayé d'être le plus précis possible. Merci de m'aider, ça serait vraiment sympa, j'ai deux examens dans une semaine plus ce projet et je suis complètement bloqué dans celui-ci. Maintenant si vous avez une autre solution, plus simple, je suis preneur.
merci d'avance

5 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
19 août 2010 à 15:04
Salut
Côté ouverture de ta DB, les objets Database ou RecordSet sont des objets DAO.
DAO est obsolète et certaines de ses fonctions ne fonctionnent pas.

Il faut utiliser ADO et plus précisément ADODB :
Dans ton projet, il faut ajouter la référence "Microsoft ActiveX Data Objects 2.8 Library" qui est le fichier %System%\ado\msado15.dll
ADO fonctionne toujours avec les DB au format 97.

Ensuite, il faut modifier tes déclarations de variables :
Database devient ADODB.Connection et
RecordSet devient ADODB.RecordSet

Les méthodes de ces objets changent un petit peu.
Je te conseille la lecture de quelques codes présents sur le site et qui parlent des bases de données et tu auras des exemples concrets.
Notamment le db.ConnectionString que tu devras renseigner pour paramétrer l'accès à ton fichier de DB, avant de faire le db.Open.

D'autre part, ta requète SQL est bizarre :
sql = compte_rebour.Text
Set rst = db.OpenRecordset(sql, dbOpenDynaset)
Cela veut dire que tu fournis un chiffre, c'est tout ?
Où précises-tu ne nom de la Table ?
Dans ta structure de table, tu parles des champs "auto" et "nouveau code" : Comment va faire ton programme pour retrouver ou insérer les données ?
Est-ce que tu envisages qu'il y ait qu'une seule ligne dans ta table ?
De toute façon, il faudra que tu modifies la méthode d'accès aux données du RecordSet, donc il faudra revoir cela.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
ph014 Messages postés 4 Date d'inscription mercredi 25 novembre 2009 Statut Membre Dernière intervention 19 août 2010
19 août 2010 à 17:03
merci de ta réponse et en plus rapide. J'ai fait ce que tu m'as dit, c'est-à-dire:

1) corriger la déclaration

Public db As ADODB.Connection
Public rst As ADODB.Recordset
Public sql As String

2) j'ai trouvé un code sur le connection string:

Dim sql As String
Dim cnx As New ADODB.Connection
Dim rst As New ADODB.Recordset

cnx.Mode = 3 'pour pouvoir inserer des données
cnx.Provider = "Microsoft.Jet.Oledb.4.0" 'Définition de la chaîne de connexion
cnx.ConnectionString = App.Path & "\BASE.mdb" 'Ouverture de la base de données
cnx.Open
rst.ActiveConnection = cnx
...

sql = "SELECT * FROM TABLE_CONTENU"
rst.Open (sql)
...

cnx.mode=... et cnx.provider=... je ne comprend pas trop, surtout la deuxième, c'est quoi ce fichier?
pour la ligne sql = "SELECT * FROM TABLE_CONTENU",
le terme "TABLE_CONTENU", c'est le nom de la table dont tu m'as parlé?
pour moi, ca serait un truc du genre sql="SELECT * FROM modification_option"? A quoi sert le "select"? vu comme ca, j'ai l'impression, que c'est du simple texte vu que c'est entre ""

Pour le reste, j'ai essayé un truc comme ca, sans tout comprendre et ca ne marche pas lol:

db.Mode = adModeReadWrite
db.Provider = "Microsoft.Jet.Oledb.4.0"
db.ConnectionString = App.Path & "\base_données" & "db_pyro.mdb"
db.Open
rst.ActiveConnection = db


Pour répondre à tes questions sur ma requete sql, je veux envoyer dans ma base de données et plus précisément dans ma table "modification_option", un nombre contenu dans la variable "compte_rebour" qui désigne le temps de validité du code d'accès et une variable qui contient mon code d'accès (caractère alphanum et spéciaux, donc je sais pas si je l'ai bien déclaré) Par un ex, ca sera plus simple d'expliquer:
quand je rentre dans le programme, je saisi le code d'accès et il est valable 10 s (par défaut). j'ai 10s, pour appuyer sur le bouton "suivant" qui me permet de rentrer dans le vif du programme. En fait quand je fais cela, je quitte ma 1iere form et j'en ouvre une deuxième. Si après 10s, on a pas appuyer sur ce bouton, il faut resaisir le mot de passe pour pouvoir accéder à la deuxième form. et après je peux changer la durée de validité et le code. par exemple je met 1 min et quand je réexcuterai le programme dans le futur, j'aurais une validité d'1 min et je devrais rentrer un autre code si je l'ai changé.

Pour toute tes autres questions, je ne sais pas trop car je ne connais pas la méthode pour le faire. Par contre, au vue de ce que je viens d'expliquer, je pense qu'une seul ligne suffirait. j'ai pas besoin de réouvrir des enregistrement passé.
Si j'arrive à le faire (avec de l'aide), je serai bien tenter de permettre par la suite, à l'utilisateur d'enregistrer son projet de de pouvoir le réouvrir par la suite. La j'aurais besoin de plusieurs ligne et je devrais sauver, mes pictrurebox, mon code texte,... mais d'abord, je veux voir si j'arrive à faire ca, qui doit être plus "simple"

Pour ce qui est des codes sur ce site qui pourrait correspondre à ce que je fais, pourrais tu me donner les liens? et si je n'abuse pas trop, ca serait sympa que tu me mette exactement le code que je dois mettre, en autre pour ma requete sql. Ou une autre personne, y a plus dans deux têtes que d'en une... la programmation n'est déjà pas mon fort mais c'est pas avec les cours de vb que j'ai eu que ca va s'arranger lol... tout ce projet je l'ai fait par à coup, en trouvant sur ce forum des truc, en posant des questions
en tout cas, même si tu ne sais pas répondre à ma requête merci et heureusement que ce site existe...
0
ph014 Messages postés 4 Date d'inscription mercredi 25 novembre 2009 Statut Membre Dernière intervention 19 août 2010
19 août 2010 à 17:03
Si d'autres personnes veulent m'aider, je suis preneur... merci
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
19 août 2010 à 19:50
Oui, on va répondre à tes questions, mais c'est à toi de te former; on n'est pas un centre de formation ni une école.

Oui, une requète SQL, c'est du texte.

Exemple de code trouvé en 27 secondes : http://www.vbfrance.com/codes/TUTORIAL-ADODB-ADO_4724.aspx

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0

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

Posez votre question
ph014 Messages postés 4 Date d'inscription mercredi 25 novembre 2009 Statut Membre Dernière intervention 19 août 2010
19 août 2010 à 23:07
merci. c'est juste que comme, je ne savais pas trop quoi chercher, j'étais pas sur de ce que je trouvais. v tester tout ca. ça à l'air clair le code. c'est parfait pour moi. merci de ta patience...
0
Rejoignez-nous