Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

duduml

problemas com manipulação de dados no PostGreSQL [Resolvido]

Recommended Posts

duduml

Bom dia,

estou presentemente a desenvolver uma aplicação que liga a uma BD PostGreSQL, mas, não estou a conseguir resolver alguns problemas a nível de inserção e selecção de dados...

eu já li e vi alguns tutoriais do jpaulino, e tentei adaptar para a minha situação, mas sem sucesso...

em baixo deixo um dos erros que me aparecem...

2qcox3q.png

alguém me pode ajudar se faz favor?

Desde já, muito obrigado!  ;)

Cumprimentos,


"use windows, você merece!"

Share this post


Link to post
Share on other sites
renafi

À primeira vista, dá-me a entender que estás a enviar valores que não são válidos para os campos da tabela.

Examina o comando em si, e confirma se os valores que estás a enviar são suportados pelo tipo dos campos da tabela. E já agora, não sei até que ponto é que tens de fazer a conversão dos valores.

ex: No parametro @numero, que é um Integer, estás a enviar o conteúdo da textBox...


Oracle Certified Professional - AdministraçãoOracle Certified Professional - Pl/sqlMCPD - Microsoft Certified Professional DeveloperMCTS - Microsoft Certified Technology Specialist

Share this post


Link to post
Share on other sites
duduml

hum....

ok. obrigado. vou analisar tudo então...então como faço para converter os dados?

cumps


"use windows, você merece!"

Share this post


Link to post
Share on other sites
ribeiro55

Primeiro detecta-os.

Confere o tipo de dados das colunas e do que estás a enviar como parâmetros.

Só depois é que decides como e o quê, vais converter.


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Share this post


Link to post
Share on other sites
duduml

bem, só o problema for por causa disto...

command.Parameters.Add("@número", NpgsqlTypes.NpgsqlDbType.Integer).Value = numeroTextBox1.Text

digo que o número é inteiro, mas a textbox retorna um array de caracteres!!!  :angry1:

é devido a isso?? como devo fazer??'


"use windows, você merece!"

Share this post


Link to post
Share on other sites
ribeiro55

Integer.Parse(numeroTextBox1.Text)

Para além disso, eu até me arrepio quando vejo caracteres especiais como o que tens como nome de parâmetro.


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Share this post


Link to post
Share on other sites
ribeiro55

Exactamente isso: número.

Até pode ser que pape, mas não está correcto.


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Share this post


Link to post
Share on other sites
duduml

ok.

Vou trocar então...2 min e estou aqui de novo... 😲


"use windows, você merece!"

Share this post


Link to post
Share on other sites
duduml

eu bem disse...

não era nada disso o problema... 🤔


"use windows, você merece!"

Share this post


Link to post
Share on other sites
duduml

não será disto:

command.Parameters.Add("@numero", NpgsqlTypes.NpgsqlDbType.Integer).Value = Integer.Parse(numeroTextBox1.Text)

NpgsqlTypes.NpgsqlDbType    isto está bem??? fiz por "instinto" pegando no exemlo do jpaulino Gestão de Dados em SQL Server - Parte I...


"use windows, você merece!"

Share this post


Link to post
Share on other sites
ribeiro55

Eu continuo a ver asneira no screenshot.

Estás a mandar texto para Boolean.

Mesma história:

Boolean.Parse()


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Share this post


Link to post
Share on other sites
duduml

tenho assim:

command.Parameters.Add("@numero", NpgsqlTypes.NpgsqlDbType.Integer).Value = Integer.Parse(numeroTextBox1.Text)
        command.Parameters.Add("@nome", NpgsqlTypes.NpgsqlDbType.Varchar).Value = nomeTextBox2.Text
        command.Parameters.Add("@consultar", NpgsqlTypes.NpgsqlDbType.Boolean).Value = Boolean.Parse(consultarCheckBox1.Text)


"use windows, você merece!"

Share this post


Link to post
Share on other sites
ribeiro55

Podes também parametrizar uma query sem fornecer os tipos, o que já evita erros de "instinto".

E agora que vejo melhor, acho que o Add não devolve nada.

