Oppure

Loading
12/11/09 12:18
ezeta64
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 12/11/09 12:20
aaa
12/11/09 14:14
Il Totem
Penso tu ti stia riferendo alle strutture:
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 12/11/09 14:15
aaa
12/11/09 14:42
ezeta64
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?
aaa
12/11/09 14:47
Il Totem
Penso tu debba reiniziare da 0 con la programmazione ad oggetti, perchè è tutta un'altra storia.
totem.altervista.org/…
A breve sarà pubblicata la nuova versione della sezione A...
aaa
14/11/09 11:46
ezeta64
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 14/11/09 11:55
aaa
14/11/09 13:48
Il Totem
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).
aaa
16/11/09 17:19
ezeta64
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????:nono:

----------------------------------------------------
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 17/11/09 15:28
aaa
17/11/09 15:22
Il Totem
Devi dire all'adapter di eseguire l'aggiornamento dei dati del database sulla base del dataset:
msdn.microsoft.com/it-it/library/…
aaa