Accueil > Forum > > > > Probleme avec oledb
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
Livres en rapport
|
Derniers Blogs
UNE JOLIE-HORLOGE ET PAS QU'UN PEU !UNE JOLIE-HORLOGE ET PAS QU'UN PEU ! par neodante
Pour les possesseurs d'iPhone, ça y est Bijin Tokei - qui se traduit littéralement en Français par " Jolie Horloge " - est arrivé et GRATUITEMENT s'il vous plaît ! Après la version Tokyo, Hokkaido, night club, racing, Gal, "pour les mademoiselles'", . voi...
Cliquez pour lire la suite de l'article par neodante TECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICESTECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICES par ROMELARD Fabrice
Animé par: Gaetan Bouveret et Julien Chomarat Business Connectivity Services (BCS) est dans SharePoint 2010 la version 2 de Business Data Catalog (BDC dans SharePoint 2007). Il s'agit de la solution permettant de visualiser des données provenan...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE par orion
Comme de nombreux geek, je suis un grand amateur de série TV et je rate régulièrement des épisodes de mes séries préférés. Une solution s'offre à vous avec ce merveilleux site : Tv Gorge - www.tvgorge.com Moteur de recherche à l'appui, vous pouvez ...
Cliquez pour lire la suite de l'article par orion TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
VB.NET ET COMBOBOXVB.NET ET COMBOBOX par minouthebreaker
Cliquez pour lire la suite par minouthebreaker
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|