Jump to content
Chaveca

Passar o valor a Nulo

Recommended Posts

Chaveca

Boas a todos,

Eu estou a tentar passar os valores para uma base de dados de sql server, mas o problema é que quando eu passo o valor para a função ele diz me que não é possivel converter o valor "" para integer. Eu ja fix uma função para atrribuir nothing ao valor das txtboxes e ate, passei o valor das textbox para variaveis antes de as passar como parametros. A questão é... Como torno os valores ""  em NUL para que não haja conflitos na Base de dados, mas de maneira a que não tenha o erro de conversão para receber os valores.

Para passar os parametros

        PorNulo()
        Dim nif As Integer = TxtNIF.Text
        Dim mecanografico As Integer = CInt(TxtMecanografico.Text)
        Dim social As Integer = TxtSeg_Social.Text
        Dim telefone As Integer = TxtTelefone.Text


        If novo = True Then

            Funcionario.InserirFuncionario(TxtNome.Text, nif, telefone, social, mecanografico, TxtConsorcio.Text, TxtCod_Consorsio.Text, TxtID.Text, TxtMecanografico.Text, ComboTipo.SelectedValue, Check_GEREX.Checked, CheckTrans.Checked, CheckDigital.Checked, CheckCE.Checked, CheckEG.Checked, CheckRep.Checked, TxtARTT.Text, ComboEmpreiteiro.SelectedValue)

end if

Para meter os campos vazios a NULL:

 Sub PorNulo()
        If TxtARTT.Text = "" Then
            TxtARTT.Text = Nothing
        End If
        If TxtMecanografico.Text = "" Then
            TxtMecanografico.Text = Nothing
        End If
        If TxtNIF.Text = "" Then
            TxtNIF = Nothing
        End If
        If TxtSeg_Social.Text = "" Then
            TxtSeg_Social.Text = Nothing
        End If
        If TxtTelefone.Text = "" Then
            TxtTelefone.Text = Nothing
        End If
    End Sub


"Há 10 tipos de pessoas, as que sabem binário e as que não...""Run DOS, Run!"

Share this post


Link to post
Share on other sites
Caça

Coloca assim

        If TxtARTT.Text = "" Then
            TxtARTT.Text = DBNull.Value 
        End If


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
Chaveca

"Value of type "BNull" cannot be converted to string"

:thumbsup:


"Há 10 tipos de pessoas, as que sabem binário e as que não...""Run DOS, Run!"

Share this post


Link to post
Share on other sites
Caça

Pois, já adivinhava.

Não podes fazer dessa maneira porque ao dizeres que a propriedade text da textbox é Null, ele automaticamente converte para string, dando esse erro


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
Chaveca

Então como vou fazer? É que eu podia passar o valor como zero, mas isso eu não quero, eu quero os valores gravados como null


"Há 10 tipos de pessoas, as que sabem binário e as que não...""Run DOS, Run!"

Share this post


Link to post
Share on other sites
Caça

Também podes passar como NULL, ou seja

        If TxtARTT.Text = "" Then
            TxtARTT.Text = "NULL"
        End If

Isto depende da maneira que estás a fazer em "InserirFuncionario", caso contrario terias de usar variáveis


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
bioshock

Atribuis o valor "NULL". Quando fizeres o SELECT apanhas os valores "NULL".

Para inserir/actualizar:

If Textbox1.Text = Empty.String Then
Command.Parameters.Add("@Artigo", VarChar).Value = "NULL"
End If

Share this post


Link to post
Share on other sites
Chaveca

Dessa maneira (suponho) que vá dar erro porque os parametros são integer, e na base de dados o tipo de parametro também é Int

