Newsgroup: it.comp.lang.visual-basic
Titolo: [VB.NET 2003] Osservazione sul database

Chiedo scusa se l'argomento è già stato trattato (google gruppi non mi 
ha aiutato), ma gradirei un chiarimento.
Se con 
ADO.NET
 non è possibile creare un database, ma solo importarlo, 
il modo migliore per crearlo è una matrice dinamica?
Se io ho per esempio una maschera d'inserimento tipo:
PERSONA, con i vari campi:
nome
cognome
indirizzo
località
ecc.
e devo far inserire all'utente tutti i dati che vuole, da 10 a 1000 o 
più persone, creo una matrice dinamica per ogni campo e la ridimensiono 
con REDIM PRESERVE ad ogni aggiunta/modifica/cancellazione dell'utente.
Ho detto bene o sono fuori strada?
Christian

Christian says...

Correzione.
Ovviamente non creo una matrice per ogni campo, ma una colonna della 
matrice per ogni campo della persona.
Non c'è nulla di migliore di una matrice dinamica?
Christian

> e devo far inserire all'utente tutti i dati che vuole, da 10 a 1000
[taglio]
Presumo tre metodi:
1-  un numero di caselle di testo per quanti campi si devono inserire.
Riempite le caselle, clic su  un pulsante e si salva il record
2- una griglia con il numero di colonne pari al numero dei campi.
Riempio molte righe. Clic,  una escursione su tutte le righe, inserimento di 
tutti i dati presenti nella griglia.
Un inconveniente: se si blocca il programma o il pc, si perde il digitato.
3- riempio le caselle, clic, aggiungo i dati ad una collection in memoria. 
Dopo la memorizzazione di un numero di record. clic su un pulsante e 
inserimento nella tabella di tutti gli item che compongono la collection.
Vedo due inconvenienti:
a) i dati che inserisco nella collection dove li visualizzo onde evitare di 
inserirli due volte ?
Nella griglia  ? tanto vale utilizzare il punto 2.
b) se si blocca il programma o il pc, si perde il digitato.
Ave
giuseppeD
---
Non l'avrei giammai creduto
(Don Giovanni) 

GiuseppeD says...

Si spera che non si blocchi il pc.   ;-)   L'ideale però è salvare i 
dati subito dopo aver caricato il record.
Per griglia quale controllo intendi? DataGrid forse?
Christian

 Per griglia quale controllo intendi? DataGrid forse?
In vs 2003, mi sembra, è l'unica griglia presente.
Ave
giuseppeD
---
CCR 

GiuseppeD says...

Scusa se magari faccio domande che ad un programmatore esperto 
sembreranno ingenue.
Sul libro che sto studiando il datagrid è il prossimo capitolo e credo 
di finirlo entro la prossima settimana.
Vedrò se questo DataGrid fa al caso mio, nel frattempo grazie per 
l'aiuto.
Christian

 l'aiuto.
Non ho resistito e mi sono sciroppato tutto il capitolo ieri notte, ma 
non ci sono esempi su datagrid e matrici, pertanto chiedo:
1) come si fa ad impostare su proprietà del datagrid il datasource con 
la matrice? Ora c'è solo "(nessuno)";
2) ci sono in rete esempi di come impostare le matrici nel datagrid 
(possibilmente in italiano)? In particolare mi sembra d'aver capito 
nell'help che bisogna impostare la proprietà tablestyles con una colonna 
per ogni dimensione della matrice, ma non mi è chiaro come impostare 
questa proprietà.
Grazie.
Christian

 questa proprietà.
Per imparare ad utilizzare la griglia, necessita budgettare un tempo
consistente.
Se si vuole sviluppare applicazioni windows form, penso, la conoscenza
della griglia è obbligata.
Imparato le potenzialità e i dettagli, penso, è un componente che offre
molteplici soluzioni.
Un esempio di come formattare la griglia la puoi trovare:
http://www.it-lang-vb.net/collab.asp?autore=316
Confronto tra due Array e visualizzazione delle differenze in 
VB.NET
 
Nel seguente una moltitudine di esempi:
http://www.syncfusion.com/FAQ/WindowsForms/Default.aspx#44
Ave
giuseppeD
---
CCR
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 
http://www.syncfusion.com/FAQ/WindowsForms/Default.aspx#44
Ci metterò un mese a consultare tutto questo materiale.
Solo per cominciare, come si fa a visualizzare nel datasource della 
proprietà della datagrid la matrice dinamica che ho impostato? Così vado 
avanti nella progettazione del programma e nel contempo mi studio il 
materiale.
So come fare per un database Access (connetti a database ecc.), ma a me 
serve riempire la griglia con una matrice dinamica...
Christian

 serve riempire la griglia con una matrice dinamica...
