none
Gerar ID a partir de outro campo ex.Nome = Bruno ID = BRN RRS feed

  • Pergunta

  • Olá, essa é minha primeira pergunta no fórum!

    Primeiro vou explicar minha situação: Estou a desenvolver um sistema de cadastro de atendimento para um  vereador de minha cidade, mas, por problemas técnicos na Câmara Municipal, tive que fazer um módulo de trabalho Off-line, para ser sincronizado em um banco MySQL na  internet posteriormente.

    Cadastro.MDF LOCAL - Windows Forms - cadastro.sql MySQL INTERNET .

    Possuo duas tabelas: tb_pessoas e tb_pedidos onde na tb_pedidos à uma FK chamada id_pessoa na tb_usuarios PK id_pessoa

    Todo os cadastros são feitos por várias estações em um banco de dados local (Cadastro.mdf) e depois sincronizado com o bando de dados MySQL na internet. Porém, encontrei o seguinte problema:

    Um usuário cadastra a pessoa Fulano de Tal e o SQL Server gera a ID 24 e outro usuário em seu banco de dados local cadastra a pessoa Ciclano Filho do Fulano com a ID 24 pois o auto_increment está só fazendo seu trabalho. Mas, ao sincronizar no banco de dados MySQL o Ciclano eo Fulano ficam com a mesma ID, o que dá um erro ao puxar alguns relatórios que uso no sistema.

    Solução: Criar ID`s a partir do nome do cadastro, Ex. ID FLN NOME Fulano, ID CCLN NOME Ciclano.

    O porém é: como farei isso? Tive essa idéia ao ver em um tutorial um cara usar o ID dessa forma, mas o tutorial ensinava outra coisa e não gerar esses ID`s.

     

    Grato

    sexta-feira, 1 de abril de 2011 20:39

Respostas

  • Bruno,
    seguindo os exemplos que você mostrou, você vai ver que gerar esses IDs que você quer a partir do nome nada mais é que remover as vogais do nome.
    Neste caso, um simples Replace da string pode resolver seu problema, removendo todas as vogais do nome.
    Mas acredito que, em algum momento, você vai cair em um cenário que poderá gerar um ID repetido.
    Por isso o mais recomendado seria utilizar um valor aleatório, como o Malange mostrou, ou utilizar algum dado da pessoa que seja único, como o CPF.
    Espero ter ajudado.
    Gustavo S. Bergamim MCPD - Web Developer 4 Programador Pleno Cast Informática S/A
    segunda-feira, 4 de abril de 2011 11:49
  • Elemina o ID que e gerado automaticamente na sua tabela seria a solucao do seu problema.

    E cria um campo em que o id nao pode ser igual, vais ter de criar codigo baseado em estacoes. Se for estacao um a fazer cadastro adeciona o nome da estacao ou as iniciais ou apenas numero e junto tudo e grava, quando voce gravar tudo nunca tera erros.

    Aqui tem uma ideia: http://madskristensen.net/post/Generate-unique-strings-and-numbers-in-C.aspx

     


    Just Be Humble Malange!
    sexta-feira, 1 de abril de 2011 23:04

Todas as Respostas

  • Elemina o ID que e gerado automaticamente na sua tabela seria a solucao do seu problema.

    E cria um campo em que o id nao pode ser igual, vais ter de criar codigo baseado em estacoes. Se for estacao um a fazer cadastro adeciona o nome da estacao ou as iniciais ou apenas numero e junto tudo e grava, quando voce gravar tudo nunca tera erros.

    Aqui tem uma ideia: http://madskristensen.net/post/Generate-unique-strings-and-numbers-in-C.aspx

     


    Just Be Humble Malange!
    sexta-feira, 1 de abril de 2011 23:04
  •  Public Function CreateRandomPassword(ByVal PasswordLength As Integer) As String
            Dim _allowedChars As String = "abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ0123456789"
            Dim randNum As New Random()
            Dim chars(PasswordLength - 1) As Char
            Dim allowedCharCount As Integer = _allowedChars.Length
            For i As Integer = 0 To PasswordLength - 1
                chars(i) = _allowedChars.Chars(CInt(Fix((_allowedChars.Length) * randNum.NextDouble())))
            Next i
            Return New String(chars)
        End Function
        Private Function GetRandomPassword(ByVal StringType As Integer, ByVal Length As Integer) As String
            Dim FindForm As String = ""
            Select Case StringType  'use Enum
                Case 1
                    FindForm = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
                Case 2
                    FindForm = "0123456789"
                Case 3
                    FindForm = "!@#$%^&*"
            End Select
            Dim rand = New Random()
            Dim randomSeq = Enumerable.Repeat(0, Length).Select(Function(f) FindForm(rand.Next(0, FindForm.Length)))
            Return String.Concat(randomSeq.ToArray)
        End Function
     Private Sub Button12_Click(sender As System.Object, e As System.EventArgs) Handles Button12.Click
            
            MessageBox.Show(CreateRandomPassword(TextBox1.Text))
        End Sub

    Just Be Humble Malange!
    sexta-feira, 1 de abril de 2011 23:08
  • A primeira idéia é boa, adicionar o nome do computador junto ao ID, mas se alguém souber como criar um ID personalizado pelo nome, ainda seria melhor pra mim. Bruno Barbosa ID= BRNBRBS, Fulano de Tal ID=FLNDTL.

    Outra coisa, é que por custume prefiro códigos em C#, de preferência por favor, sou novo na área.

     

    Grato


    Bruno Barbosa - Futuro MSPD
    sábado, 2 de abril de 2011 03:25
  • Achei o tutorial onde mostra o que eu preciso!

    Preciso de uma solução que faça o que é mostrado nesse tutorial http://www.macoratti.net/cshp_3c1.htm
    Não em relação ao desenvolvimento em n-camadas, mas se observar a coluna CustumerID do datagrid verá que o ID foi geradoa partir da coluna CompanyName, como faço isso?
    Se puder me ajudar, agradeceria muito.

    Bruno Barbosa


    Bruno Barbosa - Futuro MSPD
    segunda-feira, 4 de abril de 2011 03:29
  • Bruno,
    seguindo os exemplos que você mostrou, você vai ver que gerar esses IDs que você quer a partir do nome nada mais é que remover as vogais do nome.
    Neste caso, um simples Replace da string pode resolver seu problema, removendo todas as vogais do nome.
    Mas acredito que, em algum momento, você vai cair em um cenário que poderá gerar um ID repetido.
    Por isso o mais recomendado seria utilizar um valor aleatório, como o Malange mostrou, ou utilizar algum dado da pessoa que seja único, como o CPF.
    Espero ter ajudado.
    Gustavo S. Bergamim MCPD - Web Developer 4 Programador Pleno Cast Informática S/A
    segunda-feira, 4 de abril de 2011 11:49
  • Bergamim, realmente poderia chegar uma hora em que geraria um ID duplicado... mas acho que isso dá pra tratar com alguns if, else, try, catch, finally . mas se não fosse pedir demais... teria como colocar algum exemplo de replace até pra ajudar a outros membros da MSDN que precisarem usar uma solução parecida... C#
    Bruno Barbosa - Futuro MSPD
    segunda-feira, 4 de abril de 2011 16:34
  • Tava precisando de uma ideia parecida com essa sua

    mas seria tipo

    Nome = Bruno Barbosa Silva

    gerar um ID BBS

    busca no BD se jah tiver um

    ae ficaria BBS1

    no estilo ID do Registro.br

    alguem tem ideia de como fazer isso?

    Att

    sábado, 14 de maio de 2011 15:59