|
|
|
![]() |
|
Strumenti |
![]() |
#21 |
Member
Iscritto dal: Jul 2002
Città: TV
Messaggi: 125
|
beh se e' sbagliata la sintassi un errore te lo deve dare..se non e' sbagliata vuol dire che o ha fatto il suo dovere..
quando hai la dattatable in memoria puoi eseguire filtraggi,ordinamenti ,ricerche ecc.. un metodo per fa cercare un record e' la select sulla row collections: ds.tables("ArcImpiegati").Select(Codice=15 ) <criterio> non e' altro che il tuo criterio per la tua ricerca (restituisce una o più righe) |
![]() |
![]() |
![]() |
#22 |
Senior Member
Iscritto dal: Sep 2003
Messaggi: 1025
|
Ho seguito passo passo quelo che mi hai postato e ci sono riuscito a farlo funzionare..grazie mille...l'istruzione sql devo ancora correggerla mi da l'errore "operazione non gestita"
scusa ma non capisco in "criterio che codice ci devo mettere esempio... io nel record dove l'impiegato è Marco Verdi voglio sapere se prestito = "si" quindi se nel campo del database prestito ha come valore il testo "si" io come mi hai detto tu faccio la ricerca sul record ma devo inserire un certo parametro per farmi ritornare la riga dove l'utente è Marco Verdi ds.tables("ArcImpiegati").Select(Codice=15 ) non mi riesco a spiegare forse ecco come tu mi hai messo quì ds.tables("ArcImpiegati").Rows(indice).item(Prestito) = textbox.text io nella riga indice ci voglio mettere non l'idic della riga perchè non lo posso sapere...ne ho mille di righe che vengono aggiunte..io in quell'indice ci voglio mettere "dove nome impiegato, o nome utente" risulta = a una textbox o un determinato nome es "Marco Verdi" |
![]() |
![]() |
![]() |
#23 |
Senior Member
Iscritto dal: Sep 2003
Messaggi: 1025
|
ho fatto così:
ds = dsprova1 dim row as Datarow() row = ds.tables("arcImpiegati").Select("Impiegato" = Marco", "impiegato) in questo modo dovrebbe farmi la select sulla tabella arcimpiegati per quanto riguarda la riga dove "impiegato = Marco" giusto?? adesso non riesco ad associare il campo prestito, di questo determinato record, ad una textbox...ho sagliato qualcosa??? row.item(Prestito)=txtprestito non funziona perchè mi dice che Item non è una proprietà di row. |
![]() |
![]() |
![]() |
#24 | |
Member
Iscritto dal: Jul 2002
Città: TV
Messaggi: 125
|
Quote:
Ora per selezionare i singoli record puoi usare la Select sulla collezione di righe in memoria. Dim ResultRow As DataRow() ResultRow = ds.Tables("ArcImpiegati").Select("Impiegato='Marco Verdi'") in ResultRow,che e' un ARRAY(x questo ti diceva che Item non e' una proprietà di row),avrai ora l'insieme delle righe la cui colonna impiegato contiene Marco Verdi.Supponendo che ne esista solo una nel tuo database con ResultRow(0) puoi accedere a tutti i campi di quel singolo record Come? TextBox1.Text=ResultRow(0).Item("Prestito") dopo questa istruzione la textbox visualizzerà il contenuto della cella nella colonna prestito del record che ha Impiegato='Marco Verdi'.Più chiaro ora? A questo punto mi sento di suggerirti,per quello che ho potuto intravedere del tuo progetto quanto sotto: -tira dentro una listbox sulla form -dopo aver creato la tabella in memoria tramite il solito metodo scrivi queste istruzioni: ListBox1.DataSource = Ds.Tables("ArcImpiegati") ListBox1.DisplayMember = "Impiegato" ListBox1.ValueMember = "Codice" 'opzionale,mettilo se hai un campo codice/id in questo modo hai fatto il bind di un controllo -Dichiara globale alla form Public CurRow as DataRow -crea un evento ListBox1_SelectedIndexChanged -mettici dento questa istruzione CurRow=ListBox1.SelectedItem Ora se hai eseguito una query del tipo "SELECT * FROM TABELLAIMPIEGATI" nella listbox dovresti la lista degli impiegati. A ogni nuova selezione di un elemento nella ListBox viene attualizzata la riga corrente CurRow(ti evita le select di inizio post) Ora che hai sempre la riga corrente tira dentro i controlli textbox o quant'altro che ti servono x visualizzare i dati di ciascun record e : -o fai il binding come per la listbox -o popoli a mano dentro la ListBox1_SelectedIndexChanged TxtImpiegatoNAme.Text=CurRow.Item("Impiegato") CkPrestito.Checked=CurRow.Item("Prestito") 'funzia se e' un campo BOOL Direi che di + non posso fare ![]() |
|
![]() |
![]() |
![]() |
#25 |
Senior Member
Iscritto dal: Sep 2003
Messaggi: 1025
|
Si io ho messo il mio codice nell'esempio che tu mi hai postato e mi funziona tutto compreso l'aggiornamento al database quindi mi sono costruito la table in memoria....l'unico problema adesso è capire come fae questo...adesso mi guardo quello che mi hai postato...
|
![]() |
![]() |
![]() |
#26 |
Senior Member
Iscritto dal: Sep 2003
Messaggi: 1025
|
a dirti la verita stamattina ci ho provato a fare così ma con l'indice 0 mi dice indici fuori dalla matrice anche se il record c'è all'interno del database ti posto tutto quello che ho fatto...
Dim conn As New OleDbConnection() Dim ds As New DataSet() Dim da As New OleDbDataAdapter() 'Dim Cn As New OleDbConnection() 'o se no metto cn come oledbconnection1 e poi dovrebbe funzionare... Public NomeFileDb As String = "C:\Documents and Settings\MARCO\Desktop\Prova.mdb" Public Sub PopolaTabella(ByVal Query As String, ByVal NomeTbl As String, ByVal NomeFileDb As String) da = OleDbDataAdapter1 ds = DsProva1 Try OleDbConnection1.Open() If OleDbConnection1.State = ConnectionState.Open Then da.SelectCommand = New OleDbCommand(Query, OleDbConnection1) da.SelectCommand.Connection = OleDbConnection1 da.SelectCommand.ExecuteNonQuery() da.Fill(ds, NomeTbl) da.FillSchema(ds, SchemaType.Mapped) 'se segui passo passo il codice vedrai che ora DeleteCommand,insertcommand 'e update command sono a NOTHING quindi devi valorizzarli Dim CmbBld As New OleDb.OleDbCommandBuilder(da) da.DeleteCommand = CmbBld.GetDeleteCommand da.InsertCommand = CmbBld.GetInsertCommand da.UpdateCommand = CmbBld.GetUpdateCommand End If Catch err As OleDbException MsgBox(err.Message & " " & err.ErrorCode) Finally If OleDbConnection1.State = ConnectionState.Open Then OleDbConnection1.Close() End Try End Sub Private Sub btPopola_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btPopola.Click PopolaTabella("Select * from ArcImpiegati", "ArcImpiegati", "NomeFileDb") 'ora aggiungici il binding ai tuoi controlli sulla form End Sub Private Sub BtAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btAdd.Click da = OleDbDataAdapter1 ds = DsProva1 Dim row As DataRow row = ds.Tables("ArcImpiegati").NewRow() 'in questo momento hai una row disconnessa della tua table in memoria ma su cui puoi lavorare 'ora qui sotto aggiungici i nomi dei tuoi campi e i tuoi dati row.Item("Impiegato") = txtImpiegato.Text row.Item("NumTelefono") = txtNumTel.Text row.Item("Utente") = txtUtente.Text ds.Tables("ArcImpiegati").Rows.Add(row) 'ora la riga e' stata aggiunta nella datatable in memoria non sul db..ado.net lavora in modalita 'disconnessa! End Sub Private Sub BtSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btSave.Click da = OleDbDataAdapter1 Dim dt As DataTable 'ottiene una copia di tutte le modifiche apportate alla tabella "arcImpiegati" dt = ds.Tables("ArcImpiegati").GetChanges If Not IsNothing(dt) Then 'ORA HA AGGIORNATO CON LE MODIFICHE SUL TUO DB ACCESS! da.Update(ds.Tables("ArcImpiegati")) End If End Sub Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load End Sub Private Sub btRicerca_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btRicerca.Click Dim ResultRow As DataRow() ResultRow = DsProva1.Tables("ArcImpiegati").Select("Impiegato='Marco Verdi'") txtPrestito.Text = ResultRow(0).Item("Prestito") End Sub End Class |
![]() |
![]() |
![]() |
#27 |
Senior Member
Iscritto dal: Sep 2003
Messaggi: 1025
|
Funziona grazie mille...mi uccidi se ti dico dove sbagliavo....grazie mille ma c'ero arrivato da solo stamattina....cmq se mi serve qualche altro consiglio ti posso chiedere???grazie ancora di tutto.
|
![]() |
![]() |
![]() |
#28 |
Senior Member
Iscritto dal: Sep 2003
Messaggi: 1025
|
perfetto funziona tutto...ho provato a fare quello che mi hai detto con la listbox...adesso però quando premo sul pulsante popola mi riempie solo la list box e non più il datagrid...sul quale avevo fatto il binding al dataset...
|
![]() |
![]() |
![]() |
#29 |
Member
Iscritto dal: Jul 2002
Città: TV
Messaggi: 125
|
Se non c'e' più il binding sul datagrid vuol dire che l'hai tolto o non viene eseguito,xchè puoi averli bindati entrambi anche sullo stesso campo.Controlla bene se c'e' il bind sul datagrid e,in caso affermativo,controlla passo passo l'esecuzione del codice a runtime..dai che ci siamo
![]() |
![]() |
![]() |
![]() |
#30 |
Senior Member
Iscritto dal: Sep 2003
Messaggi: 1025
|
perfetto ci sono ho fatto popolare singolarmente sia il datagrid che la listbox...io ho inserito l'evento per quando cambio la selezione sull'impiegato nella listbox...solo che appena seleziono un impiegato mi da un errore e non mi si posiziona sulla riga corrente...vedo come risolverlo da solo, forse è perchè avevo fatto il binding sia sulla list che sul datagrid sullo stesso evento e allora popolava solo la listbox...se non ci riesco ti posto l'errore, io cmq ho seguito quello che mi hai postato tu...grazie ancora per i mille consigli...perchè penso che se ho imparato come è il sistema dopo sarà molto più facile per me adattarlo ad altri programmi.
|
![]() |
![]() |
![]() |
#31 |
Senior Member
Iscritto dal: Sep 2003
Messaggi: 1025
|
Public CurRow as DataRow
-crea un evento ListBox1_SelectedIndexChanged -mettici dento questa istruzione CurRow=ListBox1.SelectedItem Ora se hai eseguito una query del tipo "SELECT * FROM TABELLAIMPIEGATI" nella listbox dovresti la lista degli impiegati. A ogni nuova selezione di un elemento nella ListBox viene attualizzata la riga corrente CurRow(ti evita le select di inizio post) Ora che hai sempre la riga corrente tira dentro i controlli textbox o quant'altro che ti servono x visualizzare i dati di ciascun record e : -o fai il binding come per la listbox -o popoli a mano dentro la ListBox1_SelectedIndexChanged TxtImpiegatoNAme.Text=CurRow.Item("Impiegato") CkPrestito.Checked=CurRow.Item("Prestito") 'funzia se e' un campo BOOL Direi che di + non posso fare ------------------------------------------------------------------------------------ geen mi dice cast non valido e si ferma a CurRow=ListBox1.SelectedItem cosa si ignifica?? |
![]() |
![]() |
![]() |
#32 |
Member
Iscritto dal: Jul 2002
Città: TV
Messaggi: 125
|
Si e' vero,manchevolezza mia
Essendo bindata la Listbox ritorna un DataRowView e io ti ho fatto dichiarare CurRow come datarow.Nell'evento ListBox1_SelectedIndexChanged metti questo Dim Row As Data.DataRowView Row = LstDitte.SelectedItem CurRow = Row.Row e hai la riga corrente sulla tabella (Cast non valido=sbagliato il tipo..Shift+F9 sulla variabile e vedi il tipo cosi ti accorgevi subito che stava tornando un valore non compatibile con la tua variabile CurRow ![]() |
![]() |
![]() |
![]() |
#33 |
Senior Member
Iscritto dal: Sep 2003
Messaggi: 1025
|
grazie mille di tutto sai???ti ho scritto anche sull'altra discussione tool bar...grazie mille di tutto...
|
![]() |
![]() |
![]() |
#34 |
Member
Iscritto dal: Jul 2002
Città: TV
Messaggi: 125
|
Di nulla
![]() |
![]() |
![]() |
![]() |
#35 | |
Senior Member
Iscritto dal: Sep 2003
Messaggi: 1025
|
Quote:
geen scusa se ti rompo ancora...volevo chiederti una cosina ancora...adesso ho fatto tutti i collegamenti...io nel mio programma uso 2 tabelle...come mi consigli di fare creo due dataset ogniuno per ogni tabella oppure due dataadapter diversi???in modo che il selectcommand,insertcommand,deletecommand siano di quella tabella...cioè volevo sapere se devo trascinare anche quella tabella nel form oppure se potevo utilizzare il dataset e il dataadapter della tabella che avevo già nel programma... poi avevo intenzione di fare un collegamento tra le due tabelle...mi spiego meglio... io quando inserisco un nuovo record nella tabella impiegati voglio scrivere nel campo "titolo" della tabella Libri dove il titolo del libro è uguale a quello del relativo Impiegato...cioè in tutte e due le tabelle c'è un campo Titolo solo che una è la tabella Libri e quell'altra la tabella Impiegati...volevo fare questo tipo di relazione...come posso fare...grazie ancora di tutto.... poi per modificare i dati di una intera riga senza aggiungerne una nuova devo usare il metodo edit del DataRow???grazie ancora di tutto...come sempre Ultima modifica di mangzeus : 17-04-2004 alle 12:42. |
|
![]() |
![]() |
![]() |
#36 | |||
Member
Iscritto dal: Jul 2002
Città: TV
Messaggi: 125
|
Quote:
Se invece verrà modificata una sola tabella usa un solo dataadapter ed esegui il commandbuilder solo per la tabella interessata Quote:
-e' stato inserito un nuovo record nella tabella impiegati -vado a cercarmi nella tabella libi i record che hanno il campo titolo=a quello del nuovo record -scrivo nel campo titolo della tabella libri. Ho capito bene?Perche' non riesco a vedere un'applicazione di questo algoritmo..cmq farei cosi finita la modifica mi creo una dataVIEW con un sottoinsieme della tabella libri(filtrata logicamente per il campo Titoli) Dim dw As DataView dw = New DataView(ds.Tables("ArcImpiegati")) dw.RowFilter = "Titolo = '" & NewRow.Item("Titolo") & "'" Quote:
Viene usato nel caso di aggiornamenti di più righe in cui ogni singola riga scatena eventi che rallentano l'esecuzione e non sono necessari in quanto ne basterebbe l'esecuzione solo al termine dell'aggiornamento(tipico caso e' il popolamento di una listbox bindata che ha un evento selectindexchanged implementato) |
|||
![]() |
![]() |
![]() |
#37 | |
Senior Member
Iscritto dal: Sep 2003
Messaggi: 1025
|
Quote:
allora quello che intendevo io è questo: io ho 2 tabelle 1 impiegati e quell'altra libri... 1.Inserisco un nuovo record nella tabella impiegati con il nome dell'Impiegato e il titolo del libro.... 2.nel momento in cui inserisco questo record voglio che automaticamente nella tabella libri, nel campo titolo, (nel campo titolo dove il titolo è = a quello che ho scritto nel nuovo record aggiunto dell'impiegato) voglio che venga scritto una qualsiasi cosa: ad esempio "si"...questo mi serve poi per verificare la disponibilità del libro o meno nela tabella libri...spero di essermi spiegato... per quanto riguarda la modifica...io nel mio form per ogni riga corrente ho fatto il binding su delle textbox relative ad ogni campo...io quando visualizzo la riga corrente mi si riempiono tutte le textbox con i relativi campi e io voglio fare in modo che se uno vuole modificare quel determinato campo scriva dentro la textbox e con un pulsante il record venga modificato...pensavo si usasse edit e begin edit...c'è un metodo per fare questo...come edit e upgrade in vb6?? |
|
![]() |
![]() |
![]() |
#38 |
Senior Member
Iscritto dal: Sep 2003
Messaggi: 1025
|
geen mi permetto di mandarti il mio programmino per email...ho fatto tutto quello che mi hai detto ma non mi funziona quando voglio aggiornare i dati sul database con la sub AggiornaDb...non mi viene neanche fuori l'errore...
allora sarà una stupidata cmq ti mando per email il mio programma che funziona la visualizzazione l'aggiungi ma non l'aggiorna... o meglio io faccio sempre così 1lista libri, faccio click Visualizza Lista 2vado su tab gestione libri.. 3aggiungo dei record 4torno su visualizza lista e faccio click aggiorna e mi da l'errore, per favore mi puoi trovare questo stupido errore perchè nell'esempio che mi avevi postato mi funziona e quì no e non capisco perchè... poi sempre per via email se mi puoi rispondere all'ultimo post che ti ho mandato....con calma...grazie mille... ti posto anche il database bibliox Ultima modifica di mangzeus : 19-04-2004 alle 14:44. |
![]() |
![]() |
![]() |
#39 |
Junior Member
Iscritto dal: Mar 2010
Messaggi: 14
|
problema update nel caso di rimozione righe dalla table
Buongiorno a tutti,
ho trovato molto interessante questa discussione e mi è stata anche utile. Ho incontrato solo un piccolo problema, il comando da.update non funziona nel caso di eliminazione delle righe dalla datatable. Riesco a rimuovere la riga dalla table ma al modifica non viene riportata sul db. L'unico modo di eliminare le righe è di farlo in modo diretto eseguendo un comando sql apposito. Secondo voi quale potrebbe essere il problema? Grazie per l'attenzione. Saluti. Andrea |
![]() |
![]() |
![]() |
#40 | |
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
![]() Oltretutto ragazzi, usate questi benedetti tags [code] e l'indentazione, sennò viene il mal di mare, e passa anche la voglia di capire/interpretare/aiutare... ![]()
__________________
Contattami su FaceBook --> [ ::: MarcoGG su FaceBook ::: ] Visita il mio Blog --> [ ::: Il Blog di MarcoGG ::: ] |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 04:48.