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

kazzx

[RESOLVIDO]Não permitir enviar para a mesma tabela valores iguais.

17 mensagens neste tópico

Viva,

tenho dois formulários. um faz pesquisas, outro está a 'receber' os valores seleccionados na listbox do formulário de pesquisa.

a minha questão é, como faço para depois da pesquisa e imaginando que aparecem várias pessoas com o mesmo nome, permitir enviar as várias pessoas com o mesmo nome mas não permitir enviar a mesma pessoa duas vezes.

eu já coloquei esta questão aqui no P@P mas não deu resultado. essas pessoas têm um ID, eu a fazer apresentar o ID em vez do nome consigo fazer essa operação de evitar enviar duas vezes a mesma pessoa, mas na listbox aparecem os IDs, e eu queria o nome..

ajudas são bem vindas ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Viva,

tenho dois formulários. um faz pesquisas, outro está a 'receber' os valores seleccionados na listbox do formulário de pesquisa.

a minha questão é, como faço para depois da pesquisa e imaginando que aparecem várias pessoas com o mesmo nome, permitir enviar as várias pessoas com o mesmo nome mas não permitir enviar a mesma pessoa duas vezes.

eu já coloquei esta questão aqui no P@P mas não deu resultado. essas pessoas têm um ID, eu a fazer apresentar o ID em vez do nome consigo fazer essa operação de evitar enviar duas vezes a mesma pessoa, mas na listbox aparecem os IDs, e eu queria o nome..

ajudas são bem vindas ;)

Verificas se o nome em vez do ID

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

não, isso já fiz e não pode ser.

então, imagina que aparecem duas "Anas" depois da consulta.

se eu quiser colocar a primeira Ana duas vezes o programa vai permitir, e isso não quero.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Então ou nao estou a perceber o que queres ou entao é impossivel, claro que vai sempre existir mais que uma Ana na BD mas nesse caso uso entao o ID :S se puderes explica-te melhor..

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

pah,

é assim, tenho um form que faz consultas à BD e apresenta numa listview o nome inserido numa caixa de texto, se existirem vários nomes iguais claro que aparecem esses vários nomes, como se escrever "João" na caixa de texto e na BD existirem vários "João" tem de apresentar esses vários "João" e isso está a fazer correctamente.

agora, eu tenho de seleccionar por exemplo um "João" e ao clicar num botão esse nome é colocado numa outra tabela da BD e por sua vez é apresentado numa listbox de outro form.

agora é assim, não faz sentido colocar duas vezes a mesma pessoa na listbox do outro tal formulário.

mas faz sentido que seja possível colocar na listbox do outro form nomes iguais.

já percebeste?

ou seja, se eu quiser colocar duas vezes o mesmo Manel não pode deixar, mas se quiser colocar outro Manel então que seja possível.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

..agora, eu tenho de seleccionar por exemplo um "João" e ao clicar num botão esse nome é colocado numa outra tabela da BD e por sua vez é apresentado numa listbox de outro form.

Então antes de apresentares na listbox, vais verificar se nessa nova tabela existe o nome, para nao o repetir, se existir avisa, senao insere-o nessa "nova" tabela e coloca-o na listbox do outro form.

É isso?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

é mais ou menos.

basicamente quero poder inserir nomes iguais mas de pessoas diferentes, e não poder inserir da mesma pessoa. xD

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

estou a usar este código para inserir na tabela da BD o nome encontrado

 Try
            Dim conn As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Projecto\GerirFilas\DataBase\DadosFila.mdb"
            Dim SQL As String = "INSERT INTO Espera ([Nome]) values (?)"

            Using ConnectionState As New OleDb.OleDbConnection(conn)

                Dim command As New OleDb.OleDbCommand(SQL, ConnectionState)

                command.Parameters.Add("Nome", OleDb.OleDbType.VarChar).Value = lv1.SelectedItems(0).Text
                ConnectionState.Open()
                txtverifica.Clear()
                txtverifica.Focus()
                btncriarregisto.Enabled = False
                btncoloca.Enabled = False

                Dim x As Integer = command.ExecuteNonQuery()

                If x <> 1 Then

                    Throw New ArgumentException("Não foi possível...")

                End If

                MsgBox("Colocado em espera!", MsgBoxStyle.Information)


            End Using

        Catch ex As Exception

            MsgBox("Já se encontra na fila de espera ", MsgBoxStyle.Information)

        End Try 

