IMPEDIR DUPLICIDADE

MARIOANDRADE 14/02/2014 23:46:30
#434816
Uso o código abaixo para cadastrar as cidades, como faço para exibir uma mensagem caso a cidade que eu queira cadastrar ja exista no banco de dados?

ConnectDB
rs.Open [Ô]tblCidade[Ô], db, 3, 3

rs.AddNew
rs(1) = [Ô][Ô] & txtIncCidade.Text

rs.Update
Set rs = Nothing
db.Close: Set db = Nothing
NILSONTRES 15/02/2014 00:04:16
#434817
rs.Open [Ô]Select Cidade From tblCidade Where Cidade=[ô][Ô] & trim(txtIncCidade.Text) & [Ô][ô][Ô], db, 3, 3
if not rs.eof then
rs.close
msgbox existe
end if
MARIOANDRADE 15/02/2014 00:26:33
#434818
Citação:

:
rs.Open [Ô]Select Cidade From tblCidade Where Cidade=[ô][Ô] & trim(txtIncCidade.Text) & [Ô][ô][Ô], db, 3, 3
if not rs.eof then
rs.close
msgbox existe
end if



Nilson, funcionou, agora o problema é quando a cidade não existir no BD e eu queira cadastrar, tentei esse código mas ta com error, hora diz que a operação não é permitida quando o banco de dados ta aberto, quando mudo algo diz que o banco de dados está fechado, dá uma mãozinha aqui:

 ConnectDB
rs.Open [Ô]Select Cidade From tblCidade Where Cidade=[ô][Ô] & VBA.Trim(txtIncCidade.Text) & [Ô][ô][Ô], db, 3, 3
If Not rs.EOF Then
rs.Close
Set rs = Nothing
db.Close: Set db = Nothing

MsgBox [Ô]A cidade que está tentando cadastrar ja consta no banco de dados[Ô], vbInformation, [Ô]Mário Andrade - Soluções para sua empresa![Ô]
cmbCidade.Text = txtIncCidade.Text
Exit Sub

Else

[ô]rs.Open [Ô]tblCidade[Ô], db, 3, 3 <<< aqui hora eu comento hora deixo normal mas dá erro de todo geito
rs.AddNew
rs(1) = [Ô][Ô] & txtIncCidade.Text

rs.Update
Set rs = Nothing
db.Close: Set db = Nothing
End if

NILSONTRES 15/02/2014 00:48:26
#434819
Resposta escolhida
é vb ou vba ?
Da forma que vc trabalho deve ser com DAO, não é ?
Ai vc tem que fechar o recordset mesmo não existindo registro no banco igual, pois a primeira seleção é uma consulta.
então mesmo após o else
rs.Close
Set rs = Nothing
não precisa fechar o bd só o recordset

MARIOANDRADE 15/02/2014 00:58:19
#434820
Citação:

:
é vb ou vba ?
Da forma que vc trabalho deve ser com DAO, não é ?
Ai vc tem que fechar o recordset mesmo não existindo registro no banco igual, pois a primeira seleção é uma consulta.
então mesmo após o else
rs.Close
Set rs = Nothing
não precisa fechar o bd só o recordset



é VB6 mas tenho que usar o [Ô]VBA.Trim[Ô] porque se usar só o [Ô]Trim[Ô] diz que a biblioteca não foi encontrada, isso vale para comandos como [Ô]Ucase[Ô] dentre outros, mas vou me virando aqui, vou tentar amanha pois já está um pouco tarde, tira só mais uma dúvida, esse comando [Ô]Trim[Ô] faz o que mesmo?
NILSONTRES 15/02/2014 01:08:34
#434821
Não deveria dar erro, usei muito assim no vb6, ele tira os espaços entes e após o s caracteres
Mas só uma dica se vc pretende comercializar, ou prosseguir na profissão aconselho trabalhar pelo menos com ADO no vb6, isso se for continuar no vb6, mas aconselho migrar para .net, logo não tera suporte nos OS (Windows), e outra, saia do access, Mysql é uma boa dica, só um conselho de quem já apanhou por mais de 11 anos.

