Recuperation de valeur d'une numericUpDown

Ursarkar2 Messages postés 13 Date d'inscription vendredi 15 juin 2012 Statut Membre Dernière intervention 5 juillet 2012 - 15 juin 2012 à 14:35
Ursarkar2 Messages postés 13 Date d'inscription vendredi 15 juin 2012 Statut Membre Dernière intervention 5 juillet 2012 - 16 juin 2012 à 22:18
Bonjour

Je me heurte a un soucis depuis quelque temps a cause du type de format déclaré. Je m'explique.

J'aimerais déclarer une prime (prix) avec mon numericUpDown. Je déclare donc ma variable pour le numericUpDown en "double" et la valeur qui s'enregistre sous sql serveur en décimal.
Comme ça, les valeurs entière que j'entre, s'enregistre sous SQL. Mais lorsque j'entre une valeur avec des chiffres après la virgule, j'ai un messages d'erreur :

" Error converting data type varchar to numeric"


J'ai testé en déclarant mon numericUpDown en décimal et j'ai le même message d'erreur.

Voici donc le code que j'utilise :
Je précise que le numericUpDown c'est le textboxprime.

Private Sub Ajout_Click(sender As System.Object, e As System.EventArgs) Handles Ajout.Click
TextBoxNum.Text = GenererClePrimaire("numero", "obtcontrat")
If (TextBoxEch.Text <> "") And (TextBoxpol.Text <> "") Then
Dim cli, cont As Integer
Dim num As Integer
Dim rev As Decimal = 0
Dim pr As Double
Dim toto As Integer
Dim ech, n As String
Dim sel As Integer = 0
Dim dat As DateTime
Dim daty As DateTime

cli = ComboBoxCli.SelectedValue
cont = ComboBoxContr.SelectedValue
pr = TextBoxprime.Value
ech = TextBoxEch.Text
num = CInt(TextBoxNum.Text)
n = RemplaceApostrophesSlash(TextBoxpol.Text)
dat = DateTime.ParseExact(CDate(DateTimeCal.Text), "dd/MM/yyyy", CultureInfo.CurrentCulture)
daty = DateTime.Now
Dim span As TimeSpan = daty.Subtract(dat)
toto = span.Days
If CheckBoxRev.Checked = True Then
rev = 1
ElseIf CheckBoxRev.Checked = False Then
rev = 0
End If

MaRequete = "Insert into ObtContrat Values ( " & cont & ", " & cli & ", " & num & ", '" & n & "','" & pr & "','" & rev & "', '" & ech & "', '" & dat & "', '" & sel & "')"
MaCommandeSpecialRequete.CommandText = MaRequete
MaCommandeSpecialRequete.ExecuteNonQuery()
MessageBox.Show("Couple Contrat/Client Ajouté...!", "Insertion", MessageBoxButtons.OK, MessageBoxIcon.Information)
RechargerlesDonnees()
Else
MessageBox.Show("Renseigner tout les champs SVP...!", "Alerte!", MessageBoxButtons.OK, MessageBoxIcon.Error)
End If
TextBoxpol.Text = ""
TextBoxEch.Text = ""
End Sub


Je sais que le code est un peu long et que tout n'est pas nécessaire pour mon problème particulier mais ainsi, je risque pas d'oublier de noter des info que vous pouvez avoir besoin.

Et sous SQL ma table c'est :

CREATE TABLE [dbo].[ObtContrat](
[IdCont] [int] NOT NULL,
[IdCli] [int] NOT NULL,
[numero] [int] NOT NULL,
[Police] [nvarchar](50) NOT NULL,
[Prime] [decimal](8, 2) NOT NULL,
[Reversion] [decimal](5, 2) NULL,
[Echeancier] [nvarchar](50) NOT NULL,
[Date_Effet] [varchar](50) NOT NULL,
[Selection] [int] NULL
) ON [PRIMARY]

J’espère que tout les info nécessaires y sont.

12 réponses

cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
15 juin 2012 à 17:06
tu as des ' en trop dans ta requette autour des valeurs qui sont numériques


[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
0
Ursarkar2 Messages postés 13 Date d'inscription vendredi 15 juin 2012 Statut Membre Dernière intervention 5 juillet 2012
16 juin 2012 à 12:14
Apres avoir retirer les ' en trop.
J'ai ce message d'erreur qui apparait lorsque je veux entrer un nombre decimal :

"Column name or number of supplied values does not match table definition"

Cependant, lorsque j'entre un nombre entier. Ca marche. C'est exactement au meme endroit que ca coince sauf que le message d'erreur est different.

J'ai testé ta solution en declarant par as decimal et as double au cas ou. Mais aucune difference.
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
16 juin 2012 à 13:05
Selon la structure de ta table, les valeurs correspondantes à cont, cli, num, pr, rev, sel sont numériques elles ne doivent donc pas être encadrées de ' dans la requete.
Au contraire, les valeurs correspondantes à n, ech, dat sont des types car, les valeurs doivent donc être encadrées de ' dans la requete.

Attention aux valeurs numériques décimales, lorsqu'elles sont transformées en texte pour être mise dans ta requete, le séparateur décimal utilisé est celui défini dans la culture courante (les paramètres régionaux, pour faire simple). Or dans une requete SQL les valeurs décimales doivent obligatoirement être passées avec le point comme séparateur décimal.

Met un point d’arrêt sur cette ligne
MaCommandeSpecialRequete.CommandText = MaRequete
et regarde le contenu de MaRequete pour la voir la requete qui sera réellement exécutée


[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
0
Ursarkar2 Messages postés 13 Date d'inscription vendredi 15 juin 2012 Statut Membre Dernière intervention 5 juillet 2012
16 juin 2012 à 15:54
Alors dans "MaRequete" il y a :

"Insert into ObtContrat Values (2,1,6,'poli',5,01,'1','ech','16/06/2012',0')"


Il y a donc bien ce que je lui demande d'entrer. Mais le message d'erreur persiste :

"Column name or number of supplied values does not match table definition"
0

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

Posez votre question
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
16 juin 2012 à 16:05
Moi je vois des choses qui ne me plaisent pas.
Tu as 9 champs dans ta table, tu passe 10 valeurs.

Dans le détail :

"Insert into ObtContrat Values (2,1,6,'poli',5,01,'1','ech','16/06/2012',0')"

- champ prime : 5,01 j'imagine! ça devrais être 5.01, c'est ce que j'expliquais sur le problème des valeurs numériques décimales
- champ reversion : '1' je suppose ! c'est un champ numérique donc pas de ', normalement
- et la dernière quote orpheline !


[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
0
Ursarkar2 Messages postés 13 Date d'inscription vendredi 15 juin 2012 Statut Membre Dernière intervention 5 juillet 2012
16 juin 2012 à 16:33
Je viens de retirer les cotes de pr, ech et sel qui etaient en trop alors.
Mais toujours aucune difference.

Donc tu penses qu'il faudrait que je convertisse le variable "pr" pour que la , soit un . pour la requete qu'il faudrait que je la reconvertisse apres la requete pour que ca puisse etre entrer dans la db ?
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
16 juin 2012 à 16:48
oui pour la requette le séparateur décimal doit obligatoirement être un point.

Il faut remplacer la virgule par un point. Il n'y a pas d'autre conversion à faire, je ne vois pas ce que tu veux faire en plus.


[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
0
Ursarkar2 Messages postés 13 Date d'inscription vendredi 15 juin 2012 Statut Membre Dernière intervention 5 juillet 2012
16 juin 2012 à 16:52
Bah si je remplace par un . j'ai peur que ma db refuse de l'enregistrer puisque "prime" est déclaré en décimal dedans.

(tu aurais un exemple de code pour convertir la , en . ?)
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
16 juin 2012 à 17:00
pr.ToString().Replace(",",".")


[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
0
Ursarkar2 Messages postés 13 Date d'inscription vendredi 15 juin 2012 Statut Membre Dernière intervention 5 juillet 2012
16 juin 2012 à 18:51
Ah, j'ai placé ton code juste avant la requête sql.
Pourtant la , de pr ne se remplace pas par un . donc toujours même soucis.
J'ai peut-être oublié de faire un truc
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
16 juin 2012 à 19:32
dans la requette !!!!

c'est sur que si tu continue à utiliser pr dans le requette ça va pas marcher. Tu met mon code dans la requette à la place de pr.

Mon code renvoie une chaine de caractère correctement modifiée, c'est elle qui doit être utiliser et non pas la variable pr, qui est numérique, et qui donc devra toujours être convertie en chaine


[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
0
Ursarkar2 Messages postés 13 Date d'inscription vendredi 15 juin 2012 Statut Membre Dernière intervention 5 juillet 2012
16 juin 2012 à 22:18
ah ah ah !
Quel idiot je dois faire.
Bon, je viens de mettre :

MaRequete = "Insert into ObtContrat Values ( " & cont & ", " & cli & ", " & num & ", '" & n & "'," & pr.ToString().Replace(",", ".") & "," & rev & ", '" & ech & "', '" & dat & "', " & sel & ")"


Et après avoir tester. C'est bon, ca fonctionne bien.
Merci a toi pour t’être pencher et investie sur mon problème. Et merci a toi pour les explications des ' et des conversions de signe. Vais être moins idiot en me couchant se soir
0
Rejoignez-nous