IMPEDIR DUPLICIDADE
ConnectDB
rs.Open [Ô]tblCidade[Ô], db, 3, 3
rs.AddNew
rs(1) = [Ô][Ô] & txtIncCidade.Text
rs.Update
Set rs = Nothing
db.Close: Set db = Nothing
if not rs.eof then
rs.close
msgbox existe
end if
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
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
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?
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
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?
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#.
[Ô]...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:
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
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.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
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.