Boa sorte
MARIOANDRADE 15/02/2014 11:36:43
#434828
Citação:

:
Não deveria dar erro, usei muito assim no vb6, ele tira os espaços entes e após o s caracteres
Mas só uma dica se vc pretende comercializar, ou prosseguir na profissão aconselho trabalhar pelo menos com ADO no vb6, isso se for continuar no vb6, mas aconselho migrar para .net, logo não tera suporte nos OS (Windows), e outra, saia do access, Mysql é uma boa dica, só um conselho de quem já apanhou por mais de 11 anos.

Boa sorte



Nilson,
agradeço muito mesmo a sua boa vontade em ajudar e o seu conselho, recentemente fiz um post em que você contribuiu com sua opinião sobre sair do VB6, porém eu preciso saber qual dessas versões é a mais parecida com VB6, pois eu terei que aprender tudo novamente, Visual Studio é o mesmo .net? é tanta coisa que fico com medo de ter dificuldades pois o meu tempo pra estudar é pouquíssimo, e fora o tempo que demanda pra criar todo um programa.

O que você me sugere para que eu tenha menos dificuldade possível?
NILSONTRES 15/02/2014 12:27:55
#434830
Citação:

Visual Studio é o mesmo .net


Sim, na verdade é a plataforma .net Framework vc pode abrir o visual studio e programar tanto em vb quanto em c# asp.net

Veja esse link

O mais parecido com o vb6 é o vb.net obviamente, agora depende quais são suas intenções, se trabalhar por conta ou ir busca o mercado de trabalho, se for mercado de trabalho de prioridade ao c#.
PROFESSOR 15/02/2014 16:54:13
#434834
[Ô]...exibir uma mensagem caso a cidade que eu queira cadastrar ja exista no banco de dados...[Ô]


A questão é simples, mas remete á um problema bastante antigo e comum: Trata-se da divisão de responsabilidades. Ou melhor dizendo, da [Ô]confusão[Ô] de responsabilidades, uma das orígens da POG, que a maioria aqui já conhece.

