IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Accès aux données Discussion :

[VB.Net] Pourquoi la modification/supression dans ma BD SQl server échoue ?


Sujet :

Accès aux données

  1. #1
    Invité
    Invité(e)
    Par défaut [VB.Net] Pourquoi la modification/supression dans ma BD SQl server échoue ?
    Salut a vous tous
    bon voila mon probleme
    j'ai une datagrid qui se remplie a partir d'une BD SQl server
    bon l'ajout ca marche super bien
    on vien a la supression alors voici mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    i = DG.CurrentRowIndex
            myds.Tables("per").Rows(i).Delete()
            mybuild = New SqlCommandBuilder(myada)
            myada.Update(myds, "per")
    sachant que mybuild et deja declarer en haut avec le dataset (myds)

    alors voici l'erreur que j'ai

    Une exception non gérée du type 'System.InvalidOperationException' s'est produite dans system.data.dll

    Informations supplémentaires : La génération SQL dynamique pour le DeleteCommand n'est pas prise en charge pour un SelectCommand qui ne retourne pas des informations de colonne clé.
    sachant que ma table ne contient que deux champ nom et prenom

    pour la modification c la meme chose
    Une exception non gérée du type 'System.InvalidOperationException' s'est produite dans system.data.dll

    Informations supplémentaires : La génération SQL dynamique pour le UpdateCommand n'est pas prise en charge pour un SelectCommand qui ne retourne pas des informations de colonne clé.
    voici le code de la modif
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    i = DG.CurrentRowIndex
            myrw = myds.Tables("per").Rows(i)
            myrw("nom") = nom.Text
            myrw("prenom") = prenom.Text
            mybuild = New SqlCommandBuilder(myada)
            myada.Update(myds, "per")
    si qlq un a une idee qu"il n'hesite pa a repondre
    merci d'avance
    Dernière modification par neguib ; 24/06/2006 à 16h11.

  2. #2
    Membre éprouvé Avatar de guitoux1
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Points : 1 256
    Points
    1 256
    Par défaut
    tout est dans le mesage d'erreur. TU ne peux utiliser les commans delete du sqldataadapter que si ta requete select retourne la clé primaire. Sinon il ne saura pas quel ligne supprimer de ta table.

  3. #3
    Invité
    Invité(e)
    Par défaut
    salut
    merci guitoux1 de ta reponse mai le probleme je l'ai vue c comme t'a dit mais je sais ma pa commant le resoudre
    si tu peut me mettre sur la route ca serai sympa
    merci

  4. #4
    Membre éprouvé Avatar de guitoux1
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Points : 1 256
    Points
    1 256
    Par défaut
    ben il faut que la requete SELECT que tu utilise pour remplir ton dataSet récupère la clé primaire de ta table + les données ton tu as besoin. De plus, pour que le DataAdapter génère automatiquement les requetes INSERT, UPDATE et DELETE, il ne faut pas que ta requete SELECT utilise des jointures entre plusieurs tables, ni des fonction de regroupement

  5. #5
    Invité
    Invité(e)
    Par défaut
    re
    merci guitoux1
    mais un truc moi quand je remplie la datagrid je la remplie avec une select normal et ma table n'a pa de cle primaire alors je sai pa commant lie ca avec ta reponse

  6. #6
    Membre éprouvé Avatar de guitoux1
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Points : 1 256
    Points
    1 256
    Par défaut
    ben si ta table n'a pas de clé primaire, comment tu fait pour supprimer un enregistrement unique ???

  7. #7
    Invité
    Invité(e)
    Par défaut
    ah oui t'a raison c vre
    apres quelque teste ca a marcher
    merci guitoux1

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2006
    Messages : 80
    Points : 57
    Points
    57
    Par défaut
    Coucou juste pour noter un petit MERCIIIIII
    car ça faisait 2 jours que je galérais sur la même erreur et après avoir ce post tout est rentré dans l'ordre
    Merci encore

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Bonjour mon problème à rapport avec le post donc voilà :

    Je suis en train de coder un prog de fin d'année où je base mon travail sur l'automatisation en "coupant la base de donnée le plus possible de mon programme.

    Donc j'ai pas le nom des tables que je doit ouvrir ainsi que leur différent attribut.

    voici mon problème :

    La génération SQL dynamique pour le UpdateCommand n'est pas prise en charge pour un SelectCommand qui ne retourne pas des informations de colonne clé.

    Et ma selectcommand correspondante est bien sûr :
    "select * from """ + Table_name + """"

    J'utilise oracle donc j'ai pu récupèrer facilement le nom des tables qui est la variable Table_name.

    J'aurai bien simplement utilisé le select décrivant tout les attributs.

    Mes questions sont :
    - select id,* from "table_name" me fait un doublon de colonne y aurait-il moyen de l'empêche.

    - sur le net tout le monde ou presque utilise le "select * from ..." et le commandBuilder et pas moi...

    le code du form load :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
    Private connection As OleDb.OleDbConnection
    Private adaptater As OleDb.OleDbDataAdapter
    Public tableSet As New DataSet
    Private tableNameSet As New DataSet
    Private adaptaterCollection As New Collection
    Public textOfSchearch As String
    Public attributeOfSchearch As String
    Public windowSchearch As recherche
     
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Dim strConn As String
     
            strConn = "Provider=OraOLEDB.Oracle.1;" & _
            "Data Source= 127.0.0.1;" & _
            "User Id= XXXXXX;" & _
            "Password = XXXXXX;"
     
            connection = New OleDb.OleDbConnection
            connection.ConnectionString = strConn
            connection.Open()
     
            adaptater = New OleDb.OleDbDataAdapter("SELECT table_name from user_tables", connection)
     
            adaptater.Fill(tableNameSet, "user_tables")
     
            Dim myRow As DataRow
     
            For Each myRow In tableNameSet.Tables("user_tables").Rows
                Dim Table_name As New String(myRow.Item("table_name"))
     
                Dim tempAdaptater As New OleDb.OleDbDataAdapter
     
                If Table_name = "DDE_client" Then
                    tempAdaptater.SelectCommand = New OleDb.OleDbCommand("select * from """ + Table_name + """", connection)
                    tempAdaptater.MissingSchemaAction = MissingSchemaAction.AddWithKey
                    Dim ObjetCommandBuilder = New OleDb.OleDbCommandBuilder(tempAdaptater)
                    ObjetCommandBuilder.QuotePrefix = """"
                    ObjetCommandBuilder.QuoteSuffix = """"
                Else
                    tempAdaptater.SelectCommand = New OleDb.OleDbCommand("select * from """ + Table_name + """", connection)
                End If
     
                adaptaterCollection.Add(tempAdaptater, Table_name)
                tempAdaptater.Fill(tableSet, Table_name)
     
     
                Dim MyTabPage As New TabPage(Table_name)
                Dim myDataGrid As New DataGrid
     
                myDataGrid.Width = 610
                myDataGrid.Height = 350
     
                TCAllTable.Controls.Add(MyTabPage)
                MyTabPage.Controls.Add(myDataGrid)
     
                myDataGrid.SetDataBinding(tableSet, Table_name)
            Next
     
        End Sub

  10. #10
    Membre à l'essai
    Inscrit en
    Mai 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 14
    Points : 17
    Points
    17
    Par défaut
    salut RalGrana !!
    premièrement tache de fermer ta connexion après chaque traitement de donnée, et le problème est résolue pour le updatecommad jcrois, bref est que ta ajouté une clé primaire dans ta table là où tu veux faire ta mise à jour ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. vb.net et insertion de donnée dans une base sql plus
    Par anissabosch dans le forum VB.NET
    Réponses: 4
    Dernier message: 18/10/2007, 19h39
  2. [SERVER] Pourquoi pas de make dans mac os x server 10.4.9
    Par Khaled.Noordin dans le forum Développement OS X
    Réponses: 2
    Dernier message: 29/05/2007, 16h55
  3. Réponses: 2
    Dernier message: 15/07/2006, 12h29
  4. [VB.Net] inserer un champs bytes dans une requete sql
    Par flyer_ dans le forum Windows Forms
    Réponses: 2
    Dernier message: 12/05/2006, 09h56
  5. Réponses: 5
    Dernier message: 10/05/2006, 15h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo