View Full Version : [VB2008] Accesso ai dati
alexkane86
25-03-2009, 10:28
salve a tutti
sono alle prime armi con Vb
sto seguendo questa guida per accedere ai dati di un Db
http://www.ilsoftware.it/articoli.asp?id=3219&pag=1
come mostrato nella guida, v e' scritto di "Trascinare" gli elementi nel form...
questo nel 2008 non e' possibile!!!
come mi muovo?
grazie a tutti
Intendi il drag & drop dei componenti gui ?
Cioè, quali elementi non riesci a trascinare ?
alexkane86
25-03-2009, 12:04
Trasciniamo ora la tabella "Clienti" sul form "Elenco clienti".
in VB 2008 questo non me lo fa fare...non posso trascinare la tabella :(
Si, invece si può fare tranquillamente ( non credo esista qualcosa che si poteva fare in VB 2005, e non nel 2008 ).
Devi scegliere se vuoi una visualizzazione a singolo record per volta ( Dettagli ), oppure una griglia DataGridView, poi chiudi la tendina e trascini la tabella Clienti ( da origine-dati al Form ).
alexkane86
25-03-2009, 14:30
il problema e' che il menu a tendina non mi compare :(
il problema e' che il menu a tendina non mi compare :(
Forse non hai spuntato tutte le caselle delle tabelle in fase di creazione del dataset. In effetti mi pare che in quel tutorial manchi qualcosa riguardo a questo passaggio.
Prova a rifare il tutorial, e alla finestra "Configurazione guidata origine dati" assicurati di aver selezionato tutte le tabelle disponibili.
alexkane86
25-03-2009, 15:54
sto leggendo un libro...in merito alla installazione/connessione a un DB
ho seguito il loro codice....e mi succede questo :
Imports System.Data
Imports System.Data.OleDb
Public Class Form1
Private Sub btnApri_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnApri.Click
Dim myConn As New OleDbConnection
dlgOpen.ShowDialog()
Dim dr As DialogResult
dr = dlgOpen.ShowDialog()
If dr = DialogResult.OK Then
Dim strFile As String = dlgOpen.FileName
myConn.ConnectionString = " Provider=" & "Microsoft.Jet.OLEDB.4.0;Data Source=" & strFile & ";"
myConn.Open()
Dim myCMD As New OleDbCommand
myCMD.CommandText = "SELECT CodiceCliente, Cognome, Nome, Indirizzo, Città, Professione, Figli, NumeroFigli FROM Clientela"
myCMD.Connection = myConn
Dim myAdapter As New OleDbDataAdapter
myAdapter.SelectCommand = myCMD
Dim ds As New DataSet
ds.Clear()
myAdapter.Fill(ds, "Clientela")
dgvData.DataSource = ds
dgvData.DataMember = "Clientela"
End If
End Sub
End Class
errore : NameDVGDATA is not declared...
eppure io ho seguito il loro codice...come e' possibile?
inoltre, non parla di come "modificare, inserire o eliminare" un record
hai qualche link a riguardo per caso?
...
dlgOpen.ShowDialog()
Dim dr As DialogResult
dr = dlgOpen.ShowDialog()
If dr = DialogResult.OK Then
Dim strFile As String = dlgOpen.FileName
...
...
End If
...
Per essere codice preso da un manuale direi che è messo giù proprio male.
La gestione dell'OpenFileDialog non mi piace per niente, lo ShowDialog chiamato 2 volte e nessun filtro, il che ti espone ad errori critici... :doh:
Prova questo :
Dim fileDB As String
Dim OFD As New OpenFileDialog
OFD.Filter = "File Access .mdb | *.mdb"
OFD.FilterIndex = 1
OFD.Title = "Seleziona il DB Access da utilizzare :"
If OFD.ShowDialog = DialogResult.OK Then
fileDB = OFD.FileName
'...
'...
MsgBox(fileDB)
End If
'...
'...
OFD.Dispose()
Per il discorso dell'errore "nome non dichiarato", quello è evidentemente il nome che devi dare ad un DataGridView già creato a design sulla Form... ;)
alexkane86
25-03-2009, 18:10
wow perfetto ora lo provo
ecco problema grid.... non l ho mai fatto...e dal libro mi dava il codice che ti ho riportato sopra...
mentre da quella guida che ho postato sopra invece, basta trascinare (cosa che non succede con la versione 2008)
:muro:
alexkane86
25-03-2009, 18:20
trovaot nella toolbox il dataview!
ecco che cosi riesco a inserire la possibilita' di aggiungere Record etc....
ma poi per salvare il db c'e un comando o/e elemento nella toolbox?
trovando il datagrid, il codice da te riportato devo cmq lasciarlo? grazie
alexkane86
25-03-2009, 18:58
spe ti scrivo subito quel che vorrei creare
vorrei tramite una dialog box aprire il db
successivamente, poterlo modificare e visualizzare
per poi chiuderlo e salvarlo
Beh, io la vedo così :
1. Se intraprendi la strada della procedura automatica ( il "lato oscuro"... :D ), come riportato in quel tutorial ( l'ho fatto anch'io ed è valido ), dovrai scrivere molto meno codice, avrai la possibilità di creare molte Form che hanno già tutta la logica per Select, Insert, Update e Delete, ma ovviamente meno personalizzabili e flessibili. Inoltre questo sistema non è infallibile in quanto l'Ide spesso non riesce a coprire tutte le possibili eccezioni, e l'applicazione, così come esce dalla procedura, può produrre anche errori critici. Prova ad esempio ad immettere un CAP con 6 numeri o ad inserire un ID già presente e vedra il risultato. Non è bello distribuire un'applicazione che funziona così.
Diciamo che è un sistema valido, veloce, ma paradossalmente più adatto ad uno sviluppatore abbastanza esperto, che ad un neofita.
2. Se invece vuoi scrivere codice ( scelta che consiglio se sei all'inizio ), allora devi creare le tue Form, i cotrolli e il codice di accesso al DB.
Più lungo, più difficile, ma più "formativo".
3. Il mio codice sull'OpenFileDialog rimane valido in entrambi i casi, perchè puoi selezionare il DB, usarne percorso e nome per costruire la ConnectionString, mentre il restante codice che popola la dgv nel caso della procedura automatica sarà superfluo.
Ovviamente, mischiare codice proprio e procedure automatiche può portare a grandi risultati con un notevole risparmio di tempo, ma solo se si è sicuri di dove mettere le mani. ;)
alexkane86
25-03-2009, 23:05
Ti ringrazio Marco per il supporto che mi stai dando...
VB non lo tocco da anni..mi sto cimentando in questi 2 giorni, ma non ho mai lavorato con db o apertura di file...
il problema e' che, una volta avviato l'open file dialog, questo cosa comporta (non l ho ben capito nel libro, ne tantomeno su internet trovo una risposta valida)
io una volta aperto il file, posso utilizzare il percorso per creare una connessione allo stesso Db(ConnectionString?) e quindi fare il dataview??
mi consigli, se esiste,un buon libro sul VB 05 (O 08) che tratti anche in modo approfondito delle relazioni con file/db se ne conosci uno?grazie e scusa lo stress
io una volta aperto il file, posso utilizzare il percorso per creare una connessione allo stesso Db(ConnectionString?) e quindi fare il dataview??
mi consigli, se esiste,un buon libro sul VB 05 (O 08) che tratti anche in modo approfondito delle relazioni con file/db se ne conosci uno?grazie e scusa lo stress
Costruisci la connString, ad esempio così :
Dim fileDB As String
Dim connString As String
Dim OFD As New OpenFileDialog
OFD.Multiselect = False
OFD.Filter = "File Access .mdb | *.mdb"
OFD.FilterIndex = 1
OFD.Title = "Seleziona il DB Access da utilizzare :"
If OFD.ShowDialog = DialogResult.OK Then
fileDB = OFD.FileName
connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & fileDB & ";Persist Security Info=False"
'...
'...
MsgBox(fileDB)
End If
'...
'...
OFD.Dispose()
Libri su VB ce n'è davvero una marea, fossi in te cercherei prima qualche tutorial online su VB-ADO.Net, come ad es. questo :
http://www.aspitalia.com/articoli/asp.net/adodotnet.aspx
;)
alexkane86
26-03-2009, 09:55
ok ci provo! ti ringrazio di cuore
alexkane86
26-03-2009, 12:28
niente..son proprio negato...probabilmente anche perche' non capisco "cosa sto facendo"
ti posso chiedere una consulenza (Di quelle pallose e! son disposto anche a pagarti ti giuro hihihi non scherzo)
riflettendo sul programma che devo fare :
1)chiedere il file tramite una dialog box
2)apertura connessione al db "anagrafica"
3) editing db, lettura, scrittura, grid view
quindi io ho il Form1
qui vi credo un bottone, dove inserisco i comandi per la dialog box
all'avvio cosa succede quindi? io dandogli il file Db, questo poi...svanisce?
2) apertura e connessione Db....devo usare il comando da te sopra elencato? in questo caso lui si allaccia quindi al Db.......
3) una volta alacciato quindi posso creare il data grid giusto? (io ho "forzato" la creazione del data grid, ma se inserisco i record, questi non mi vengono salvati)
grazie
sparami il prezzo hiihih
all'avvio cosa succede quindi? io dandogli il file Db, questo poi...svanisce?
2) apertura e connessione Db....devo usare il comando da te sopra elencato? in questo caso lui si allaccia quindi al Db.......
3) una volta alacciato quindi posso creare il data grid giusto? (io ho "forzato" la creazione del data grid, ma se inserisco i record, questi non mi vengono salvati)
grazie
sparami il prezzo hiihih
Direi che ti sei un po' "buttato a testa bassa" nel codice senza avere le basi...
Il DB non "svanisce", ma con quella Dialog semplicemente fai in modo che l'applicazione sappia dove si trova il DB su cui dovrà lavorare.
La stringa di connessione dovrà essere immessa, ad esempio, in una variabile Public, in un modulo, in modo che tutta l'applicazione ne possa fare uso.
Se usi una DataGridView unbound, cioè fai tutto via codice, è ovvio che devi scrivere tu le ruotine per l'accesso e la modifica al DB...
Per la consulenza, se vuoi si può fare, ma meglio parlarne in pvt ( anche se quel "ihihih" finale mi convince poco :D ).
alexkane86
26-03-2009, 13:54
guarda l ultima volta che usai il VB ( 6) fu 4 anni fa...quindi mi son scordato tutto
l ho ripreso pochi giorni fa, e finche si tratta di cicli, contatori etc non ho problemi
e' la prima volta pero' che lavoro con file (db) quindi per me si puo' dire che e' nuovo
io per il datagrid, ho usato il comando apposito, quindi e' lui da solo che mi ha copiato il db nel programma...ma comunque non cambia nulla anzi..gli indici me li da in -1 -2 -3 -4 ... :help:
guarda l ultima volta che usai il VB ( 6) fu 4 anni fa...quindi mi son scordato tutto
E questo è un bene, nel senso che se usavi ADO ( o addirittura DAO ), passando ad ADO.Net faresti solo confusione. ADO .Net è molto diverso, ( anche se in alcune cose può sembrare simile al vecchio ADO ) perciò studia quello nuovo.
Stesso discorso per VB. Molta gente confonde ancora VB6 con VB NET ( e siamo già alla quarta versione ! ). Il ricordarsi VB6 per molti è forse lo scoglio peggiore nel passaggio a .Net, perciò parti avvantaggiato. :D
io per il datagrid, ho usato il comando apposito, quindi e' lui da solo che mi ha copiato il db nel programma...ma comunque non cambia nulla anzi..gli indici me li da in -1 -2 -3 -4 ... :help:
Quello degli indici è uno dei limiti ( che ti dicevo ) della procedura automatica. Dovrai fare un bel po' di modifiche dopo, se vuoi che tutto si comporti come desideri. Se, come penso, il tuo DB è abbastanza semplice, e se vuoi anche imparare, invece che produrre un qualcosa di corsa, scrivi e lascia perdere le
procedure guidate.
alexkane86
26-03-2009, 14:20
copiato!
si inizialmente ho notato le differenze tra il 6 e .net ma son subito svanite
ecco l'unico difetto e' proprio questo del db non avendoci mai lavorato
ok allora mi studio l'ado.net, da quel link che mi hai dato sopra
poi ti contatto via pm allora
ti ringrazio davvero per la mano
alexkane86
27-03-2009, 18:37
ciao
mi sono allacciato al db...lo apre...lo modifico e salvo
alla successiva riapertura il db risulta modificato come io ho fatto....
ma se apro il db via access....non vi sono le modifiche..possibile?
Perchè evidentemente stai lavorando su un dataset disconnesso...
Ma qui si sta davvero sforando nella consulenza a domicilio... :D :D
alexkane86
27-03-2009, 22:34
AHAHA SParami il costo, se sei di roma ancora piu semplcie ;)
ps questo e' il codice
Imports System.Data
Imports System.Data.OleDb
Public Class Form1
Dim ConnessioneDb As New OleDbConnection
Private Sub btnApri_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnApri.Click
Dim fileDB As String
Dim DialogOp As New OpenFileDialog
DialogOp.Filter = "Database Access .mdb | *.mdb"
If DialogOp.ShowDialog = DialogResult.OK Then
fileDB = DialogOp.FileName
ConnessioneDb.ConnectionString = "Provider = Microsoft.Jet.OLEDB.4.0;Data Source=" & fileDB & ";"
MsgBox(fileDB)
ConnessioneDb.Open()
End If
DialogOp.Dispose()
frmData.Show()
End Sub
End Class
alexkane86
28-03-2009, 11:58
ciao ho fatto il seguente codice
Imports System.Data
Imports System.Data.OleDb
Public Class Form1
Dim ConnessioneDb As New OleDbConnection
Private PaginaCorrente As Integer
Private dttDati As DataTable
Private TotalePagine As Integer
Private RecordAttuale As Integer
Private Sub CaricaDati()
Dim conta As Integer
Dim RecordInziale As Integer
Dim RecordFinale As Integer
Dim dttTemp As DataTable
Dim RecordPerPagina As Integer
Dim TotaleRecord As Integer
RecordPerPagina = CType(txtRecordPerPagina.Text, Integer)
TotaleRecord = dttDati.Rows.Count
dttTemp = dttDati.Clone
If PaginaCorrente = TotalePagine Then
RecordFinale = TotaleRecord
Else
RecordFinale = RecordPerPagina * PaginaCorrente
End If
RecordInziale = RecordAttuale
For conta = RecordInziale To RecordFinale - 1
dttTemp.ImportRow(dttDati.Rows(conta))
RecordAttuale = RecordAttuale + 1
Next
DtgDati.DataSource = dttTemp
txtPosizione.Text = "Pagina " & PaginaCorrente.ToString() & "/" & TotalePagine.ToString()
End Sub
Private Sub btnApri_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnApri.Click
Dim fileDB As String
Dim DialogOp As New OpenFileDialog
DialogOp.Filter = "Database Access .mdb | *.mdb"
If DialogOp.ShowDialog = DialogResult.OK Then
fileDB = DialogOp.FileName
ConnessioneDb.ConnectionString = "Provider = Microsoft.Jet.OLEDB.4.0;Data Source=" & fileDB & ";"
MsgBox(fileDB)
ConnessioneDb.Open()
End If
Dim DbAdapter As New OleDbDataAdapter("Select CodiceCliente, Nome, Cognome, Via, Città, Cap, ContattoTelefonico FROM Clienti", ConnessioneDb)
Dim Datas As New DataSet()
DbAdapter.Fill(Datas, "Clienti")
DtgDati.DataSource = Datas
DtgDati.DataMember = "Clienti"
dttDati = Datas.Tables("Clienti")
TotalePagine = dttDati.Rows.Count / CType(txtRecordPerPagina.Text, Integer)
If (dttDati.Rows.Count Mod CType(txtRecordPerPagina.Text, Integer)) > 0 Then
TotalePagine = TotalePagine + 1
End If
PaginaCorrente = 1
RecordAttuale = 0
CaricaDati()
DialogOp.Dispose()
frmData.Show()
End Sub
ma mi da errore dove vedi in rosso...come mai?
alexkane86
30-03-2009, 12:42
sigh sigh....data fill infame :(
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.