Public Shared Sub InserirFuncionario(ByVal nome As String, ByVal NIF As Integer, ByVal telefone As Integer, ByVal n_seguranca_social As Int64, ByVal morada As String, ByVal consorcio As String, ByVal cod_consorcio As Int16, ByVal identificacao As String, ByVal num_mecanografico As Int64, ByVal tipo As Char, ByVal Gerex As Boolean, ByVal trans As Boolean, ByVal digital As Boolean, ByVal ce As Boolean, ByVal eg As Boolean, ByVal rep As Boolean, ByVal acesso As String, ByVal id_empreiteiro As Integer)
        Dim ap As New ArrayList

        ap.Add(CriarParametros("Nome", SqlDbType.NVarChar, nome))
        ap.Add(CriarParametros("NIF", SqlDbType.Int, NIF))
        ap.Add(CriarParametros("Num_Telefone", SqlDbType.Int, telefone))
        ap.Add(CriarParametros("Num_Seguranca_Social", SqlDbType.BigInt, n_seguranca_social))
        ap.Add(CriarParametros("Morada", SqlDbType.VarChar, morada))
        ap.Add(CriarParametros("Consorcio", SqlDbType.Char, consorcio))
        ap.Add(CriarParametros("Cod_Consorcio", SqlDbType.TinyInt, cod_consorcio))
        ap.Add(CriarParametros("BI_CC_Passaporte", SqlDbType.NChar, identificacao))
        ap.Add(CriarParametros("Num_Mecanografico", SqlDbType.BigInt, num_mecanografico))
        ap.Add(CriarParametros("Tipo_Trabalho", SqlDbType.Char, tipo))
        ap.Add(CriarParametros("GEREX_IN", SqlDbType.Bit, Gerex))
        ap.Add(CriarParametros("Trans", SqlDbType.Bit, trans))
        ap.Add(CriarParametros("Digital", SqlDbType.Bit, digital))
        ap.Add(CriarParametros("CE", SqlDbType.Bit, ce))
        ap.Add(CriarParametros("EG", SqlDbType.Bit, eg))
        ap.Add(CriarParametros("Rep", SqlDbType.Bit, rep))
        ap.Add(CriarParametros("Acesso_ARTT", SqlDbType.NChar, acesso))
        ap.Add(CriarParametros("ID_Empreiteiro", SqlDbType.Int, id_empreiteiro))

        ExecuteNonQuery("Insert into Funcionario(Nome, NIF, Num_Telefone, Num_Seguranca_Social, Morada, Consorcio, Cod_Consorcio, BI_CC_Passaporte, Num_Mecanografico, Tipo_Trabalho, GEREX_IN, Trans, Digital, CE, EG, Rep, Acesso_ARTT, ID_Empreiteiro) values('" & nome & "','" & NIF & "','" & telefone & "','" & n_seguranca_social & "','" & morada & "','" & consorcio & "','" & cod_consorcio & "','" & identificacao & "','" & num_mecanografico & "','" & tipo & "','" & Gerex & "','" & trans & "','" & digital & "','" & ce & "','" & eg & "','" & rep & "','" & acesso & "','" & id_empreiteiro & "')", ap)

    End Sub

Eu adiciono os parametros dessa maneira atravez de uma BLL (uma camada)


"Há 10 tipos de pessoas, as que sabem binário e as que não...""Run DOS, Run!"

Share this post


Link to post
Share on other sites
Chaveca

Mas isso não grava na base de dados o valor 0?


"Há 10 tipos de pessoas, as que sabem binário e as que não...""Run DOS, Run!"

Share this post


Link to post
Share on other sites
bioshock

E qual é o problema? Existe algum artigo com o valor 0?

No minímo existe 01.

Share this post


Link to post
Share on other sites
Chaveca

Não, mas depois a visualizar os funcionários, nas informações tipo numero de telefone etc , em vez de aparecer o campo em branco aparece um 0....


"Há 10 tipos de pessoas, as que sabem binário e as que não...""Run DOS, Run!"

Share this post


Link to post
Share on other sites
Caça

Podes sempre alterar os Integers a permitir valores nulos

Dim Variavel As Nullable(Of Integer)


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
bioshock

Relativamente a isso, já te havia dito:

(...) Quando fizeres o SELECT apanhas os valores "NULL".

Neste caso 0.

Share this post


Link to post
Share on other sites
Chaveca

Boas de novo,

