Usuário com melhor resposta
Gerar ID a partir de outro campo ex.Nome = Bruno ID = BRN

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
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- Sugerido como Resposta Marcus Paulo Couto segunda-feira, 4 de abril de 2011 12:31
- Marcado como Resposta Bruno Barbosa PVH segunda-feira, 4 de abril de 2011 16:31
-
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!- Sugerido como Resposta Marcus Paulo Couto segunda-feira, 4 de abril de 2011 12:31
- Marcado como Resposta Bruno Barbosa PVH segunda-feira, 4 de abril de 2011 16:31
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!- Sugerido como Resposta Marcus Paulo Couto segunda-feira, 4 de abril de 2011 12:31
- Marcado como Resposta Bruno Barbosa PVH segunda-feira, 4 de abril de 2011 16:31
-
Public Function CreateRandomPassword(ByVal PasswordLength As Integer) As StringDim _allowedChars As String = "abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ0123456789"Dim randNum As New Random()Dim chars(PasswordLength - 1) As CharDim allowedCharCount As Integer = _allowedChars.LengthFor i As Integer = 0 To PasswordLength - 1chars(i) = _allowedChars.Chars(CInt(Fix((_allowedChars.Length) * randNum.NextDouble())))Next iReturn New String(chars)End FunctionPrivate Function GetRandomPassword(ByVal StringType As Integer, ByVal Length As Integer) As StringDim FindForm As String = ""Select Case StringType 'use EnumCase 1FindForm = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"Case 2FindForm = "0123456789"Case 3FindForm = "!@#$%^&*"End SelectDim rand = New Random()Dim randomSeq = Enumerable.Repeat(0, Length).Select(Function(f) FindForm(rand.Next(0, FindForm.Length)))Return String.Concat(randomSeq.ToArray)End FunctionPrivate Sub Button12_Click(sender As System.Object, e As System.EventArgs) Handles Button12.ClickMessageBox.Show(CreateRandomPassword(TextBox1.Text))End Sub
Just Be Humble Malange! -
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 -
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 -
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- Sugerido como Resposta Marcus Paulo Couto segunda-feira, 4 de abril de 2011 12:31
- Marcado como Resposta Bruno Barbosa PVH segunda-feira, 4 de abril de 2011 16:31
-
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 -