Formulários de entrada de dados devem se restringir apenas ás funcionalidades que lhe cabem, ou seja:
  • Receber do usuário as informações;
  • Validar essas informações;
  • Apenas quando estejam em ordem, enviar as informações sob a forma de requisição ao serviço de dados, que então se encarrega de processar a operação, seja ela seleção, inclusão, alteração ou exclusão;
  • Finalmente, receber do serviço de dados o resultado da operação solicitada e mostrar esse resultado ao usuário.

    Em outras palavras, dados que não pertençam ao registro em edição não são de responsabilidade desses formulários, mas sim do serviço de dados em questão.

    No caso de ser necessário impedir a duplicidade de registros para um ou mais campos (ou colunas), o formulário nada tem á ver com isso, mas sim o serviço de dados. Para esse fim, utiliza-se a criação de um índice exclusivo (ou mais de um) sobre o(s) campo(s) em questão. Ao fazer isso, o próprio serviço de dados impede a operação e ainda retorna a informação de tentativa de inclusão em duplicidade ao aplicativo que tenha enviado a requisição. Ao formulário de entrada cabe, portanto, tratar a resposta do serviço de dados á requisição.

    Não estou dizendo que esse seu caso seja exatamente a mesma situação, mas sem dúvidas está relacionado com uma cultura
  • [Ô]meio[Ô] errada (algo como meio buraco), que se consolidou em meados dos anos 90.

    Veja: Há algumas décadas atrás, quando ainda se usava a DAO, muitos programadores (e mesmo analistas) se preocupavam de forma completamente insana com a [Ô]necessidade[Ô] de manter os códigos gerados pelos campos de autonumeração sempre [Ô]em ordem[Ô] (leia-se sem [Ô]buracos[Ô], ou seja, mantendo uma numeração sequencial sem falhas), o que era na época e ainda hoje é uma gigantesca besteira. E foi mais ou menos nessa mesma época em que começou á surgir a [Ô]cultura[Ô] de o formulário se intrometer no serviço de dados para fazer um papel que não lhe cabia.

    [Ô]Ah, mas eu uso o campo de auto-incremento como número da Ordem de Serviço e não quero ter esses furos![Ô]. Escutei muito essa conversa. Papo furado. A questão é que a lógica da Numeração de Documentos é totalmente distinta daquela envolvida pela Autonumeração de Registros. Essa última é uma segurança para identificar de forma unívoca um registro, enquanto que a numeração de documentos pode ter de respeitar regras comerciais, fiscais ou até regras específicas de cada empresa. Assim, o argumento de não querer [Ô]furos[Ô] na seqüência de autonumeração é apenas uma desculpa para não ter de fazer as rotinas adequadas para a numeração de documentos, por exemplo.

    Novamente, não estou dizendo, de forma alguma, que esse é o seu caso. Só achei que seria relevante contar como essa cultura do [Ô]Formulário Faz Tudo[Ô] nasceu e veio evoluindo.

    Em resumo, a cultura do [Ô]Formulário Faz Tudo[Ô] é parte - aliás fundamental - da POG, e dessa forma, é sempre bom [Ô]descolar[Ô] dela o máximo possível.

    Para resumir, crie um índice exclusivo em seu serviço de dados, e não ocorrerão mais duplicidades.

    Sobre
    [Ô],,,aprender tudo novamente,,,[Ô]
    , desculpo-me por me intrometer nessa questão sem ter sido chamado ao assunto, mas não acho que você vá [Ô]conseguir escapar[Ô] desse destino, pois ainda que a linguagem VB.Net tenha enorme similaridade com o VB6, não se trata mais de aprender a linguagem, mas sim de compreender toda uma série de [Ô]tecnologias[Ô] (leia-se bibliotecas ou frameworks) bastante distintas, tais como a Entity Framework, a ADO.Net, o jQuery e outras tantas. E, nesse sentido, comece o quanto antes, e, sem esquecer do VB, claro, dê mais atenção do que nunca ao seu [Ô]vocabulário[Ô] javascript.
    MARIOANDRADE 15/02/2014 23:27:54
    #434853
    Para resumir, crie um índice exclusivo em seu serviço de dados, e não ocorrerão mais duplicidades.

    Professor, obrigado por tudo, mas eu até tinha pensado nisso também, o problema é que quando acontece a dupicidade o programa não executa mais.



    Tentei um tratamento de erro mas não resolveu:
    ConnectDB
    On Error GoTo Erro
    rs.Open [Ô]tblProf[Ô], db, 3, 3
    rs.AddNew
    rs(1) = [Ô][Ô] & txtIncProf.Text
    rs.Update
    Set rs = Nothing
    db.Close: Set db = Nothing

    ConnectDB
    rs.Open [Ô]Select * from tblProf order by PROFISSAO[Ô], db, 3, 3
    Do Until rs.EOF
    cmbProf.AddItem [Ô][Ô] & rs!PROFISSAO
    cmbAProf.AddItem [Ô][Ô] & rs!PROFISSAO
    cmbVProf.AddItem [Ô][Ô] & rs!PROFISSAO
    rs.MoveNext
    Loop
    Set rs = Nothing
    db.Close: Set db = Nothing

    Erro: MsgBox [Ô]Esta profissão já está cadastrada no banco de dados![Ô]
    Set rs = Nothing
    db.Close: Set db = Nothing
    Exit Sub
    MARIOANDRADE 15/02/2014 23:38:08
    #434855
    Veja esse link [/url]

    O

    Valeu pelo grande incentivo, tenho que tomar minhas providencias urgentes, o bom é saber que tem pessoas como você que estão dispostas a ajudar.
    Página 1 de 2 [19 registro(s)]
    Tópico encerrado , respostas não são mais permitidas