Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Ajouter un enregistrement [ Base de données / Access ] (patdan)

mercredi 26 décembre 2007 à 16:46:49 | Ajouter un enregistrement

patdan

Bonjour,

je débute en Visual studio 2005, langage VB Net et travaille avec une BDD Access 2002
J'ai cherché partout et je ne m'en sors tjrs pas
Voici une partie du code :

    Sub Proprio(ByVal Choix)

        If Choix = "Ajout"Then

            strSql = "SELECT count(*) as Resul FROM ASLProprio WHERE ProprioDatDep IS NULL AND ProprioNumLot = '" & TxtPNLot.Text & "'"

            ObjetCommand = New OleDbCommand(strSql)

            ObjetDataAdapter = New OleDbDataAdapter(ObjetCommand)

            ObjetCommand.Connection() = ObjetConnection

            ObjetDataSet.Clear()

          ObjetDataAdapter.Fill(ObjetDataSet, "ASLProprio") ==>Aucune valeur donnée pour un ou plusieurs des paramètres requis.

            ObjetDataTable = ObjetDataSet.Tables("ASLProprio")

             'Existe dans la base et tjrs présent ==> ne pas ajouter

            If ObjetDataTable.Rows.Count > 0 Then

                MsgBox("Proprio non parti")

                Exit Sub

            End If

            'else ajouter : OK n'existe pas dans la base

            ObjetDataRow = ObjetDataSet.Tables("ASLProprio").NewRow()

            ChargerChamps()

            ObjetDataSet.Tables("ASLProprio").Rows.Add(ObjetDataRow)

            'Pour modifier les valeurs changées dans le DataAdapter

            ObjetCommandBuilder = New OleDbCommandBuilder(ObjetDataAdapter)

            'MAJ

            ObjetDataAdapter.Update(ObjetDataSet, "ASLProprio")

            'On vide le DataSet et on le 'recharge' de nouveau.

            ObjetDataSet.Clear()

            ObjetDataAdapter.Fill(ObjetDataSet, "ASLProprio")

            ObjetDataTable = ObjetDataSet.Tables("ASLProprio")

        Else 'Modifier

            ' Extraire l'enregistrement courant

            ObjetDataRow = ObjetDataSet.Tables("ASLProprio").Rows(0)

             'Modifier les valeurs des champs en  récupérant le contenu des TextBox

            ChargerChamps()

            'Pour modifier les valeurs changées dans le DataAdapter

            ObjetCommandBuilder = New OleDbCommandBuilder(ObjetDataAdapter)

             'MAJ

            ObjetDataAdapter.Update(ObjetDataSet, "ASLProprio")

 

            'On vide le DataSet et on le 'recharge' de nouveau.

            ObjetDataSet.Clear()

            ObjetDataAdapter.Fill(ObjetDataSet, "ASLProprio")

            ObjetDataTable = ObjetDataSet.Tables("ASLProprio")

            Dim Rang AsInteger

            Rang = LBProprio.SelectedIndex

            LBProprio.Items.RemoveAt(LBProprio.SelectedIndex)

            LBProprio.Items.Insert(Rang, TxtPNom.Text)

            ASLMain.Choix = ""

            LBProprio.Refresh()

        End If         

        Sub ChargerChamps()

           ObjetDataRow( "ProprioNumLot" ) = TxtPNLot.Text

           ObjetDataRow( "ProprioNom" ) = TxtPNom.Text

           ObjetDataRow( "ProprioPrenom" ) = TxtPPrenom.Text

           ObjetDataRow( "ProprioDatArrive" ) = MtbDatArriv.Text

           ObjetDataRow( "ProprioTelAsl" ) = TxtPTelAsl.Text

           ObjetDataRow( "ProprioTelMobile1" ) = TxtPTelMobile1.Text

           ObjetDataRow( "ProprioTelMobile2" ) = TxtPTelMobile2.Text

           ObjetDataRow( "ProprioTelAutre" ) = TxtPTelAutre.Text

           ObjetDataRow( "ProprioAutreAdrRue" ) = TxtPAutreAdrRue.Text

           ObjetDataRow( "ProprioAutreAdrCP" ) = TxtPAutreAdrCP.Text

           ObjetDataRow( "ProprioAutreAdrVille" ) = TxtPAutreAdrVille.Text

        End Sub


    End Sub

