begin process at 2010 02 10 09:23:55
  Trouver un code source :
 
dans
 
Accueil > Forum > 

VB.NET et VB 2005

 > 

Base de données

 > 

Access

 > 

Probleme avec oledb


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Probleme avec oledb

samedi 27 septembre 2008 à 01:54:11 | Probleme avec oledb

Deeddolith

Bonjour,

J'ai un petit soucis avec OLEDB, visiblement mes données ne sont pas toujours synchro avec ma base access.

J'ai une application multi forms, avec laquelle j'interroge une base de donnée access J'appelle des forms supplémentaires en  pour ajouter ou mettre a jours les données du form principal.
Les données de mon form principal sont issues d'un dataset.
J'utilise une fonction qui detruit et recrée les objets oledb pour mettre a jours mes données (paut etre pas la meilleur solution, mais la n'est pas le probleme).

Lorsque, dans un form additionel, j'utilise une requete de type INSERT ou UPDATE ou DELETE en passant par la methode oledb.oledbCommand.executeScalar et appelle la methode pour rafraichir mon form principal, je n'ai pas de problemes.

Par contre, lorsque, dans un form additionel (different de celui pre-cité), je met a jours une ligne a passant par un dataAdapter et appelle la methode pour rafraichir mon form principal, je n'obtient pas les données mises a jour. Pourtant, les données ont bien été écrites dans la base avant l'appelle de la mise a jour (j'ai verifié en mode pas a pas).

Y aurait-il un cache qui traine quelque part ?
samedi 27 septembre 2008 à 10:47:53 | Re : Probleme avec oledb

68manu

Salut,
envoies un bout de code, ca sera plus simple pour resoudre cela.
Manu

_____________________
No problems, only soluces
samedi 27 septembre 2008 à 12:17:48 | Re : Probleme avec oledb

Deeddolith

Attention, va y avoir du sport

Dans ma fenetre principale:

Public

Class frm_mob
   'Declaration des variables
   'objets oledb
   Dim cmd As OleDb.OleDbCommand
   Dim da As OleDb.OleDbDataAdapter
   Dim ds As DataSet
   Dim dt As DataTable
   Dim rowNum AsInteger

Public

Sub requery()
      Dim strSQL AsString

      'recupere la requete SQL
      strSQL = cmd.CommandText
      'destruction des objets oledb
      dt.Dispose()
      dt =
Nothing
      da.Dispose()
      da =
Nothing
      cmd.Dispose()
      cmd =
Nothing
      'creation des objets oledb
      cmd = New OleDb.OleDbCommand(strSQL, cn)
      da =
New OleDb.OleDbDataAdapter(cmd)
      da.FillLoadOption = LoadOption.OverwriteChanges
      da.Fill(ds,
"MOB")
      dt = ds.Tables(
"MOB")
      'mise a jour des controles
      updateControls()
   EndSub
End Class

Dans ma fenetre de mise a jours:

Public

Class frm_mobsManager
   'Declaration des variables
   'mode représente la mise a jour des données, soit ajout (mode = "NEW"), soit modification (mode = "UPDATE")
   Dim mode AsString
   'declaration des objets oledb
   Dim cmd As OleDb.OleDbCommand
   Dim da As OleDb.OleDbDataAdapter
   Dim ds As DataSet
   Dim dt As DataTable
   Dim rowNum AsInteger
   Dim strSQL AsString
   Dim cmdb As OleDb.OleDbCommandBuilder
   Dim dr As DataRow
   'flux pour mettre a jour un picrurebox
   Dim stream As IO.MemoryStream

   Private

Sub cmd_ok_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd_ok.Click
      'tableaux d'octets pour gerer les imgages
      'pictureData: données issues de l'images
      Dim pictureData AsByte()
      'fieldData otentes OLE + image qui seront ecrit dans la base
      Dim fieldData AsByte()
      'cmd qui sert a recuperer maxID, clef primaire
      Dim cmdMob As OleDb.OleDbCommand
      Dim maxID AsInteger

      If (txt_nom.Text <> "") Then
         txt_nom.BackColor = System.Drawing.SystemColors.Window
         'Mode Nouvelle ligne
         SelectCase mode
            Case"NEW"
               'Ajour d'une nouvelle ligne au dataset
               dr = ds.Tables("MOB").NewRow
               'recuperation de la valeur maxi de la clef primaire
               cmdMob =
New OleDb.OleDbCommand("SELECT MAX(ID_MOB) FROM MOB", cn)
               maxID = cmdMob.ExecuteScalar()
               cmdMob.Dispose()
               cmdMob =
Nothing
               'valeur clef primaire
               dr("ID_MOB") = maxID + 1
               'colonne TIME_KILLED doit valoir minimum 1
               dr(
"TIME_KILLED") = 1
               ds.Tables(
"MOB").Rows.Add(dr)
            Case"UPDATE"
               dr = dt.Rows(rowNum)
         EndSelect
         'Lecture des valeurs controles et mise a jour de la ligne
         dr("NOM") = txt_nom.Text
         If (txt_lvl.Text = "") Then
            dr("LVL") = DBNull.Value
         Else
            dr("LVL") = txt_lvl.Text
         EndIf
         If (cmb_type.SelectedIndex = -1) Then
            dr("TYPE") = DBNull.Value
         Else
            dr("TYPE") = cmb_typeID.Items(cmb_typeID.SelectedIndex).ToString
         EndIf
         If (cmb_class.SelectedIndex = -1) Then
            dr("CLASS") = DBNull.Value
         Else
            dr("CLASS") = cmb_classID.Items(cmb_classID.SelectedIndex).ToString
         EndIf
         If (txt_comment.Text = "") Then
            dr("COMMENT") = DBNull.Value
         Else
            dr("COMMENT") = txt_comment.Text
         EndIf
         If (pic_mob.Image IsNothing) Then
            'Si aucune image n'est selectionnée, alors on lit une image par defaut, issue de la table SYS_DATA de la base
            cmdMob = New OleDb.OleDbCommand("SELECT NO_PICTURE FROM SYS_DATA", cn)
            dr(
"PICTURE") = cmdMob.ExecuteScalar()
            cmdMob.Dispose()
            cmdMob =
Nothing
         Else
            'Si une image est selectionnée
            'sauvegarde de l'image sur disque
            pic_mob.Image.Save(Application.StartupPath & "\tmp.bmp", Imaging.ImageFormat.Bmp)
            'lecture de l'image a partir du disque
            pictureData =
My.Computer.FileSystem.ReadAllBytes(Application.StartupPath & "\tmp.bmp")
            'destruction du fichier temporaire
            Kill(Application.StartupPath &
"\tmp.bmp")
            'preparation des données de l'image + entetes OLE
            ReDim fieldData(0 To OLEheader.Length + pictureData.Length + OLEfooter.Length - 1)
            'ajout des entetes OLE de debut (sauvegardées au demerrage de l'application)
            Array.Copy(OLEheader, fieldData, OLEheader.Length)
            'ajout de l'image
            Array.Copy(pictureData, 0, fieldData, OLEheader.Length, pictureData.Length)
            'ajout des entetes OLE de fin (sauvegardées au demarrage de l'application)
            Array.Copy(OLEfooter, 0, fieldData, OLEheader.Length + pictureData.Length, OLEfooter.Length)
            dr(
"PICTURE") = fieldData
         EndIf
         cmdb = New OleDb.OleDbCommandBuilder(da)
         'mise a jour de la base de donnée
         da.Update(ds,
"MOB")
         'rafraichir les objets oledb
         ds.Clear()
         da.Fill(ds,
"MOB")
         dt = ds.Tables(
"MOB")
         cmdb.Dispose()
         cmdb =
