|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Mar 2008
Messaggi: 61
|
[Visual Basic] Errore di overflow
Ciao!!!
Ho sviluppato un'applicazione che permette di interagire con un database creato con access... Fin quando compilo il progetto da visual basic tutto a posto, funziona tutto, però quando creo l'installazione e la installo non funziona. Mi spiego meglio... Il mio programma prevede la possibilità di registrare il "cliente" che utilizza l'applicazione. Se l'utente salta la registrazione funziona tutto alla perfezione, se invece cerca di registrarsi si verifica questo errore. Dopo aver premuto il tasto per salvare i dati appare un errore di "overflow". Vi posto il codice sperando di risolvere il problema: Codice:
Imports System.Data.OleDb
Public Class Form1
Dim miaconnessione As OleDbConnection
Dim miocomando As OleDbCommand
Dim dr As OleDbDataReader
Dim bnd As BindingSource
Dim query As String
Dim data As String
Dim ok As Boolean
Dim NR As Integer
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
miaconnessione = New OleDbConnection
miocomando = New OleDbCommand
bnd = New BindingSource
ok = False
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
End
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
miaconnessione = New OleDbConnection("provider=microsoft.jet.oledb.4.0;data source=" & My.Computer.FileSystem.CurrentDirectory & "\Progetto.mdb; persist security info=false")
If TextBox7.Text = 1 Or TextBox7.Text = 3 Or TextBox7.Text = 5 Or TextBox7.Text = 7 Or TextBox7.Text = 8 Or TextBox7.Text = 10 Or TextBox7.Text = 12 Then
If TextBox6.Text > 0 And TextBox6.Text < 32 Then
ok = True
Else
MsgBox("La data inserita non è corretta", MsgBoxStyle.Information)
End If
End If
If TextBox7.Text = 4 Or TextBox7.Text = 6 Or TextBox7.Text = 9 Or TextBox7.Text = 11 Then
If TextBox6.Text > 0 And TextBox6.Text < 31 Then
ok = True
Else
MsgBox("La data inserita non è corretta", MsgBoxStyle.Information)
End If
End If
If TextBox7.Text = 2 Then
If TextBox6.Text > 0 And TextBox6.Text < 29 Then
ok = True
Else
MsgBox("La data inserita non è corretta", MsgBoxStyle.Information)
End If
End If
If ok = True Then
data = TextBox6.Text + "/" + TextBox7.Text + "/" + TextBox8.Text
If (TextBox1.Text = "") Or (TextBox2.Text = "") Or (TextBox3.Text = "") Or (TextBox4.Text = "") Or (TextBox5.Text = "") Or (TextBox6.Text = "") Then
MsgBox("Se premi avanti devi inserire i tuoi dati", MsgBoxStyle.Critical)
ElseIf IsNumeric(TextBox3.Text) = False Then
MsgBox("Il campo telefono deve essere numerico", MsgBoxStyle.Critical)
Else
miaconnessione.Open()
query = "INSERT INTO clienti (nome_cli, cognome_cli, tel_cli, citta, indirizzo, data_nasc) VALUES (""" + TextBox1.Text + """, """ + TextBox2.Text + """,""" + TextBox3.Text + """,""" + TextBox4.Text + """, """ + TextBox5.Text + """, """ + data + """)"
miocomando = New OleDbCommand(query, miaconnessione)
NR = miocomando.ExecuteNonQuery()
miaconnessione.Close()
Me.Hide()
Form2.Show()
End If
End If
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Me.Hide()
Form2.Show()
End Sub
Private Sub TextBox6_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox6.Click
TextBox6.Text = ""
End Sub
Private Sub TextBox7_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox7.Click
TextBox7.Text = ""
End Sub
Private Sub TextBox8_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox8.Click
TextBox8.Text = ""
End Sub
End Class
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Strano che funzioni tutto perfettamente in debug da Visual Studio, mentre poi vada in errore ( la registrazione cliente funziona in debug ? ).
In ogni caso se il problema si presenta solo all'inserimento del nuovo cliente, mi pare di poter concludere che il problema è tra queste righe : Codice:
miaconnessione.Open()
query = "INSERT INTO clienti (nome_cli, cognome_cli, tel_cli, citta, indirizzo, data_nasc) VALUES (""" + TextBox1.Text + """, """ + TextBox2.Text + """,""" + TextBox3.Text + """,""" + TextBox4.Text + """, """ + TextBox5.Text + """, """ + data + """)"
miocomando = New OleDbCommand(query, miaconnessione)
NR = miocomando.ExecuteNonQuery()
miaconnessione.Close()
Me.Hide()
Form2.Show()
Se vuoi usare quella strada, per i tipi testo meglio usare gli apici singoli : "'" + TextBox1.Text + "'" Per i tipi numerici non servono nè singoli, nè doppi apici. Per i tipi data, usare gli sharp : "#" + data + "#" Se poi dai retta ad un consiglio, fatti un favore, buttala e usa i Parameters. Esempio con una SELECT : http://www.hwupgrade.it/forum/showthread.php?t=1961867 [ mio post #10 ] |
|
|
|
|
|
#3 | |
|
Member
Iscritto dal: Mar 2008
Messaggi: 61
|
Quote:
L'inserimento tramite i parametri non l'ho mai fatto, ma ho provato a scriverlo guardando quello che hai scritto te, però non riesco Inoltre, mi hai suggerito di mettere il singolo apice al posto di quelli doppi, però mettendo quello singolo è come se commento il codice, perciò non posso... Poi, ho provato a mettere "#" + data + "#", però anche questo non va. Come mai? |
|
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
In ogni caso lascia stare, usa i Parameters. Esempio : Codice:
Dim strCN As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & percorso & "nomeDB.mdb" & ";Persist Security Info=False"
Dim CN As New OleDb.OleDbConnection(strCN)
CN.Open()
Dim strSql As String = "INSERT INTO nomeTabella(campo1, campo2, ..., campoN) VALUES(@campo1, @campo2, ..., @campoN)"
Dim CMD As New OleDb.OleDbCommand(strSql, CN)
'Creazione Parametri
CMD.Parameters.Add("@campo1", OleDb.OleDbType.<tipo>)
CMD.Parameters.Add("@campo2", OleDb.OleDbType.<tipo>)
'...
CMD.Parameters.Add("@campoN", OleDb.OleDbType.<tipo>)
'Assegnazione Parametri
CMD.Parameters("@campo1").Value = TextBox1.Text
CMD.Parameters("@campo2").Value = TextBox2.Text
'...
CMD.Parameters("@campoN").Value = TextBoxN.Text
CMD.ExecuteNonQuery()
CN.Close()
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 08:19.




















