Ursarkar2
Messages postés13Date d'inscriptionvendredi 15 juin 2012StatutMembreDernière intervention 5 juillet 2012
-
15 juin 2012 à 14:35
Ursarkar2
Messages postés13Date d'inscriptionvendredi 15 juin 2012StatutMembreDerniè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]
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 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
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 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
Ursarkar2
Messages postés13Date d'inscriptionvendredi 15 juin 2012StatutMembreDerniè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 ?
Ursarkar2
Messages postés13Date d'inscriptionvendredi 15 juin 2012StatutMembreDerniè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
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 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
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