*********************
L'erreur ci-dessus apparaît. Je crois que j'avais réussi à la faire disparaître (mais je ne sais plus comment),
Pourtant j'ai vu des exemples et j'ai l'impression que mon code est identique ??? !!!

En fait, j'ai aussi un autre formulaire avec un ajout d'enregistrement, mais sur une table vide, je galère aussi (le champ n'existe pas ds la table ) : c'est clair , mais il EXISTE!!

Merci d'avance aux courageux qui me sortiront de là!!

patdan


mercredi 26 décembre 2007 à 18:24:30 | Re : Ajouter un enregistrement

PatriceVB

Administrateur CodeS-SourceS
Bon ça fait 50 ans que j'ai pas fait d'Access mais si je me souvients bien le passage de paramètres se fait de la manière suivante :

Dim myconnection AsNew OleDbConnection("connectionstring")

Dim cmdGetProprios AsNew OleDbCommand()

cmdGetProprios.CommandText =

"select count(*) from ASLProprio where ProprioDatDep is null and ProprioNumLot=?"

cmdGetProprios.Parameters.Add(

"NumLot", TxtPNLot.Text)

cmdGetProprios.CommandType = CommandType.Text

cmdGetProprios.Connection = myconnection

Dim myAD AsNew OleDbDataAdapter(cmdGetProprios)

Dim myDS AsNew DataSet

myAD.Fill(myDS)



++

Patrice
[ Lien ]

mercredi 26 décembre 2007 à 19:19:41 | Re : Ajouter un enregistrement

patdan

Merci de m'avoir répondu.
En fait, j'ai supprimé les lignes :

            ObjetDataAdapter.Fill(ObjetDataSet, "ASLProprio") ==>Aucune valeur donnée pour un ou plusieurs des paramètres requis.
            ObjetDataTable = ObjetDataSet.Tables("ASLProprio")

et je passe  maintenant directement sur :
'else ajouter : OK n'existe pas dans la base

et  lorsque la sub ChargerChamps s'éxécute :

La colonne 'ProprioNumLot' n'appartient pas à la table ASLProprio

or ce champ APPARTIENT pourtant à la table ASLProprio et est orthographié de la même manière

Il doit manquer qque chose mais quoi et où??

Merci à tous

patdan

jeudi 27 décembre 2007 à 12:36:51 | Re : Ajouter un enregistrement

djerbino

"La colonne 'ProprioNumLot' n'appartient pas à la table ASLProprio"=>hé bien c'est clair
verifie l'ortographe du champ
'ProprioNumLot' dans ta base de données
si il le faut fai une copier coller de access vers ton code
bonne chance


jeudi 27 décembre 2007 à 13:57:53 | Re : Ajouter un enregistrement

patdan

Salut,
Bien sûr que cela paraît clair , donc cela a été mon premier contrôle. Mais je persiste et signe :

ProprioNumLot APPARTIENT à la table ASLProprio et est orthographié de la même manière

Donc qque chose est mal programmé et provoque cette erreur , mais QUOI
That is the QUESTION ???
Et comme je démarre dans ce gros bazar où l'on passe son temps à réécrire sans cesse la même chose, je suis paumée noyée....A moins que l'on puisse faire + simple mais j'ai parcouru des tas de sites depuis des jours et je sature..
Peut-être aurais-je dû choisir un autre langage??? mais pour ce proj il est trop tard!!
 
Merci encore d'essayer de me sortir de là car "je n"ai plus 20 ans hélas..."

PS Je viens de retester, mais à force d'essayer des modifs, je plane : j'ai de nouveau le message du 1er post




patdan

jeudi 27 décembre 2007 à 14:54:15 | Re : Ajouter un enregistrement

djerbino

voici un code qui fonctionne correctement
sa devrai surement t'aider
il reste a modifier le nom de la base ,les tables et les champ

Imports

System

Imports

System.Data

Imports

System.Data.OleDb

Imports

Microsoft.VisualBasic

Public

Class Form2

'Déclaration de la variable pour la connection

Private cnx As OleDbConnection

'Déclaration de la variable pour la commande

Private cmd As OleDbCommand

'Déclaration de la variable pour le dataadapter

Private dta As OleDbDataAdapter

'Déclaration de la variable pour le dataset

Private dts As DataSet

'Déclaration de la variable pour la requête

Private sql AsString

'Déclaration de la variable pour la datatable

Private dtt As DataTable

'Déclaration de la variable pour le datarow

Private dtr As DataRow

'Déclaration de la variable pour le Nº de l'enregistrement

Private rownum AsInteger

'Déclaration de la variable pour la connectionstring

Private cnxstr AsString

'Déclaration de la variable pour le commandbuilder

Private cmdb As OleDbCommandBuilder

 

PrivateSub Form2_Load(ByVal sender AsObject, ByVal e As System.EventArgs) HandlesMe.Load

'ouverture de la connection(à partir du répertoire de l'application)sur la même ligne