Nothing
         mode = "NOTHING"
         'mise a jour des controles
         updateControls()
         'mise a jour de la fenettre frm_mob
         frm_mob.requery()
     Else
         txt_nom.BackColor = Color.Red
      EndIf
   EndSub
End Class

J'espere que c'est suffisment clair. (PS: ne vous preoccuper pas trop du traitement de l'image).
Sinon n'hesitez pas a en demander plus.
samedi 27 septembre 2008 à 15:07:19 | Re : Probleme avec oledb

68manu

Salut,

excuses moi j'ai mis un peu de temps...
mais il me reste quelque chose de pas clair...
la variable mode est-elle initialisee a un moment donne ?
Car si elle ne l'est pas, tout ton select case n'est pas lu par ton programme.

Pour l'instant j'ai pas mieux.
Je cherche encore
MAnu

_____________________
No problems, only soluces
samedi 27 septembre 2008 à 17:07:46 | Re : Probleme avec oledb

Deeddolith

Oui, elle est initialisée.
Au depart, mode est initialisé a "NOTHING"
Dans ma fenetre j'ai 2 autre  boutons: New et Update
Apres un click sur New, j'initialise mode a "NEW"
Apres un click sur Update, j'initialise mode "UPDATE"

J'ai egalement 2 autre boutons: Ok (dont le code est ci-dessus), et Cancel.
Après un click sur Cancel, j'initialise mode a "NOTHING"
dimanche 28 septembre 2008 à 19:39:42 | Re : Probleme avec oledb

Deeddolith

Réponse acceptée !
c'est bon, j'ai trouvé.
Dans la procedure requery, j'ai oublié de detruire mon ds !


Cette discussion est classée dans : form, données, principal, appelle, oledb


Répondre à ce message

Sujets en rapport avec ce message

Manipuler des variables sur plusieurs feuilles [ par fred ] Bonjour,Comment fait-on pour manipuler une meme variable declaree sur le form principal sur d'autres feuilles ?ex: J'ai un tableau Data(500) as byte s FORM en ASP à mettre en .txt URGENT !!! [ par Zenway ] J'aimerais récupérer les données d'un formulaire HTML, et les écrires dans un fichier TXT selon ce format :Nom = ...; Prenom = ...; etc...J'arrive bie FORM en ASP à récupérer en .TXT [ par Zenway ] J'aimerais récupérer les données d'un formulaire HTML, et les écrires dans un fichier TXT selon ce format :Nom = ...; Prenom = ...; etc...J'arrive bie ajout de données dans un datagrid [ par seb ] bonjour à tous,J'ai un form avec une vue maitre-détail. Dans la section détails, j'utilise un datagrid pour afficher les détails.La source des ces sec Ne pas perdre les données d'un form quand on clique sur la croix [ par JackySunce ] JackySuncecomment qu'on fait, quand on clique sur la croix d'un form pour que les valeurs présentes dans les champs "Txt" ne s'effacent pas (pour conc instance de form avec actualisation des données [ par akteos ] Hello.J'ai un pb, j'aimerais lancer plusieurs instances d'un même form mais que chacun garde ses propres données.En clair lorsque je clique sur un bou Récuperer données TextBox depuis une autre Form [ par reiben ] Hello à tous,G un probl avec une TextBox.G 2 Form (Form1 et Form2), la form1 à un champ TextBox et la form2 a un label pour afficher l'entrée du champ Need help ! probleme avec un grid svp [ par Angelus ] salut,j'ai un soucis avec un grid, au chargement de ma form, j'ai des données qui s'affichent dans ma grid, le problème étant que lorsque je vais sur Echange données entre form .net [ par gregdevils ] Je suis débutant en .net et je trouve qu'il est plus difficile de programmer sous .net que sous vb6.C'est assez déroutant.Mon programme est un mdi.Dan Imprimentes [ par Morgoth666 ] Bonjour, j'ai petit problème avec un paramètre d'un état.J'ai un formulaire dans lequelle j'ai un sous formulaire, dans le sous form il y a des donnée


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,671 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales