|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Mar 2019
Messaggi: 10
|
Visual Studio 2017 - Problema SELECT
Ciao a tutti,
sto realizzando un programmino in cui vorrei alimentare due tabelle. Nella prima ad ogni inserimento di un record in una Form si viene a creare un record. Nella seconda invece è necessario controllare l'esistenza di un preciso codice e poi o aggiornare il corrispondente record o altrimenti inserirne uno nuovo. Ho iniziato a lavorare al codice, non ricevo alcun errore di debug, ma al momento di eseguire il record non viene mai aggiunto nella tabella, ma il codice salta direttamente al "Catch ex As Exception". Vi riporto il codice di seguito. Qualcuno può aiutarmi? Grazie, Andrea Codice:
Imports System.Data.OleDb
Public Class Form4
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim connString As String
Dim ricerca As String
Dim drGiocatore As OleDbDataReader
Dim myConnection As OleDbConnection = New OleDbConnection
'Connessione e trasmissione dati a DB
connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source = " & Application.StartupPath & "\DBGiocatori.accdb"
myConnection.ConnectionString = connString
myConnection.Open()
Dim str As String
str = "INSERT INTO [Tbl_Partite]([Nome_Giocatore],[Cognome_Giocatore],[Anno_di_nascita],[Luogo_di_nascita],[Codice_giocatore],[Statura],[Coordinazione],[Voto_Coordinazione],[Velocità],[Voto_Velocità], [Resistenza],[Voto_Resistenza], [Forza],[Voto_Forza]VALUES(@NGio,@CGio,@AnnoNasc,@LuogoNasc,@CodGio, @Stat,@Coord,@VCoord,@Vel,@VVel,@Res,@VRes,@For,@VFor)"
ricerca = "SELECT [Codice_giocatore] FROM [Tbl_Giocatore] WHERE [Codice_giocatore] = @CodGio"
Dim cmd As OleDbCommand = New OleDbCommand(str, myConnection)
Dim objcomm As OleDbCommand = New OleDbCommand(ricerca, myConnection)
cmd.Parameters.Add(New OleDbParameter("@NGio", CType(TextBox4.Text, String)))
cmd.Parameters.Add(New OleDbParameter("@CGio", CType(TextBox5.Text, String)))
cmd.Parameters.Add(New OleDbParameter("@AnnoNasc", CType(TextBox6.Text, String)))
cmd.Parameters.Add(New OleDbParameter("@LuogoNasc", CType(TextBox7.Text, String)))
cmd.Parameters.Add(New OleDbParameter("@CodGio", CType(TextBox57.Text, String)))
cmd.Parameters.Add(New OleDbParameter("@Stat", CType(TextBox16.Text, String)))
cmd.Parameters.Add(New OleDbParameter("@Coord", CType(TextBox17.Text, String)))
cmd.Parameters.Add(New OleDbParameter("@VCoord", CType(TextBox53.Text, String)))
cmd.Parameters.Add(New OleDbParameter("@Vel", CType(TextBox19.Text, String)))
cmd.Parameters.Add(New OleDbParameter("@VVel", CType(TextBox55.Text, String)))
cmd.Parameters.Add(New OleDbParameter("@Res", CType(TextBox18.Text, String)))
cmd.Parameters.Add(New OleDbParameter("@VRes", CType(TextBox54.Text, String)))
cmd.Parameters.Add(New OleDbParameter("@For", CType(TextBox20.Text, String)))
cmd.Parameters.Add(New OleDbParameter("@VFor", CType(TextBox56.Text, String)))
Try
cmd.ExecuteNonQuery()
MsgBox(TextBox5.Text & " - correttamente salvato")
drGiocatore = objcomm.ExecuteReader()
drGiocatore.Read()
If drGiocatore.HasRows = True Then
MsgBox("Trovato")
ElseIf drGiocatore.HasRows = False Then
MsgBox("Non trovato")
End If
myConnection.Close()
TextBox16.Text = ""
TextBox17.Text = ""
TextBox18.Text = ""
TextBox19.Text = ""
TextBox20.Text = ""
TextBox4.Text = ""
TextBox5.Text = ""
TextBox53.Text = ""
TextBox54.Text = ""
TextBox55.Text = ""
TextBox56.Text = ""
TextBox57.Text = ""
TextBox6.Text = ""
TextBox7.Text = ""
Catch ex As Exception
Dim nuovoCod As String
nuovoCod = "INSERT INTO [Tbl_Partite]([Codice_Giocatore],[Nome_Giocatore],[Cognome_Giocatore]) VALUES (@CodGio,@NGio,@CGio)"
MsgBox("Nuovo record inserito nella tabella Giocatori")
End Try
Form3.Show()
Dim visible3 As Object = Form3.Visible
If visible3 Then
Me.Hide()
End If
End Sub
End Class
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Codice:
str = "INSERT INTO [Tbl_Partite]([Nome_Giocatore],[Cognome_Giocatore],[Anno_di_nascita],[Luogo_di_nascita],[Codice_giocatore],[Statura],[Coordinazione],[Voto_Coordinazione],[Velocità],[Voto_Velocità], [Resistenza],[Voto_Resistenza], [Forza],[Voto_Forza]VALUES(@NGio,@CGio,@AnnoNasc,@LuogoNasc,@CodGio, @Stat,@Coord,@VCoord,@Vel,@VVel,@Res,@VRes,@For,@VFor)"
__________________
In God we trust; all others bring data |
|
|
|
|
|
#3 |
|
Junior Member
Iscritto dal: Mar 2019
Messaggi: 10
|
Grazie mille sottovento.
Quel problema è un problema di copiatura del codice, in realtà su Visual Studio quel controllo funziona benissimo e il programma inserisce il nuovo record in quella tabella. Il mio problema è la verifica se il parametro @CodGio esista già nell'altra tabella e nel caso esiste si faccia l'update dei valori, mentre nel caso non esiste il programma lo inserisca. Probabilmente sbaglio la sequenza degli eventi. Potete aiutarmi? Grazie, A. |
|
|
|
|
|
#4 |
|
Junior Member
Iscritto dal: Dec 2017
Messaggi: 1
|
Provando ad eseguire il codice, l'eccezione recita "Nessun valore specificato per alcuni parametri necessari".
Infatti controllando il codice, per il comando objcomm, che fa capo alla select "ricerca", non viene aggiunto il parametro. Basta fare Codice:
objcomm.Parameters.Add(New OleDbParameter("@CodGio", CType(TextBox57.Text, String)))
|
|
|
|
|
|
#5 |
|
Junior Member
Iscritto dal: Mar 2019
Messaggi: 10
|
Grazie mille CopyL3ft!
Funziona con le modifiche che riporto di seguito. Ho però il seguente problema ora: eseguendo in debug il codice ogni volta mi va a sovrascrivere sia il record sulla tabella Partite che sulla tabella Giocatori. Il programma è composto di una Form di inserimento dati (Form 3) e, al seguito della pressione sul tasto "Salva" di una Form (la 4) in cui viene eseguito proprio il codice sotto dopo che i dati sono stati copiati dalla Form 3. Preciso che non posso salvare direttamente dalla Form 3 perchè in questa importo i dati da file excel e i comandi Codice:
Imports System.Data.OleDb Codice:
Imports Microsoft.Office.Interop Sapete dirmi come mai questo comportamento? E' normale dato che sono in modalità Debug? Grazie, A. Codice:
Imports System.Data.OleDb
Public Class Form4
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim connString As String
Dim ricerca As String
Dim drGiocatore As OleDbDataReader
Dim myConnection As OleDbConnection = New OleDbConnection
'Connessione e trasmissione dati a DB
connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source = " & Application.StartupPath & "\DBGiocatori.accdb"
myConnection.ConnectionString = connString
myConnection.Open()
Dim str As String
str = "INSERT INTO [Tbl_Partite]([Nome_Giocatore],[Cognome_Giocatore],[Anno_di_nascita],[Luogo_di_nascita],[Codice_giocatore],[Statura],[Coordinazione],[Voto_Coordinazione],[Velocità],[Voto_Velocità], [Resistenza],[Voto_Resistenza], [Forza],[Voto_Forza]VALUES(@NGio,@CGio,@AnnoNasc,@LuogoNasc,@CodGio, @Stat,@Coord,@VCoord,@Vel,@VVel,@Res,@VRes,@For,@VFor)"
ricerca = "SELECT [Codice_giocatore] FROM [Tbl_Giocatore] WHERE [Codice_giocatore] = @CodGio"
Dim cmd As OleDbCommand = New OleDbCommand(str, myConnection)
Dim objcomm As OleDbCommand = New OleDbCommand(ricerca, myConnection)
cmd.Parameters.Add(New OleDbParameter("@NGio", CType(TextBox4.Text, String)))
cmd.Parameters.Add(New OleDbParameter("@CGio", CType(TextBox5.Text, String)))
cmd.Parameters.Add(New OleDbParameter("@AnnoNasc", CType(TextBox6.Text, String)))
cmd.Parameters.Add(New OleDbParameter("@LuogoNasc", CType(TextBox7.Text, String)))
cmd.Parameters.Add(New OleDbParameter("@CodGio", CType(TextBox57.Text, String)))
cmd.Parameters.Add(New OleDbParameter("@Stat", CType(TextBox16.Text, String)))
cmd.Parameters.Add(New OleDbParameter("@Coord", CType(TextBox17.Text, String)))
cmd.Parameters.Add(New OleDbParameter("@VCoord", CType(TextBox53.Text, String)))
cmd.Parameters.Add(New OleDbParameter("@Vel", CType(TextBox19.Text, String)))
cmd.Parameters.Add(New OleDbParameter("@VVel", CType(TextBox55.Text, String)))
cmd.Parameters.Add(New OleDbParameter("@Res", CType(TextBox18.Text, String)))
cmd.Parameters.Add(New OleDbParameter("@VRes", CType(TextBox54.Text, String)))
cmd.Parameters.Add(New OleDbParameter("@For", CType(TextBox20.Text, String)))
cmd.Parameters.Add(New OleDbParameter("@VFor", CType(TextBox56.Text, String)))
objcomm.Parameters.Add(New OleDbParameter("@CodGio", CType(TextBox57.Text, String)))
Try
cmd.ExecuteNonQuery()
MsgBox(TextBox5.Text & " - correttamente salvato")
drGiocatore = objcomm.ExecuteReader()
drGiocatore.Read()
If drGiocatore.HasRows = True Then
MsgBox("Trovato")
ElseIf drGiocatore.HasRows = False Then
nuovoCod = "INSERT INTO [Tbl_Giocatore]([Codice_Giocatore],[Nome_Giocatore],[Cognome_Giocatore]) VALUES (@CodGio,@NGio,@CGio)"
Dim inscod As OleDbCommand = New OleDbCommand(nuovoCod, myConnection)
inscod.Parameters.Add(New OleDbParameter("@CodGio", CType(TextBox57.Text, String)))
inscod.Parameters.Add(New OleDbParameter("@NGio", CType(TextBox4.Text, String)))
inscod.Parameters.Add(New OleDbParameter("@CGio", CType(TextBox5.Text, String)))
inscod.ExecuteNonQuery()
MsgBox("Nuovo record inserito nella tabella Giocatori")
End If
myConnection.Close()
TextBox16.Text = ""
TextBox17.Text = ""
TextBox18.Text = ""
TextBox19.Text = ""
TextBox20.Text = ""
TextBox4.Text = ""
TextBox5.Text = ""
TextBox53.Text = ""
TextBox54.Text = ""
TextBox55.Text = ""
TextBox56.Text = ""
TextBox57.Text = ""
TextBox6.Text = ""
TextBox7.Text = ""
Catch ex As Exception
MessageBox.Show(ex.Message + " " & Environment.NewLine & " " & ex.StackTrace)
End Try
Form3.Show()
Dim visible3 As Object = Form3.Visible
If visible3 Then
Me.Hide()
End If
End Sub
End Class
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 15:19.


