Há um overload do Add que não tem datatype. Experimenta parametrizar com:

command.Parameters.Add("@numero",Integer.Parse(numeroTextBox1.Text))

Estou a fazer isto de cabeça. O que está no blog do jpaulino está correcto de certeza e sendo assim experimenta só não fornecer o datatype nos argumentos do Add.

Posso estar a fazer confusão com o método de adicionar parâmetros do meu DataGate, que é o que uso diáriamente :)

EDIT: Quando são checkboxes, queres é a propriedade Checked e não Text.


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Share this post


Link to post
Share on other sites
duduml

pois, mais um erro (estupido) o tal checked....peço desculpa....xD

bem, mas agora ja me da erro diferente...vou experimentar com a consulta parametrizada...

cumps


"use windows, você merece!"

Share this post


Link to post
Share on other sites
duduml

se puser isso:

command.Parameters.Add("@numero",Integer.Parse(numeroTextBox1.Text))

dá-me este warning:

Warning	1	'Public Function Add(parameterName As String, value As Object) As Npgsql.NpgsqlParameter' is obsolete: 'Do not call this method. Use AddWithValue instead.'.	


"use windows, você merece!"

Share this post


Link to post
Share on other sites
ribeiro55

Aí tens a resposta:

"Use AddWithValue instead"


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Share this post


Link to post
Share on other sites
ribeiro55

Mas agora já é erro de síntaxe.

Volta a olhar para o comando SQL com olhos de ver, especialmente ao pé de parêntesis rectos, ao que parece :)

Ou mete aqui o comando para darmos uma olhadela.


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Share this post


Link to post
Share on other sites
duduml

Dim x As Integer = command.ExecuteNonQuery()
        If x < 1 Then
            MessageBox.Show("A operação efectuada não retomou qualquer resultado.")
        End If

a coisa esta-se a compor....se conseguir resolver isto, devo fazer a aplicação toda rápido!

xD


"use windows, você merece!"

Share this post


Link to post
Share on other sites
ribeiro55

Quando digo comando SQL, quero dizer aquilo ao que tu parece que chamas "instrucção".

Se o erro é de síntaxe, queremos ver a query/comando/instrucção e não um ExecuteNonQuery :)


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Share this post


Link to post
Share on other sites
duduml

ups....desculpa...:S eu é que já estou cansado...:S

Dim myConnectionString As String = ("Server=127.0.0.1;Port=5432;User Id=postgres;Password=postgres;Database=controlo;")
        Dim SQL As String = "INSERT INTO Utilizadores([numero], [nome], [consultar], [inserir], [administrar], [codigo]) VALUES (@numero, @nome, @consultar, @inserir, @administrar, @codigo)"

        ' Cria uma nova ligação à base de dados
        Dim connection As New NpgsqlConnection(myConnectionString)

        ' Criação do comando indicando a instrução e a ligação
        Dim command As New NpgsqlCommand(SQL, connection)

        ' Indicação dos parâmetros que serão inseridos
        command.Parameters.AddWithValue("@numero", Integer.Parse(numeroTextBox1.Text))
        command.Parameters.AddWithValue("@nome", nomeTextBox2.Text)
        command.Parameters.AddWithValue("@consultar", consultarCheckBox1.Checked)
        command.Parameters.AddWithValue("@inserir", inserirCheckBox2.Checked)
        command.Parameters.AddWithValue("@administrar", AdministrarCheckBox3.Checked)
        command.Parameters.AddWithValue("@codigo", codigoTextBox3.Text)

        ' Abre a ligação, executa o comando e guarda em "x" o número de registos inseridos
        connection.Open()

        Dim x As Integer = command.ExecuteNonQuery()
        If x < 1 Then
            MessageBox.Show("A operação efectuada não retomou qualquer resultado.")
        End If

        ' Fecha a ligação e limpa as variáveis
        connection.Close()
        connection = Nothing
        command = Nothing


"use windows, você merece!"

Share this post


Link to post
Share on other sites
ribeiro55

Assim de repente, separa o parentesis do Utilizadores

Utilizadores([numero]

Utilizadores ([numero]


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

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

×

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.