Una matrice del genere:
 Dim a(3) As String
   a(0) = "ppppp"
   a(1) = "aaaa"
   a(2) = "bbbbb"
   a(3) = "cccc"
è sufficiente utilizzare la proprietà DataSource della griglia.
 DataGrid1.DataSource = a
Per matrici a più dimensioni, presumo, dovrai eseguire l'escursione, 
istanziare una nuova riga e aggiungerla alla griglia.
Mi sembra più semplice l'utilizzo di un DataTable.
(rappresenta una tabella di dati in memoria)
La base di 
ADO.NET
Se digiti nell'editor
Dim dt As New DataTable
o
Dim dt As System.Data.DataTable
poi il cursore su DataTable e premi F1
vai alla pagina
Membri DataTable
clic su
Costruttore DataTable
ti porta:
Costruttore DataTable
Segui l'esempio per costruire un DataTable.
Costruito il DataTable
(puoi aggiungere, eliminare righe. Modificare i valori dei singoli campi)
associ alla proprietà DataSource il DataTable:
DataGrid1.DataSource=dt
Ave
giuseppeD
---
CCR

 DataGrid1.DataSource=dt
Nel mio caso è:
(nomeDataGrid).DataSource=myDataTable
Ho copiaincollato l'esempio MakeDataTableAndDisplay() modificando solo 
l'ultima riga:
(nomeDataGrid).DataSource=myDataTable
ma ancora non mi dà nessun DataMember nella proprietà del DataGrid.
Per caso manca un passaggio?
Christian

 Per caso manca un passaggio?
guida in linea Proprietà DataGrid.DataMember 
(riporto la guida in linea in quanto l'esposto è ripreso da lì)
- Ottiene o imposta l'elenco specifico in un oggetto DataSource
- Se un oggetto DataSource contiene più origini dati, impostare la
proprietà DataMember su una delle origini
quindi, presumo, la proprietà DataMember va utilizza nel caso la fonte dei
dati può incorporare più origini dati.
Un datatable è una singola sorgente dati.
Prova la seguente aggiunta. 
Utilizzo del dataset. 
Un dataset può incorporare più datatable.
 Dim ds As New DataSet
 ds.Tables.Add(myDataTable)
 DataGrid1.DataSource = ds
e visualizza la form.
In considerazione che la fonte dati (il dataset) può fornire più sorgenti
dati, la griglia si aspetta il nome della fonte dati da visualizzare.
Se successivamente aggiungi
  DataGrid1.DataMember = myDataTable.TableName
  o
  DataGrid1.DataMember = "MyDataTable"
la sorgente dati verrà visualizzata.
Quindi, per rilevare il contenuto del datamember lo si deve prima
impostare.


 > Per caso manca un passaggio?
Chiedo scusa, intendevo dire che non mi dà nessun DataSource, poichè ho 
solo una matrice dinamica, credo che non serva il DataMember, è esatto?
Christian

 inserimento nella tabella di tutti gli item che compongono la collection.
Mi sono accorto di non aver risposto a questa domanda, lo faccio subito.
Io utilizzo il primo metodo, i dati saranno inseriti in un'altro form, 
salvati sulla matrice dinamica e visualizzati (si spera   ;-)  ) sul 
DataGrid del primo form.
Christian

Christian ha scritto:


Puoi postare come è costruita questa matrice dinamica ?
Ave
giuseppeD
---
Da una Roma solare


 Puoi postare come è costruita questa matrice dinamica ?
Certamente.
Su Modulo.vb:
Public Contatto(,) As String
Sul form d'inserimento dati inserisco i dati così:
Private Sub btnSalva_Click(ByVal .................)
'Dimensiono una variabile contando tutti i valori della matrice
Dim Cont As Short = UBound(Contatto)
' Faccio spazio per un nuovo inserimento
Cont = Cont+1
' Scrivo sulla matrice preservando i dati esistenti
ReDim Preserve Contatto(13, Cont)
Contatto(0,Cont) = tbxNick.Text
... e così via per tutti e 13 i campi
' Libero la schermata per nuovi inserimenti
tbxNick.Text = ""
... e così via per tutti e 13 i campi
End Sub
Poi sul form della DataGrid vorrei inserire nella sua proprietà 
DataSource la matrice "Contatto", così sarà popolata dai dati inseriti.
Spero d'essere stato chiaro, in caso contrario chiedi pure.
Christian
P.S.: ho un dubbio su questa riga:
Dim Cont As Short = UBound(Contatto)
ovvero se mi conta effettivamente i dati della seconda dimensione della 
matrice e poi esegue correttamente le altre linee di codice, ma prima 
vorrei risolvere il problema della DataGrid.

