Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - VB.NET Controllo Presenza stringa prima di  un inserimento
Forum - C# / VB.NET - VB.NET Controllo Presenza stringa prima di un inserimento

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
xone2003 (Normal User)
Rookie


Messaggi: 32
Iscritto: 27/11/2008

Segnala al moderatore
Postato alle 18:02
Giovedì, 04/12/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

  1. Private Sub NewBikeCat_button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NewBikeCat_button.Click
  2.         Dim Bike = NewBike.Text
  3.         Dim Cat = NewCat.Text
  4.         Dim Ctrl As String = Bike & Cat
  5.         Dim InsertinTipologiaBike As DBDatiBiciDataSetTableAdapters.TipologiaBikeTableAdapter = New DBDatiBiciDataSetTableAdapters.TipologiaBikeTableAdapter
  6.         Dim SelectedItems As IEnumerable(Of String) = _
  7.             From riga As DBDatiBiciDataSet.TipologiaBikeRow In Me.DbDatiBiciDataSet.TipologiaBike _
  8.             Select riga.Controllo
  9.  
  10.         For Each S As String In SelectedItems
  11.             If Ctrl.Contains(S) Then
  12.                 Try
  13.                     InsertinTipologiaBike.InsertQuery2(Bicicletta, Categoria)
  14.                     MsgBox("Inserimento in database completato", MsgBoxStyle.Information)
  15.                     Me.TipologiaBikeTableAdapter.Fill(Me.DbDatiBiciDataSet.TipologiaBike)
  16.                 Catch ex As Exception
  17.                     MsgBox(ex.Message, MsgBoxStyle.Critical)
  18.                 End Try
  19.             Else
  20.                 MsgBox("La Bicicletta è già esistente", MsgBoxStyle.Exclamation)
  21.             End If
  22.         Next
  23.         NewBike.Text = ""
  24.         NewCat.Text = ""
  25.     End Sub



Dove sbaglio questa volta?
Grazie per l'aiuto!:d

Ultima modifica effettuata da xone2003 il 04/12/2008 alle 19:00
PM Quote
Avatar
Gianluca87 (Ex-Member)
Expert


Messaggi: 300
Iscritto: 16/11/2008

Segnala al moderatore
Postato alle 19:36
Giovedì, 04/12/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

PM Quote
Avatar
Gianluca87 (Ex-Member)
Expert


Messaggi: 300
Iscritto: 16/11/2008

Segnala al moderatore
Postato alle 19:43
Giovedì, 04/12/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
PM Quote
Avatar
xone2003 (Normal User)
Rookie


Messaggi: 32
Iscritto: 27/11/2008

Segnala al moderatore
Postato alle 19:55
Giovedì, 04/12/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
PM Quote
Avatar
xone2003 (Normal User)
Rookie


Messaggi: 32
Iscritto: 27/11/2008

Segnala al moderatore
Postato alle 20:01
Giovedì, 04/12/2008
Scusa Gianluca,
mi è arrivata la tua risposta in ritardo..

Ultima modifica effettuata da xone2003 il 04/12/2008 alle 20:02
PM Quote
Avatar
xone2003 (Normal User)
Rookie


Messaggi: 32
Iscritto: 27/11/2008

Segnala al moderatore
Postato alle 22:15
Giovedì, 04/12/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

  1. Private Sub NewBikeCat_button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NewBikeCat_button.Click
  2.         Dim Bici = NewBike.Text
  3.         Dim Cate = NewCat.Text
  4.         Dim InsertinTipologiaBike As DBDatiBiciDataSetTableAdapters.TipologiaBikeTableAdapter = New DBDatiBiciDataSetTableAdapters.TipologiaBikeTableAdapter
  5.         Dim CTRL = From riga As DBDatiBiciDataSet.TipologiaBikeRow In Me.DbDatiBiciDataSet.TipologiaBike _
  6.         Select riga.Bicicletta, riga.Categoria Where (Bicicletta = NewBike.Text And Categoria = NewCat.Text)
  7. '
  8. '
  9. '
  10. '
  11. '
  12.        Try
  13.             InsertinTipologiaBike.InsertQuery2(Bici, Cate)
  14.             MsgBox("Inserimento in database completato", MsgBoxStyle.Information)
  15.             Me.TipologiaBikeTableAdapter.Fill(Me.DbDatiBiciDataSet.TipologiaBike)
  16.         Catch ex As Exception
  17.             MsgBox(ex.Message, MsgBoxStyle.Critical)
  18.         End Try
  19.         Else
  20.         MsgBox("La Bicicletta è già esistente", MsgBoxStyle.Exclamation)
  21.         End If
  22.         NewBike.Text = ""
  23.         NewCat.Text = ""
  24.     End Sub


PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 17:13
Venerdì, 05/12/2008
Ti traduco solo la query di Gianluca in Linq:
Codice sorgente - presumibilmente C# / VB.NET

  1. SELECT colonna1,colonna2
  2. FROM tuodatabase
  3. WHERE (colonna1 = textbox1.text AND colonna2 = textbox2.text)


Codice sorgente - presumibilmente VB.NET

  1. Dim Controlli As IEnumerable(Of String) = _
  2.   From riga As DBDatiBiciDataSet.TipologiaBikeRow In Me.DbDatiBiciDataSet.TipologiaBike _
  3.   Where riga.Bike = NewBike.Text And riga.Categoria = NewCat.Text _
  4.   Select riga.Bike & riga.Categoria


Se Controlli.Count = 0, non esista la coppia immessa (notare che il controllo è case-insensitive).

PM Quote
Avatar
Gianluca87 (Ex-Member)
Expert


Messaggi: 300
Iscritto: 16/11/2008

Segnala al moderatore
Postato alle 20:21
Venerdì, 05/12/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 ;)

PM Quote
Avatar
xone2003 (Normal User)
Rookie


Messaggi: 32
Iscritto: 27/11/2008

Segnala al moderatore
Postato alle 9:49
Sabato, 06/12/2008
Ragazzi sono ancora a ringraziarvi per i preziosi aiuti!!! Ovviamente Grazie a Voi funziona alla grande!
:k::k::k:

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.:asd:

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo