Jump to content

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


kazzx
 Share

Recommended Posts

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 😉

Link to comment
Share on other 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

Link to comment
Share on other 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.

Link to comment
Share on other 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?

Link to comment
Share on other 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() 
Link to comment
Share on other 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)).

Link to comment
Share on other 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.

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"

Link to comment
Share on other 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.

Link to comment
Share on other 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.

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"

Link to comment
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
 Share

×
×
  • 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.