Christian ha scritto:
[taglio]
Per le matrici a più dimensioni mi sono espresso sopra.
presumo che la strada migliore sia quella di utilizzare un DataTable.
Oppure, aggiungere una riga alla griglia, l'esempio è riportato
nell'indirizzo indicato sopra.
Se vuoi utilizzare a tutti i costi una matrice,
per curiosità ho eseguito un tentativo per verificare la fattibilità,
il seguente:
 	Dim cli As cliente
    	Dim ar As ArrayList
    Private Sub popolagriglia()
        ar = New ArrayList
        cli = New cliente("mario", "rossi", "via lucio 34", "88")
        ar.Add(cli)
        cli = New cliente("gio", "pal", "p.zza del", "7")
        ar.Add(cli)
        cli = New cliente("lucio", "serri", "viale pop", "22")
        ar.Add(cli)
        DataGrid1.DataSource = ar
    End Sub
    Public Structure cliente
    Private _nome, _cognome, _indirizzo, _eta As String
    Public Sub New(ByVal nome As String, ByVal cognome As String, ByVal
indirizzo As String, ByVal eta As String)
        Me._nome = nome
        Me._cognome = cognome
        Me._indirizzo = indirizzo
        Me._eta = eta
    End Sub
    Public ReadOnly Property nome() As String
        Get
            Return _nome
        End Get
    End Property
    Public ReadOnly Property cognome() As String
        Get
            Return _cognome
        End Get
    End Property
    Public ReadOnly Property indirizzo() As String
        Get
            Return _indirizzo
        End Get
    End Property
    Public ReadOnly Property eta() As String
        Get
            Return _eta
        End Get
    End Property
End Structure
Ave
giuseppeD
---
CCR


         ar.Add(cli)
Per gli indirizzi mi dà errore (sottineatura blu), ma poi perchè 
inserirlo nel codice quando la mia idea è farlo inserire dall'utente?
Christian

 inserirlo nel codice quando la mia idea è farlo inserire dall'utente?
E a quest'ora giuseppe inizia a prendere gusto nel palleggiare di testa con 
un martello da 2kg  ;)
Ciao
-- 
Free .Net Reporting Tool - 
http://www.neodatatype.net
 

 con un martello da 2kg  ;)
Se l'ultima risposta è vera,
l'unico consiglio possibile è la frequentazione di un corso con insegnati 
professionali,
e no da chi ha appena finito di frequentare un corso come studente.
Oppure un libro per iniziatori, legarsi ad una sedia, alzarsi capito le 
fondamenta.
Altrimenti, chi rispone perde tempo e pazienza e chi chiede si troverà ad 
età avanzata che ha costruito il primo piano sopra il vuoto.
Ave
giuseppeD
---
CCR 

GiuseppeD says...

Tempo per fare un corso professionale non ne ho, ma ho studiato e 
studierò sui libri.
Tra l'altro ho un piano di riserva: poichè so come fare inserendo un 
database con Access, creo un database vuoto con quel programma, lo 
carico su VB e poi lo riempio.
Io avrei preferito utilizzare solo Visual Basic, ma come ultima freccia 
del mio arco mi adatterò a prendere in prestito Access.
In ogni caso grazie per il tempo che mi hai dedicato.
Christian

 studierò sui libri.
Non prendertela, è comprensibile che tu possa non avere abbastanza tempo per 
corsi specialistici (in teoria dovrebbe essere l'azienda per cui lavori che 
dovrebbe trovare il tempo e il denaro per farteli frequentare), ma in questo 
modo di tempo ne avrai sempre meno perchè lo perderai tutto rincorrendo 
problemi banali.
Il consiglio è di non limitarsi a un libro su VB, che vale quel che vale, ma 
di leggere tutti i link che di tanto in tanto vengono proposti in questi NG 
anche sulle varie tecniche di programmazione.
Il percorso è lungo e molto lento.
Ciao 

 Il percorso è lungo e molto lento.
É quello che sto facendo.
Christian