Probleme requete update sql server

Signaler
Messages postés
5
Date d'inscription
mardi 2 décembre 2008
Statut
Membre
Dernière intervention
2 janvier 2010
-
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
-
j essaie de faire un update ds ma table lecteur avec :
Dim dr As SqlClient.SqlDataReader = db.ExecuteSQLVersDataReader("select @@IDENTITY")
If (dr.Read) Then

x = CType(dr.GetDecimal(0), Integer)
End If
dr.Close()
MessageBox.Show("lecteur jouter")



If ((x < 100) Or (x > 10)) Then

y = "0000" + x
Dim sql11 As String = "UPDATE lecteur set identifiant='" + y + "' where idlec='" + x + "'"
db.ExecuteUpdate(sql11)

res.Text = "votre code est" + y

End If






l erruer c est :
/conversion from string "update lecteur set identifiant="'to type 'double' is not valid.

7 réponses

Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
36
salut,

comment tu arrives à copier un message d'erreur sans même le lire?

c'est quoi tes + qui sont là pour je ne sais quoi, pour concaténer :
&
string.format
string.concat

y'a le choix pourtant
non, tu utilises un y non typé
comme y va recevoir la chaine "0000" + x de type integer, il caste "0000" en double (puisque tu es en option strinct off) et y ajoute l'entier x

mais ensuite il est perdu quand il veut ajouter x à la chaine "update" vers une chaine
comme là c'est typé, message


tout çà parce que tu as enregistré les ID en chaine sur 6 caractères fixes?
beh à quoi sert le numérique AUTOINCREMENT alors....

bref

dim iID as integer
dim sID as string
Dim dr As SqlClient.SqlDataReader = db.ExecuteSQLVersDataReader("select @@IDENTITY")
If (dr.Read) Then
  iID = CType(dr.GetDecimal(0), Integer)
End If
dr.Close()

MessageBox.Show("lecteur Ajouté (ah bon....)")

'je te passe les tests réels de Où mettre le code dans les IF

sID = String.Format("{0:000000}", iID)
Dim sql11 As String "UPDATE lecteur SET identifiant '" + sID & "' WHERE idlec = " & iID.tostring & ";"
db.ExecuteUpdate(sql11) 

res.Text = "votre code est " + sID



enfin en plus de la syntaxe doit y avoir un beau paquet de choses à revoir, niveau base déjà (si elle contient et l'ID formaté et l'ID numérique...)

++
[hr]
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
37
Petite remarque au passage, ceci ne sert à rien :
If ((x < 100) Or (x > 10)) Then


C'est toujours vrai. Quelque soit la valeur de x, il sera toujours soit <100 soit >10. Ta condition sera donc toujours vrai et est donc inutile


[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
36
du coup j'ai oublié 2 +, c'est vite arrivé hein ^^
tous les 2 bien sûr à remplacer par &

et tu peux en profiter pour mettre en haut de tous tes fichiers de code :
option explicit on
option strict on

(ou directement dans les propriétés du projet)

++
Messages postés
5
Date d'inscription
mardi 2 décembre 2008
Statut
Membre
Dernière intervention
2 janvier 2010

merci les gars pour les remarques car je suis un debutant
c bon ca marche
mais j aimerais bien ke vs me dites si c logique et pour casy
If ((x < 100) Or (x > 10)) Then

c pour controler le champ identifiant ki doit juste recevoir 5 caractere

voici mon code


db.connexion()
Dim sql As String = "insert into lecteur(prenomlec,nomlec,adresselec,emaillec) values ('" & pr.Text & "','" & nm.Text & "','" & adr.Text & "','" & email.Text & "')"

Dim n As Integer = db.ExecuteUpdate(sql)
Dim dr As SqlClient.SqlDataReader = db.ExecuteSQLVersDataReader("select @@IDENTITY")
If (dr.Read) Then
'MessageBox.Show(dr.GetInt32(0).ToString)
x = CType(dr.GetDecimal(0), Integer)
End If
dr.Close()
MessageBox.Show("lecteur jouter")

pr.Text = ""
nm.Text = ""
adr.Text = ""
email.Text = ""

If (x < 10) Then
Dim z As String = CType(x, String)
y = "0000" + z
Dim sql11 As String = "UPDATE lecteur set identifiant='" & y & "' where idlec='" & x & "'"
db.ExecuteUpdate(sql11)

res.Text = "votre code est" + y

End If

If ((x < 100) Or (x > 10)) Then


Dim z As String = CType(x, String)
y = "000" + z
Dim sql11 As String = "UPDATE lecteur set identifiant='" & y & "' where idlec='" & x & "'"
db.ExecuteUpdate(sql11)

res.Text = "votre code est " + y

End If
If ((x < 1000) Or (x > 100)) Then
Dim z As String = CType(x, String)
y = "000" + z
Dim sql11 As String = "UPDATE lecteur set identifiant='" & y & "' where idlec='" & x & "'"
db.ExecuteUpdate(sql11)

res.Text = "votre code est " + y
End If
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
36
casy disait que le OR faisait que tout nombre validerait l'expression

30<100 => true
5<10 => true
180>10 => true

c'est AND qu'il faudrait

mais c'est inutile, cf string.FORMAT
mais comme tu n'as apparemment tenu compte d'aucun conseil...

bonne chance :)
Messages postés
5
Date d'inscription
mardi 2 décembre 2008
Statut
Membre
Dernière intervention
2 janvier 2010

slt PCPT je t ecoute j aimerai bien ke tu me donne des conseils c est que les precedents je l avait pas compris pour casy j ai compris ce qu il voulait dire grace a ta reponse
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
36
[quote=PCPT]&
string.format
string.concat /quote

[quote=PCPT]sID = String.Format("{0:000000}", iID)/quote

[quote=PCPT]enfin en plus de la syntaxe doit y avoir un beau paquet de choses à revoir, niveau base déjà (si elle contient et l'ID formaté et l'ID numérique...)/quote


c'était déjà fait, tu ne les appliques pas, pour ma part je ne vois pas quoi faire de plus