xone2003 (Normal User)
Rookie
Messaggi: 32
Iscritto: 27/11/2008
|
Ciao, eccomi con un altro quesito..
Ho due TextBox (NewBike e NewCat) nelle quali inserisco stringhe per poi inserirle con apposito evento in un database alla voce "Bicicletta" e "Categoria". Ho una terza Colonna "controllo" nel tabase nel quale figura come stringa il concatenamento delle due prime colonne.
Vorrei però poter controllare se il concatenamento di NewBike.text e NewCat.text esiste già nella tabella nel qual caso informare con un msgbox di ripetere l'inserimento.
Nella tabella "tipologiabike" ci sono 3 colonne "Bicicletta, Categoria e Controllo".
Ho scritto il seguente codice però non mi funziona...
Non risponde con nessun msg e non inserisce nulla nel database.
Codice sorgente - presumibilmente VB.NET |
Private Sub NewBikeCat_button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NewBikeCat_button.Click Dim Bike = NewBike.Text Dim Cat = NewCat.Text Dim Ctrl As String = Bike & Cat Dim InsertinTipologiaBike As DBDatiBiciDataSetTableAdapters.TipologiaBikeTableAdapter = New DBDatiBiciDataSetTableAdapters.TipologiaBikeTableAdapter Dim SelectedItems As IEnumerable(Of String) = _ From riga As DBDatiBiciDataSet.TipologiaBikeRow In Me.DbDatiBiciDataSet.TipologiaBike _ Select riga.Controllo For Each S As String In SelectedItems If Ctrl.Contains(S) Then Try InsertinTipologiaBike.InsertQuery2(Bicicletta, Categoria) MsgBox("Inserimento in database completato", MsgBoxStyle.Information) Me.TipologiaBikeTableAdapter.Fill(Me.DbDatiBiciDataSet.TipologiaBike) Catch ex As Exception MsgBox(ex.Message, MsgBoxStyle.Critical) End Try Else MsgBox("La Bicicletta è già esistente", MsgBoxStyle.Exclamation) End If Next NewBike.Text = "" NewCat.Text = "" End Sub
|
Dove sbaglio questa volta?
Grazie per l'aiuto!
Ultima modifica effettuata da xone2003 il 04/12/2008 alle 19:00 |
|
Gianluca87 (Ex-Member)
Expert
Messaggi: 300
Iscritto: 16/11/2008
|
Ciao,
la colonna che concatena le due colonne precedenti è ridondante pertanto ti suggerisco di eliminarla per ovviare al problema del inserimento nuovo che fallisce a causa del fatto che la combinazione dei due campi esiste già ti consiglio di fare una query di selezione prima dell'inserimento nuovo
|
|
Gianluca87 (Ex-Member)
Expert
Messaggi: 300
Iscritto: 16/11/2008
|
lo schema di funzionamento ottimale dovrebbe essere questo
verifica dati esistenti tramite una select su due colonne
SELECT colonna1,colonna2
FROM tuodatabase
WHERE (colonna1 = textbox1.text AND colonna2 = textbox2.text)
l'esito della query dovrebbe essere una tabella vuota se non esiste quella combinazione quindi ti basta verificare se la tabella di risultati della query non ha elementi ti suggerisco di verificare il numero di righe con un Rows.count
in base all'esito di questa verifica fai la query di inserimento oppure mostri la message box con il messaggio di errore
Ultima modifica effettuata da Gianluca87 il 04/12/2008 alle 19:45 |
|
xone2003 (Normal User)
Rookie
Messaggi: 32
Iscritto: 27/11/2008
|
Temo di non aver capito bene..
Se elimino la colonna "Controllo" che contiene il concatenamento delle altre due, come faccio sul nuovo inserimento a sapere se sono già state inserite le due textbox con le stesse stringhe?
Ho pensato al concatena in una terza colonna per avere un valore che contraddistinguesse l'unicità dell'inserimento.
Una sorta di chiave primaria "unica" per due caselle.
Si può altrimenti gestire l'errore dovuto alla duplicazione di una chiave primaria in modo da darmi la possibilità dopo un msgbox di reinserire i dati erronei?
Ultima modifica effettuata da xone2003 il 04/12/2008 alle 20:00 |
|
xone2003 (Normal User)
Rookie
Messaggi: 32
Iscritto: 27/11/2008
|
Scusa Gianluca,
mi è arrivata la tua risposta in ritardo..
Ultima modifica effettuata da xone2003 il 04/12/2008 alle 20:02 |
|
xone2003 (Normal User)
Rookie
Messaggi: 32
Iscritto: 27/11/2008
|
ne ho provate di tutti i colori ma risultato zero!
non saprei come inserire nel codice rows.count
(è già stato difficile per me fare la query sempre che sia corretta)
manca dove ci sono gli apici la parte del conteggio e l'IF then relativo a cosa fare se >=1
Codice sorgente - presumibilmente VB.NET |
Private Sub NewBikeCat_button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NewBikeCat_button.Click Dim Bici = NewBike.Text Dim Cate = NewCat.Text Dim InsertinTipologiaBike As DBDatiBiciDataSetTableAdapters.TipologiaBikeTableAdapter = New DBDatiBiciDataSetTableAdapters.TipologiaBikeTableAdapter Dim CTRL = From riga As DBDatiBiciDataSet.TipologiaBikeRow In Me.DbDatiBiciDataSet.TipologiaBike _ Select riga.Bicicletta, riga.Categoria Where (Bicicletta = NewBike.Text And Categoria = NewCat.Text) ' ' ' ' ' Try InsertinTipologiaBike.InsertQuery2(Bici, Cate) MsgBox("Inserimento in database completato", MsgBoxStyle.Information) Me.TipologiaBikeTableAdapter.Fill(Me.DbDatiBiciDataSet.TipologiaBike) Catch ex As Exception MsgBox(ex.Message, MsgBoxStyle.Critical) End Try Else MsgBox("La Bicicletta è già esistente", MsgBoxStyle.Exclamation) End If NewBike.Text = "" NewCat.Text = "" End Sub
|
|
|
Il Totem (Admin)
Guru^2
Messaggi: 3635
Iscritto: 24/01/2006
|
Ti traduco solo la query di Gianluca in Linq:
Codice sorgente - presumibilmente C# / VB.NET |
SELECT colonna1,colonna2
FROM tuodatabase
WHERE (colonna1 = textbox1.text AND colonna2 = textbox2.text)
|
Codice sorgente - presumibilmente VB.NET |
Dim Controlli As IEnumerable(Of String) = _ From riga As DBDatiBiciDataSet.TipologiaBikeRow In Me.DbDatiBiciDataSet.TipologiaBike _ Where riga.Bike = NewBike.Text And riga.Categoria = NewCat.Text _ Select riga.Bike & riga.Categoria
|
Se Controlli.Count = 0, non esista la coppia immessa (notare che il controllo è case-insensitive). |
|
Gianluca87 (Ex-Member)
Expert
Messaggi: 300
Iscritto: 16/11/2008
|
hihi preferisco sempre il buon vecchio SQL ;-)
cmq in caso non avessi capito come fare...
prendi un bel pezzo di carta... e butti giù un pò di idee cercando di capire bene quali sono i problemi veri.scomponi il problema in sotto problemi e li risolvi uno alla volta. cercando di capire come mai non funziona e su quale punto stai sbagliando
|
|
xone2003 (Normal User)
Rookie
Messaggi: 32
Iscritto: 27/11/2008
|
Ragazzi sono ancora a ringraziarvi per i preziosi aiuti!!! Ovviamente Grazie a Voi funziona alla grande!
Il mio problema è che Togliendo un uso di access a livello intermedio (tramite ODBC su tabelle gestionali praticavo qry, aggiornamenti e piccoli "programmi" di supporto al gestionale aziendale), non so praticamente niente di linguaggi di programmazione.
A logica ci arrivo facilmente ma purtroppo che mi manca è la base...e cioè come e dove scrivere!
Ad esempio una parte che comprendo è l'uso di funzioni quali i cicli select from where, i for , gli if then else e molti altri...Sapendo con certezza che cosa voglio fare e come arrivarci..
Che mi manca è forse la parte più importante e cioè come e dove scrivere!
Quindi le cose "+ semplici" come l'uso dei vari DIM ed AS ..il ROW, ME, Il binding ecc...
Non saprei e mi dedicherò in questi giorni come portare un risultato di qry in una semplice casella di testo..
Per questo studiando frammenti di codice ed il loro funzionamento riesco a capirne l'utilità.
Praticamente ho iniziato da zero o quasi circa due settimane fa.
Mi scuso per 'l'autobiografia' e Vi ringrazio infinitamente per il prezioso aiuto.
|
|