Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > it.comp.lang.visual-basic > #19053

Re: Popolare caselle combinate

Newsgroups it.comp.lang.visual-basic
Date 2017-06-08 04:32 -0700
References <cd4a6ec0-47d1-47fa-91f4-134fd9e55302@googlegroups.com> <bf0a644e-5e4d-41c0-93fc-b616372c70af@googlegroups.com>
Message-ID <1919bb04-54e5-4eec-9f1d-e4dd7dd59a31@googlegroups.com> (permalink)
Subject Re: Popolare caselle combinate
From Marco75 <marcoporzi75@gmail.com>

Show all headers | View raw


Il giorno giovedì 8 giugno 2017 13:14:21 UTC+2, Luca D ha scritto:
> On Thursday, June 8, 2017 at 9:25:16 AM UTC+2, Marco75 wrote:
> > ora dovrei popolare la cbRicetta prendendo i dati sia da cbMacina che da cbSegmento ma non funziona rendendomi un "Invalid column name (nome dell'item selezionato) in cbSegmento!!
> > 
> > 'Popolo la Combo Ricetta
> >         'CreaTabelle("T_Regolazioni", "Select Ricetta, Macina, Segmento From T_Regolazioni Where Macina=" & cbMacina.Text & "And Segmento=" & cbSegmento.Text & "", cbRicetta)
> >         cbRicetta.DisplayMember = "Ricetta"
> >         cbRicetta.Text = ""
> 
> Così a occhio, hai un problema nella composizione del comando SQL... se "Macina" e "Segmento" sono colonne definite VARCHAR nel database, il modo con cui concateni i parametri dopo "=" può creare ambiguità, perchè il motore non sa se deve interpretare il valore comne letterale o come riferimento ad un altro oggetto nel database.
> Questo in particolare se il valore del combo in quel momento contiene caratteri particolari (.,% ecc.) o per caso parole chiave del dialetto SQL
> 
> Per farla breve: i comandi SQL che indirizzano colonne testo, devono usare il delimitatore '
> 
> "... where Macina='aaaa' and Segmento='bbbb' ..."
> 
> Nota che devi considerare anche il caso in cui il valore stesso contenga uno o più apici singoli, e nel caso raddoppiarli, per creare la sequenza di escape corretta... un grande classico che più o meno tutti hanno da parte nel taschino per queste cose, è una funzioncina tipo
> 
> Public Function DBText(ByVal inputValue as String) As String
>     If inputValue.Contains("'") Then
>         inputValue = inputValue.Replace("'","''")
>     End If
>     Return String.Format("'{0}', inputValue)
> End Function 
> 
> Da usare con 
> 
> Where Macina=" & DBText(cbMacina.Text) & "And Segmento=" & DBText(cbSegmento.Text)

Ciao,
ho provato la tua funzione ed ora nella combo Ricetta mi rende System.Data.DataRowView:

Nella function ho aggiunto " dopo 0}' perchè mi dava errore

Public Function DBText(ByVal inputValue As String) As String
        If inputValue.Contains("'") Then
            inputValue = inputValue.Replace("'", "''")
        End If
        Return String.Format("'{0}'", inputValue)

    End Function

Private Sub cbRicetta_DropDown(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbRicetta.DropDown

CreaTabelle("T_Regolazioni", "Select Ricetta, Macina, Segmento From T_Regolazioni Where Macina=" & DBText(cbMacina.Text) & "And Segmento=" & DBText(cbSegmento.Text) & "", cbRicetta)

End sub

Back to it.comp.lang.visual-basic | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

Popolare caselle combinate Marco75 <marcoporzi75@gmail.com> - 2017-06-08 00:25 -0700
  Re: Popolare caselle combinate Luca D <antaniserse@yahoo.it> - 2017-06-08 04:14 -0700
    Re: Popolare caselle combinate Marco75 <marcoporzi75@gmail.com> - 2017-06-08 04:32 -0700
      Re: Popolare caselle combinate Luca D <antaniserse@yahoo.it> - 2017-06-08 16:09 -0700
        Re: Popolare caselle combinate Marco75 <marcoporzi75@gmail.com> - 2017-06-08 23:14 -0700

csiph-web