Problème de point-virgule

Signaler
Messages postés
40
Date d'inscription
vendredi 4 avril 2008
Statut
Membre
Dernière intervention
12 septembre 2012
-
Messages postés
40
Date d'inscription
vendredi 4 avril 2008
Statut
Membre
Dernière intervention
12 septembre 2012
-
Bonjour,


J'essaie d'insérer des donner dans une table access si et seulement si les données n'existent pas dans cette base.

J'ai essayé comme code :


               
SQL = "INSERT INTO " & ChoixHopital & " (" & colonne &
") VALUES (" & valeur & ") WHERE NO EXISTS (SELECT * FROM ["
& ChoixHopital & "] WHERE [N° Administratif local de séjour] =
'" & DataGridView1.Item(9, j).Value.ToString & "')"


et j'ai comme erreur : Point-virgule attendu en fin d'instruction SQL,
j'ai essayé de l'insérer partout mais ca ne fonctionne pas.

L'insertion sans le Where fonctionne mais je veux à tout prix qu'il n'insère pas de doublons.


Merci de m'aider

5 réponses

Messages postés
267
Date d'inscription
jeudi 5 février 2009
Statut
Membre
Dernière intervention
26 novembre 2013
1
Bonjour,
SQL "INSERT INTO " & ChoixHopital & " (" & colonne & ") VALUES (" & valeur & ") WHERE NO EXISTS (SELECT * FROM [" & ChoixHopital & "] WHERE [N° Administratif local de séjour] '" & DataGridView1.Item(9, j).Value.ToString & "';);"

ChoixHopital c'est ton nom de table pourquoi il est à l'extérieur de la requete ?
De plus a vu de nez comme ca ..
Le premier point virgule pour ta requete select
le deuxieme pour ta requete insert

Enfin pourquoi ne pas lancer une requete toute simple.
Une première requete de type
SELECT tacleprimaire FROM tatable WHERE tacondition
ensuite tu vérifie
Si ton recordset est vide alors 
   faire la requete d'insertion
sinon
   afficher un message
finSi

préfére faire une recherche sur un seul élément de ta table plutot que le *

HellAngel777
<hr />
Les machines ne font pas d'erreurs
Heureusement nous sommes humains
Messages postés
267
Date d'inscription
jeudi 5 février 2009
Statut
Membre
Dernière intervention
26 novembre 2013
1
Re:
Pardon j'ai fait une boulette. Tu n'as besoin que d'un seul point virgule et il se place après ta parenthèse.

HellAngel777
<hr />
Les machines ne font pas d'erreurs
Heureusement nous sommes humains
Messages postés
40
Date d'inscription
vendredi 4 avril 2008
Statut
Membre
Dernière intervention
12 septembre 2012

re


j'ai enlevé le ; avant la parenthèse et ca ne change rien toujours le même problème


je te donne tout le code ca vient peut être pas de là


 Try

            fichier = ChoixHopital & "Total.mdb"


            Dim Cmd As OleDbCommand

            Dim SQL As String

            Dim objCmd As New OleDbCommand

          


            Dim
Con = New OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0;data
source=C:\Logiciel Medlink\Archives" & ChoixHopital & ""
& fichier)

            Con.Open()


            Dim valeur As String

            Dim colonne As String

            Dim remplacement As String

            remplacement = ""


            For j As Integer = 0 To DataGridView1.Rows.Count - 2

                colonne = "[Id],"

                valeur = j & ","

               
For k As Integer = 1 To DataGridView1.Columns.Count - 1

                   
remplacement = Replace(DataGridView1.Item(k, j).Value.ToString, "'",
"@")

                   
colonne = colonne & "[" & DataGridView1.Columns(k).HeaderText
& "],"

                   
valeur = valeur & "'" & remplacement & "',"

                Next k

               
colonne = Mid$(colonne, 1, Len(colonne) - 1)

               
valeur = Mid$(valeur, 1, Len(valeur) - 1)


               
SQL = "INSERT INTO [" & ChoixHopital & "] (" & colonne
& ") VALUES (" & valeur & ") WHERE NO EXISTS (SELECT [N°
Administratif local de séjour] FROM [" & ChoixHopital & "] = '"
& DataGridView1.Item(9, j).Value.ToString & "');"

                Cmd = New OleDbCommand(SQL, Con)

                objCmd = New OleDbCommand(SQL, Con)

                objCmd.ExecuteNonQuery()

                Form2.ProgressBar1.Value = j


            Next j


            Con.Close()

     

        Catch ex As Exception

            MsgBox(ex.Message)

        End Try


    End Sub
Messages postés
267
Date d'inscription
jeudi 5 février 2009
Statut
Membre
Dernière intervention
26 novembre 2013
1
re:
SQL "INSERT INTO [" & ChoixHopital & "] (" & colonne & ") VALUES (" & valeur & ") WHERE NO EXISTS (SELECT [N° Administratif local de séjour] FROM [" & ChoixHopital & "] '" & DataGridView1.Item(9, j).Value.ToString & "');"

Je vais essayer de décortiquer ta requete...
ChoixHopital est le nom de ta table où tu dois inserer tes valeurs ??? C'est une variable d'apres ton code?
tu ne dois pas la mettre entre crochet !

extrait du msdn :
Example 3

<content xmlns="http://ddue.schemas.microsoft.com/authoring/2003/5">The following example inserts data from the OrdersArchive table from a SELECT statement performed on the Orders table.

  |

|
----
INSERT INTO OrdersArchive (order_id, order_date, ship_name)
SELECT order_id, order_date, ship_name FROM Orders
WHERE order_date > = (DATE()-30)

La syntaxe de ta requete m'a l'air fausse.

HellAngel777
<hr />
Les machines ne font pas d'erreurs
Heureusement nous sommes humains
</content>
Messages postés
40
Date d'inscription
vendredi 4 avril 2008
Statut
Membre
Dernière intervention
12 septembre 2012

Re,


Oui ChoixHopital est le nom de la table que je sélectionne en ouvrant le logiciel. ex: hopital XX