cnxstr =

"provider = microsoft.jet.oledb.4.0 ; data source = " & Application.StartupPath & "\base.mdb;"

cnx =

New OleDbConnection

dts =

New DataSet

cnx.ConnectionString = cnxstr

cnx.Open()

'Création de la requête sql

sql =

"select table.* from table"

 

'Création de la commande et on l'instancie (sql)

cmd =

New OleDbCommand(sql)

'Création du dataadapter (dta) et on l'instancie (cmd)

dta =

New OleDbDataAdapter(cmd)

'On instancie la commande (cmd) à la connection (cnx)

cmd.Connection() = cnx

'On charge le dataset (dts) grace à la propriété fill du dataadapter (dta)

dta.Fill(dts,

"table")

'On charge la datatable (dtt) grace à la propriété tables du dataset (dts)

dtt = dts.Tables(

"table")

 

EndSub

 

 

PrivateSub enregistrer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles enregistrer.Click

 

 

'crátion d'une nouvelle ligne avec les données des textbox

dtr = dts.Tables(

"table").NewRow

 

dtr(

"champ1") = Me.texbox1.Text

dtr(

"champ2") = Me.textbox2.Text

'ajout de la ligne dans le DataSet

dts.Tables(

"table").Rows.Add(dtr)

'création et exécution du commandbuilder pour mettre à jour le DataAdapter

cmdb =

New OleDbCommandBuilder(dta)

'mise à jour des données du dataadapter(dta)à partir du commandbuilder (cmdb)

dta.Update(dts,

"table")

'on vide le dataset pour le recréer avec les nouvelles données

dts.Clear()

dta.Fill(dts,

"table")

dtt = dts.Tables(

"table")

EndSub

End

Class

jeudi 27 décembre 2007 à 14:56:52 | Re : Ajouter un enregistrement

djerbino


les retours en ligne sont inexplicables
rq: tu doit mettre ta base de donné dans le dossier debug de ton application   









Imports

System

Imports

System.Data

Imports

System.Data.OleDb

Imports

Microsoft.VisualBasic

Public

Class Form2

'Déclaration de la variable pour la connection

Private cnx As OleDbConnection

'Déclaration de la variable pour la commande

Private cmd As OleDbCommand

'Déclaration de la variable pour le dataadapter

Private dta As OleDbDataAdapter

'Déclaration de la variable pour le dataset

Private dts As DataSet

'Déclaration de la variable pour la requête

Private sql As String

'Déclaration de la variable pour la datatable

Private dtt As DataTable

'Déclaration de la variable pour le datarow

Private dtr As DataRow

'Déclaration de la variable pour le Nº de l'enregistrement

Private rownum As Integer

'Déclaration de la variable pour la connectionstring

Private cnxstr As String

'Déclaration de la variable pour le commandbuilder

Private cmdb As OleDbCommandBuilder

 

Private Sub Form2_Load( ByVal sender As Object , ByVal e As System.EventArgs) Handles Me .Load

'ouverture de la connection(à partir du répertoire de l'application)sur la même ligne

cnxstr =

"provider = microsoft.jet.oledb.4.0 ; data source = " & Application.StartupPath & "\base.mdb;"

cnx =

New OleDbConnection

dts =

New DataSet

cnx.ConnectionString = cnxstr

cnx.Open()

'Création de la requête sql

sql =

"select table.* from table"

 

'Création de la commande et on l'instancie (sql)

cmd =

New OleDbCommand(sql)

'Création du dataadapter (dta) et on l'instancie (cmd)

dta =

New OleDbDataAdapter(cmd)

'On instancie la commande (cmd) à la connection (cnx)

cmd.Connection() = cnx

'On charge le dataset (dts) grace à la propriété fill du dataadapter (dta)

dta.Fill(dts,

"table" )

'On charge la datatable (dtt) grace à la propriété tables du dataset (dts)

dtt = dts.Tables(

"table" )

 

End Sub

 

 

Private Sub enregistrer_Click( ByVal sender As System.Object, ByVal e As System.EventArgs) Handles enregistrer.Click

 

 

'crátion d'une nouvelle ligne avec les données des textbox

dtr = dts.Tables(

"table" ).NewRow

 

dtr(

"champ1" ) = Me .texbox1.Text

dtr(

"champ2" ) = Me .textbox2.Text

'ajout de la ligne dans le DataSet

dts.Tables(

"table" ).Rows.Add(dtr)

'création et exécution du commandbuilder pour mettre à jour le DataAdapter

cmdb =

New OleDbCommandBuilder(dta)

'mise à jour des données du dataadapter(dta)à partir du commandbuilder (cmdb)

dta.Update(dts,

"table" )

'on vide le dataset pour le recréer avec les nouvelles données

dts.Clear()

dta.Fill(dts,

"table" )

dtt = dts.Tables(

"table" )

End Sub

End

Class

jeudi 27 décembre 2007 à 17:52:54 | Re : Ajouter un enregistrement

patdan

Merci

Mais hélas mon code correspond à cela : j'ai bien contrôlé
La seule erreur qui me reste maintenant est :
La colonne 'ProprioNumLot' n'appartient pas à la table ASLProprio

Ce champ est le 1er que je charge, mais pr les autres c'est pareil

Sub ChargerChamps()
ObjetDataRow(
"ProprioNumLot") = TxtPNLot.Text
ObjetDataRow(
"ProprioNom") = TxtPNom.Text
ObjetDataRow(
"ProprioPrenom") = TxtPPrenom.Text
ObjetDataRow(
"ProprioDatArrive") = MtbDatArriv.Text
ObjetDataRow(
"ProprioTelAsl") = TxtPTelAsl.Text
ObjetDataRow(
"ProprioTelMobile1") = TxtPTelMobile1.Text
ObjetDataRow(
"ProprioTelMobile2") = TxtPTelMobile2.Text
ObjetDataRow(
"ProprioTelAutre") = TxtPTelAutre.Text*
ObjetDataRow(
"ProprioAutreAdrRue") = TxtPAutreAdrRue.Text
ObjetDataRow(
"ProprioAutreAdrCP") = TxtPAutreAdrCP.Text
ObjetDataRow(
"ProprioAutreAdrVille") = TxtPAutreAdrVille.Text
EndSub

ChargerChamps est appelé dans ma sub d'ajout :

ObjetDataRow = ObjetDataSet.Tables(

"ASLProprio").NewRow
ChargerChamps()
ObjetDataSet.Tables(
"ASLProprio").Rows.Add(ObjetDataRow)
'Pour modifier les valeurs changées dans le DataAdapter
ObjetCommandBuilder = New OleDbCommandBuilder(ObjetDataAdapter)
'MAJ
ObjetDataAdapter.Update(ObjetDataSet, "ASLProprio")
'On vide le DataSet et on le 'recharge' de nouveau.
ObjetDataSet.Clear()
ObjetDataAdapter.Fill(ObjetDataSet,
"ASLProprio")
ObjetDataTable = ObjetDataSet.Tables(
"ASLProprio")