e este para fazer apresentar os nomes colocados, isto no outro form..

         Dim conn As New OleDbConnection()
        conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Projecto\GerirFilas\DataBase\DadosFila.mdb"

        Dim cmd As OleDbCommand = conn.CreateCommand
        cmd.CommandText = "Select Nome from Espera"

        btnremoveespera.Enabled = False

        conn.Open()

        lstpessoasespera.Items.Clear()

        Dim leitor As OleDbDataReader = cmd.ExecuteReader()

        Try
            While leitor.Read()
                lstpessoasespera.Items.Add(leitor("Nome"))
            End While

        Catch ex As Exception

        End Try

        conn.Close() 

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

podes simplesmente atribuir dois valores à listbox, o que se vê que será o text e o que fica oculto que será o value, e assim trabalhas com o value em vez do text que vês.

cumps Paulo Silva

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tu numa listbox, podes ter dois valores a o listbox.text ; e o Listbox.value ou item, klk coisa do genero não se de cor, mas pesquisa, e depois fazes a comparação pelo value. em vez do texto que é mostrado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tu numa listbox, podes ter dois valores a o listbox.text ; e o Listbox.value ou item, klk coisa do genero não se de cor, mas pesquisa, e depois fazes a comparação pelo value. em vez do texto que é mostrado.

Sim tem logica, porque pode haver o  Manel Pereira e o Manel Silva com os Id's 1 e 2 respectivamente, e ao comparar pode usar a parte oculta (os id's (values)).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu já disse isto, provavelmente umas 5 vezes, e sempre a ti ;)

Listbox aceita OBJECT.

Tu podes listar instâncias de forms se te apetecer.

Repara no seguinte exemplo, onde adiciono à listbox uma instância da estructura Pessoa:

Public Class Form1

    Public Structure Pessoa
        Public ID As Integer
        Public Nome As String

        Public Overrides Function ToString() As String
            Return Nome
        End Function

    End Structure

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim P As New Pessoa
        P.ID = 1
        P.Nome = "Cocas o sapo"
        ListBox1.Items.Add(P)
    End Sub

    Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
        If Not ListBox1.SelectedItem Is Nothing Then
            Dim P As Pessoa = ListBox1.SelectedItem
            MsgBox("Olá. Sou o " & ListBox1.SelectedItem.ToString & " e o meu ID é o " & P.ID)
        End If
    End Sub

End Class

É uma questão de fazeres uma estructura, ou uma classe com as propriedades que precisas e adicionas à listbox instâncias da estructura, ou classe.

Podes passar todos os valores que te apetecer para lá, e consequentemente, vais ter todos esses valores disponíveis para quando precisares deles.

Aparte: O override ao método ToString, na estructura, serve para que a representação String daquele objecto seja exactamente o que pretendes, neste caso, pretendes mostrar o NOME mas ter também a informação do ID.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

eu fiz umas pequenas adaptações, para ficar a dar à minha maneira.

mas sim, obrigado  : )

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Era mesmo para adaptares. Eu não adivinho o que para aí tens :D

Mas ficou mesmo resolvido?

Senão aborda-se de outra forma, mais fácil talvez.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

tipo,

agora eu defini para aparecer o ID em vez do nome e ao colocar na lista

de espera já consigo fazer o que quero, ou seja, não permitir a mesma

pessoa duas vezes, mas permitir nomes iguais de diferentes pessoas.

o problema é que em vez de aparecer o nome aparece o ID.

não há nenhuma maneira de quando fazer a pesquisa na base de dados,

tipo associar o ID à pessoa?

acho que me fiz entender.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Então percebeste ou não percebeste o código que te meti?

Resolve exactamente isso.

A menos que estejas a usar binds e coisas do género. Aí basta meteres a datasource para o que pretendes, o displaymember para o nome e o valuemember para o ID.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora