|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Feb 2011
Messaggi: 24
|
[VB] Query con variabile
Salve,
con Visual Studio sto creando una semplice applicazione ma ho un problema con una query. Ho creato questo con il "Generatore di query" : Codice:
SELECT ID, [data inizio_fase], fase, periodo_durata, [output], verifichea, verificheb, verifichec, fine_fase, esecutore, fr_id FROM sviluppo WHERE (fr_id = 2) Codice:
Module Module1
Public key As Integer
End Module
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jan 2007
Messaggi: 404
|
Ciao presumo che sia VB.NET con DB access se mi sbaglio correggimi..la prossima volta specifica il linguaggio e il db che usi comunque da vb.net puoi eseguire la query così:
Codice:
Dim sql as string sql="SELECT ID, [data inizio_fase], fase, periodo_durata, [output],verifichea, verificheb, verifichec, fine_fase, esecutore, fr_id " & _ "FROM sviluppo " & _ "WHERE fr_id = " & key |
|
|
|
|
|
#3 | |
|
Junior Member
Iscritto dal: Feb 2011
Messaggi: 24
|
Quote:
P.S. Hai ragione, è VB.NET con DB Access. |
|
|
|
|
|
|
#4 |
|
Junior Member
Iscritto dal: Feb 2011
Messaggi: 24
|
Mettendo un punto di interruzione ho visto che la query è corretta ma senza il generatore di query non so come popolare le textbox.
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Jan 2007
Messaggi: 404
|
|
|
|
|
|
|
#6 |
|
Junior Member
Iscritto dal: Feb 2011
Messaggi: 24
|
C è poco codice visto che ho fatto la connessione al database access tramite il Wizard di Visual Studio.
Questo è il form ![]() Voglio popolare le textbox alla pressione del tasto in alto "Query" |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Jan 2007
Messaggi: 404
|
non ho mai utilizzato il wizard di visual studio di solito faccio tutto da codice in questo modo:
Codice:
Module Module1
'Percorso del DataBase
Dim PercorsoDB As String = "dati.mdb"
'Stringa di Connessione
Dim ConnString As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & PercorsoDB
'Connessione alla stringa
Dim Cn As New OleDbConnection(ConnString)
End Module
Codice:
dim sql as string
sql="SELECT ID, [data inizio_fase], fase, periodo_durata, [output],verifichea, verificheb, verifichec, fine_fase, esecutore, fr_id " & _
"FROM sviluppo " & _
"WHERE fr_id = " & key
Cn.Open()
Dim cmd As New OleDbCommand(sql, Cn)
Dim dr As OleDbDataReader = cmd.ExecuteReader
dr.Read()
textbox1.Text = dr.Item("id")
texbox2.text= dr.Item("data inizio_fase")
...
texbox3.text=dr.item("fr_id")
dr.Close()
Cn.Close()
|
|
|
|
|
|
#8 | |
|
Junior Member
Iscritto dal: Feb 2011
Messaggi: 24
|
Quote:
Ti ringrazio però ho dichiarato le variabile nel modulo come "public" e non come "dim" perchè diversamente non funzionava. |
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Jan 2007
Messaggi: 404
|
|
|
|
|
|
|
#10 |
|
Junior Member
Iscritto dal: Feb 2011
Messaggi: 24
|
|
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Jan 2007
Messaggi: 404
|
Semplice utilizzi un ciclo while così però poi devi modificare il codice su dove inserire i dati:
Codice:
dim sql as string
sql="SELECT ID, [data inizio_fase], fase, periodo_durata, [output],verifichea, verificheb, verifichec, fine_fase, esecutore, fr_id " & _
"FROM sviluppo " & _
"WHERE fr_id = " & key
Cn.Open()
Dim cmd As New OleDbCommand(sql, Cn)
Dim dr As OleDbDataReader = cmd.ExecuteReader
WHILE dr.Read()
textbox1.Text = dr.Item("id")
texbox2.text= dr.Item("data inizio_fase")
...
texbox3.text=dr.item("fr_id")
END WHILE
dr.Close()
Cn.Close()
|
|
|
|
|
|
#12 |
|
Junior Member
Iscritto dal: Feb 2011
Messaggi: 24
|
|
|
|
|
|
|
#13 | |
|
Senior Member
Iscritto dal: Jan 2007
Messaggi: 404
|
Quote:
Codice:
Eseguo il Binding tra il DataGridView e il DataSet "DS" ( o DataTable che sia ), precedentemente "fillato" con apposito Adapter "DA" :
Codice:
DA.Fill(DS)
DataGridView1.DataSource = DS.Tables(0)
A questo punto puoi inserire un pulsante unico di "Applica Modifiche", che contiene tutta la gestione di tutte le possibili azioni che un utente può fare su una o anche più righe contemporaneamente, mediante un OleDbCommandBuilder, che esiste proprio per questo : Codice:
Private Sub cmd_applica_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd_applica.Click
If DS.HasChanges() Then
Using CB As New OleDb.OleDbCommandBuilder(DA)
DA.UpdateCommand = CB.GetUpdateCommand
DA.InsertCommand = CB.GetInsertCommand
DA.DeleteCommand = CB.GetDeleteCommand
DA.Update(DS)
End Using
DS.AcceptChanges()
MsgBox("Modifiche Salvate", MsgBoxStyle.Information, "OK")
End If
End Sub
|
|
|
|
|
|
|
#14 |
|
Junior Member
Iscritto dal: Feb 2011
Messaggi: 24
|
Lunedì quando torno a lavoro provo, per ora non posso che ringraziarti per il grande aiuto che mi stai dando.
|
|
|
|
|
|
#15 |
|
Junior Member
Iscritto dal: Feb 2011
Messaggi: 24
|
Non riesco a capire questa parte, dovrò pur dichiarare queste variabile "Da" e "DS" da qualche parte.
|
|
|
|
|
|
#16 | |
|
Senior Member
Iscritto dal: Jan 2007
Messaggi: 404
|
Quote:
Codice:
Dim DS As New DataSet 'Variabile DataSet Dim DA As OleDb.OleDbDataAdapter 'Variabile DataAdapter |
|
|
|
|
|
|
#17 | |
|
Junior Member
Iscritto dal: Feb 2011
Messaggi: 24
|
Quote:
Codice:
La variabile 'DA' viene utilizzata prima che le sia stato assegnato un valore. È possibile che venga restituita un'eccezione dovuta a un riferimento con valore null in fase di esecuzione. Codice:
DA = New OleDb.OleDbConnection(Cn) Codice:
Impossibile convertire il valore di tipo 'System.Data.OleDb.OleDbConnection' in 'String'. |
|
|
|
|
|
|
#18 |
|
Senior Member
Iscritto dal: Jan 2007
Messaggi: 404
|
posta tutto il codice della form che utilizzi così vedo dov'è che hai fatto confusione
|
|
|
|
|
|
#19 |
|
Junior Member
Iscritto dal: Feb 2011
Messaggi: 24
|
Module:
Codice:
Public key As Integer
'Percorso del DataBase
Public PercorsoDB As String = "C:\Users\Pierpaolo\Documents\Visual Studio 2010\Projects\PSP Engine\PSP Engine\database.mdb"
'Stringa di Connessione
Public ConnString As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & PercorsoDB
'Connessione alla stringa
Public Cn As New OleDbConnection(ConnString)
End Module
Codice:
Private Sub Form3_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim sql As String
Dim ds As New DataSet 'Variabile DataSet
Dim da As OleDb.OleDbDataAdapter 'Variabile DataAdapter
sql = "SELECT ID, [data inizio_fase], fase, periodo_durata, [output],verifichea, verificheb, verifichec, fine_fase, esecutore, fr_id " & _
"FROM sviluppo " & _
"WHERE fr_id = " & key
Cn.Open()
da.Fill(ds)
DataGridView1.DataSource = ds.Tables(0)
Cn.Close()
End Sub
|
|
|
|
|
|
#20 |
|
Senior Member
Iscritto dal: Jan 2007
Messaggi: 404
|
Il codice del modulo va bene mentre quello del form devi modificarlo così:
Codice:
Public Class Form3
Dim ds As New DataSet 'Variabile DataSet
Dim da As OleDb.OleDbDataAdapter 'Variabile DataAdapter
Private Sub Form3_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim sql As String
sql = "SELECT ID, [data inizio_fase], fase, periodo_durata, [output],verifichea, verificheb, verifichec, fine_fase, esecutore, fr_id " & _
"FROM sviluppo " & _
"WHERE fr_id = " & key
Cn.Open()
'Dataset
DS = New DataSet("sviluppo")
'DataAdapter
DA = New OleDb.OleDbDataAdapter(sql, Cn)
DA.Fill(DS, "sviluppo")
DataGridView1.DataSource = DS.Tables(0)
Cn.Close()
End Sub
End Class
Codice:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If DS.HasChanges() Then
Using CB As New OleDb.OleDbCommandBuilder(DA)
DA.UpdateCommand = CB.GetUpdateCommand
DA.InsertCommand = CB.GetInsertCommand
DA.DeleteCommand = CB.GetDeleteCommand
Try
DA.Update(DS, "impegno")
Catch ex As Exception
MsgBox(ex.Message)
Exit Sub
End Try
End Using
DS.AcceptChanges()
MsgBox("Modifiche Salvate", MsgBoxStyle.Information, "OK")
End If
End Sub
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 11:44.





