Donc, je galère tjrs. Il doit manquer peut_être qque chose comme un lien...Allez donc savoir, surtout que dans la même SUB, j'ai la modif qui elle fonctionne

If Ajout.......
else
Modif..... OK



patdan

jeudi 27 décembre 2007 à 18:18:48 | Re : Ajouter un enregistrement

djerbino

bon change ProprioNumLot en une clé primaire et met la auto-increment et efface la ligne si elle doit pas etre forcement saisie
sinon sa doit aller la ton code est correct sauf verifie encore une foi le syntaxe de la table ProprioNumLot dans ta db


jeudi 27 décembre 2007 à 18:50:24 | Re : Ajouter un enregistrement

patdan

Merci djerbino de suivre mon pb, mais hélas ce champ est obligatoire et son nom est bon.
Par sécurité, je l'ai même retapé. De toute façon les autres champs ne sont pas reconnus non plus

Donc il manque qque chose qque part pour que ces champs soient reconnus MAIS ?????
 ........si je savais quoi , je ne serai pas là

Merci je cherche tjrs de mon côté

A bientôt une réponse j'espère

patdan


1 2

Cette discussion est classé dans : text, objetdataset, objetdataadapter, objetdatarow, aslproprio


Répondre à ce message

Sujets en rapport avec ce message

Problème de mise à jour d'un table d'un dataset [ par lordko ] Voilà je lis une table d'une base de données sans aucun soucis, mais lorsque je veux ajouter un utilisateur dans cette table j'ai le message d'erreur Erreur "INSERT INTO" Vb.2005+Access [ par sadok_sa ] J'ais une Base de données qui contienne un tableau "GestionUtilisateur", et je veut ajouter d'autres en clickant sur la bouton "Ajouter", Mais, Une er vb2005 : problème base de données [ par andeo_Modigliani ] j'utilise ce code pour ajouter des données a partir de vb 2005 vers une base de données Acces, apres avoir importés les namespaces necessaires. Priv Un seul champs modifié ... [ par marmo31 ] Bonjour,Je continue la découverte de VB  mais je vous embête pour la seconde fois  Je tiens à préciser que j'ai fais une recherche sur le forum et je [vb.net] Modifier un enregistrement dans un dataGrid [ par mik67 ] Bonjour à tous,Je développe en vb.net dans le cadre de mon stageJe liste des clients dans un datagrid de ma Form4. Pour ajouter des enregistrements da Je suis trop nul, j'arrive même pas à enregistrer dans une base de données Access ce que rentre dans un Textbox... [ par swordjet19 ] Bonjour à tous Voilà je suis nouveau en prog VB. Et je developpe un tout petit prog (rien à voir avec les votres lol), en fait c'est juste, entrer un Remplir des Textbox par les champs du BDD Access aprés séléction dans une combobox [ par Dalool ] Bonjour à tous,voilà j'ai un soucis avec une combobox lié à une base de donnée.Donc j'ai une connection ADO à la table sur le onload de ma fenetre. Ma empecher l'utilisateur de saisir que des chiffres dans un text box [ par amylee1984 ] bonjour, je develope sous vb.net 2003 ,je veux savoir comment empécher un utilisateur de saisir que des chiffres dans un text box , vous pouvez m'aide ado.net (acceptchanges) [ par __salwa ] bonjour tt le monde:bon jé une application en vb.net qui a pr but d'acceder a une base de donner accesstout marche bien sauf la mise a jour quand je f client ftp avec winsock : pb pour rapatrier des .zip ! [ par floxone ] Salut,Je suis en train d'essayer d'apprendre l'usage de .net avec les différents tuto que je trouve. Pour l'heure, j'essaye de faire un petit client f


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode