
ezeta64 (Normal User)
Newbie
    
Messaggi: 6
Iscritto: 11/11/2009
|
Scusate, ma sono alle prime armi con Visual Basic 2008 (programmavo una ventina di anni fa con quick basic 7 e poi ho fatto dell'altro...), ho imparato a destreggiarmi con i vari controlli, textbox, label, cicli, gestione eventi, però vorrei che qualcuno mi inidicasse come creare con questo linguaggio una struttura tipo record tipica del vecchio qbasic, senza doverla per forza importare da un database Access. Per dirla in breve ho visto che il comando "TYPE" che serviva appunto a quello non è più accettato in vb2008, ma se io voglio costruirmi un classico record con i soliti campi "Nome", "Cognome" e così via, come faccio???
Ultima modifica effettuata da ezeta64 il 12/11/2009 alle 13:20 |
|

Il Totem (Admin)
Guru^2
    
Messaggi: 3635
Iscritto: 24/01/2006
|
Penso tu ti stia riferendo alle strutture:
Codice sorgente - presumibilmente VB.NET |
Structure Contatto Dim Nome, Cognome As String End Structure
|
Tuttavia, in .NET, la gestione dei database si basa sull'utilizzo di classi, e non di strutture, per la manipolazione dei record. Quando colleghi un database all'applicazione mediante il wizard di VS, esso crea delle nuove classi per rappresentare i record. Allo stesso modo, se ti interfacci col database usando la nuova tecnologia di LINQ, dovrai comunque rappresentare le relazioni con classi. Cerca ADO.NET per maggiori informazioni.
Ultima modifica effettuata da Il Totem il 12/11/2009 alle 15:15 |
|

ezeta64 (Normal User)
Newbie
    
Messaggi: 6
Iscritto: 11/11/2009
|
grazie, ma una classe la posso creare anche senza importare un db Access? vale a dire non mi posso creare una o più classi e gestirla(INSERIMENTO, VARIAZIONE, CANCELLAZIONE...) direttamente da Visual Basic? Se sì con che istruzioni?
|
|

Il Totem (Admin)
Guru^2
    
Messaggi: 3635
Iscritto: 24/01/2006
|
|
|

ezeta64 (Normal User)
Newbie
    
Messaggi: 6
Iscritto: 11/11/2009
|
Ho seguito il tuo prezioso e logico consiglio e ho iniziato a studiare..
Mi sono creato un database Access di prova chiamato test e ho creato una tabella "Clienti" coi soli campi "Cognome e "Nome" tanto per provare un po'..
Ho letto la teoria su DataSet, DataAdapter, OLEDB e chi ne ha più ne metta...
Ho scritto questo:
------------------------------------------
Imports System.Data
Imports System.Data.OleDb
Public Class Form1
'connessione al database
Dim clientiConn As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\clienti\test.accdb"
Dim cn As New OleDbConnection(clientiConn)
'comando SQL per il recupero dei dati
Dim sql As String = "SELECT IDCliente, Cognome, Nome FROM Clienti ORDER BY Cognome"
Dim cmd = New OleDbCommand(Sql, cn)
Dim da As New OleDbDataAdapter()
Dim dsClienti As New DataSet
Private Sub btnImporta_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnImporta.Click
' assegna il comando al DataAdapter
da.SelectCommand = cmd
' apre la connessione
cn.Open()
' copia anche le chiavi
da.MissingSchemaAction = MissingSchemaAction.AddWithKey
dsClienti.Clear()
da.Fill(dsClienti, "Clienti")
End Sub
End Class
---------------------------------------------------
Quando lo eseguo e arriva all'istruzione da.Fill(dsClienti,"Clienti") mi dà l'errore
No value given for one or more required parameters.
Cos'ho sbagliato?
Se vale il detto "Chi ben comincia..." sono ben preso!!!
Ultima modifica effettuata da ezeta64 il 14/11/2009 alle 12:55 |
|

Il Totem (Admin)
Guru^2
    
Messaggi: 3635
Iscritto: 24/01/2006
|
L'errore deriva dalla query. Penso che tu abbia sbagliato a scrivere uno o più campi: ricontrolla e presta attenzione alle minuscole/maiuscole (e che sia il database giusto).
|
|

ezeta64 (Normal User)
Newbie
    
Messaggi: 6
Iscritto: 11/11/2009
|
Infatti, avevo sbagliato il campo ID..
Ho poi aggiunto un textButton per inserire nuovi record nel dataset e poi aggiornare il database Access. Effettivamente mi inserisce i nuovi dati nel dataset, ma non mi aggiorna il file Access senza peraltro darmi alcun errore....
Cosa sbaglio????
----------------------------------------------------
Private Sub btnNuovo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNuovo.Click
cn = New OleDbConnection(clientiConn)
sql = "SELECT * FROM Clienti"
Dim cmd As New OleDbCommand(sql, cn)
da.SelectCommand = cmd
' apre la connessione
cn.Open()
' copia anche le chiavi
da.MissingSchemaAction = MissingSchemaAction.AddWithKey
ds = New DataSet("Clienti")
ds.Clear()
da.Fill(ds, "Clienti")
Dim dr As DataRow = ds.Tables("Clienti").NewRow
'indice ultima riga
Dim r As Integer = ds.Tables("Clienti").Rows.Count
dr("ID") = r + 1
dr("Cognome") = txtCognome.Text
dr("Nome") = txtNome.Text
ds.Tables("Clienti").Rows.Add(dr)
ds.Tables("Clienti").AcceptChanges()
Dim cmdBuild As New OleDbCommandBuilder(da)
da.UpdateCommand = cmdBuild.GetUpdateCommand
txtCognome.Clear()
txtNome.Clear()
End Sub
---------------------------------------------------------------
Ultima modifica effettuata da ezeta64 il 17/11/2009 alle 16:28 |
|

Il Totem (Admin)
Guru^2
    
Messaggi: 3635
Iscritto: 24/01/2006
|
|
|

ezeta64 (Normal User)
Newbie
    
Messaggi: 6
Iscritto: 11/11/2009
|
Ma questo non vabene??
Dim cmdBuild As New OleDbCommandBuilder(da)
da.UpdateCommand = cmdBuild.GetUpdateCommand
|
|