então eu fiz uma verificação se o valor era 0 e tentei o passar os valores como nothing e dá me um erro a dizer que o valor que a querry espera um parametro que não lhe foi dado.

http://img845.imageshack.us/img845/2407/ergert.png

o que eu adicionei foi

 Public Shared Sub InserirFuncionario(ByVal nome As String, ByVal NIF As Nullable(Of Integer), ByVal telefone As Nullable(Of Integer), ByVal n_seguranca_social As Nullable(Of Integer), ByVal morada As String, ByVal consorcio As String, ByVal cod_consorcio As Int16, ByVal identificacao As String, ByVal num_mecanografico As Nullable(Of Integer), ByVal tipo As Char, ByVal Gerex As Boolean, ByVal trans As Boolean, ByVal digital As Boolean, ByVal ce As Boolean, ByVal eg As Boolean, ByVal rep As Boolean, ByVal acesso As String, ByVal id_empreiteiro As Integer)
        If NIF = 0 Then
            NIF = Nothing
        End If
        If telefone = 0 Then
            telefone = Nothing
        End If
        If n_seguranca_social = 0 Then
            n_seguranca_social = Nothing
        End If
        If num_mecanografico = 0 Then
            num_mecanografico = Nothing
        End If
 

No inicio da função


"Há 10 tipos de pessoas, as que sabem binário e as que não...""Run DOS, Run!"

Share this post


Link to post
Share on other sites
Caça

Altera a propriedade IsNullable para true


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
Chaveca

No form? E que na base de dados tenho aquilo com allow nulls


"Há 10 tipos de pessoas, as que sabem binário e as que não...""Run DOS, Run!"

Share this post


Link to post
Share on other sites
Chaveca

Public Shared Sub InserirFuncionario(ByVal nome As String, ByVal NIF As Nullable(Of Integer), ByVal telefone As Nullable(Of Integer), ByVal n_seguranca_social As Nullable(Of Integer), ByVal morada As String, ByVal consorcio As String, ByVal cod_consorcio As Int16, ByVal identificacao As String, ByVal num_mecanografico As Nullable(Of Integer), ByVal tipo As Char, ByVal Gerex As Boolean, ByVal trans As Boolean, ByVal digital As Boolean, ByVal ce As Boolean, ByVal eg As Boolean, ByVal rep As Boolean, ByVal acesso As String, ByVal id_empreiteiro As Integer)

Eu faço isso aqui


"Há 10 tipos de pessoas, as que sabem binário e as que não...""Run DOS, Run!"

Share this post


Link to post
Share on other sites
Caça

Da mesma maneira que colocas o valor no parâmetro, dizes também para permitir valores nulos


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
Chaveca

Ola de novo, e bom inicio de semana,

peço desculpa pela minha ignorância mas não estou a ver onde alterar...

ap.Add(CriarParametros("@Nome", SqlDbType.NVarChar, nome))

É aí?


"Há 10 tipos de pessoas, as que sabem binário e as que não...""Run DOS, Run!"

Share this post


Link to post
Share on other sites
Caça

Não, é dentro do "CriarParametros", penso eu.. Não sei onde é que estás a adicionar os parâmetros


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
Chaveca
("@Nome", SqlDbType.NVarChar, nome)

Isto é o parametro... Se calhar eu não estou a entender o teu português  😳, o que queres dizer com parametro? 😳


"Há 10 tipos de pessoas, as que sabem binário e as que não...""Run DOS, Run!"

Share this post


Link to post
Share on other sites
Caça

Supostamente em algum sitio tens isto

Cm.Parameters.Add("@Campo", SqlDbType.VarChar).Value = "Valor"

Tambem tens de colocar isto

Cm.Parameters(0).IsNullable = True 

onde o 0 é o número do parâmetro


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
FabricioSilva

Mas só uma pergunta amigo, tu no SQL, selecionaste a opção que permite receberes valores nulos?

Senão até podes tar a fazer correcto, e o erro estar ai...


"A dúvida é o princípio da sabedoria"

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.