Problème de point-virgule

cs_piou62 Messages postés 40 Date d'inscription vendredi 4 avril 2008 Statut Membre Dernière intervention 12 septembre 2012 - 11 juin 2009 à 09:27
cs_piou62 Messages postés 40 Date d'inscription vendredi 4 avril 2008 Statut Membre Dernière intervention 12 septembre 2012 - 11 juin 2009 à 11:33
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

hellangel777 Messages postés 267 Date d'inscription jeudi 5 février 2009 Statut Membre Dernière intervention 26 novembre 2013 1
11 juin 2009 à 09:39
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
0
hellangel777 Messages postés 267 Date d'inscription jeudi 5 février 2009 Statut Membre Dernière intervention 26 novembre 2013 1
11 juin 2009 à 10:03
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
0
cs_piou62 Messages postés 40 Date d'inscription vendredi 4 avril 2008 Statut Membre Dernière intervention 12 septembre 2012
11 juin 2009 à 10:14
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
0
hellangel777 Messages postés 267 Date d'inscription jeudi 5 février 2009 Statut Membre Dernière intervention 26 novembre 2013 1
11 juin 2009 à 11:02
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>
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_piou62 Messages postés 40 Date d'inscription vendredi 4 avril 2008 Statut Membre Dernière intervention 12 septembre 2012
11 juin 2009 à 11:33
Re,


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