HAVING DA CHAVE

MARCELOFAZAN 23/07/2010 15:34:39
#348278
pessoal tudo bom

gravo uma chave exemplo 5000-6000-7000-5000
como buscar no MDB se essa chave ja Existe
Sei que existe o Having que posso verificar que já está repitido

preciso gravar primeiro e depois verificar

ou teria como veririfcar antes num select
alguem tem um exemplo


ou mesmo como arrumo esse select

SELECT DISTINCTROW registro.number1 INTO Cadastros_Duplicados
From registro
GROUP BY registro.number1
HAVING Count(registro.number1)>1



Abs
Obrigado
Marcelo Fazan
MSMJUDAS 23/07/2010 15:58:10
#348280
Resposta escolhida
Vc tem que verificar antes.

Sql = [Ô]SELECT COUNT(*) AS TOTAL FROM REGISTRO WHERE REGISTRO.NUMBER1 = [ô][Ô] & TxtNumeroChave.Text & [Ô][ô][Ô]

Recordset.Open Sql, Conexao, adOpenKeySet, adLockReadOnly

If Recordset([Ô]TOTAL[Ô]) > 0 Then
MsGBox [Ô]Chave já existe[Ô], vbCritical, [Ô]Aviso[Ô]
End IF
MARCELOFAZAN 23/07/2010 16:36:25
#348282
Ola amigo obrigado a ajuda
deu certo só que deu um erro os campos na tabela sao numericos

aa = Val(Text1.Text)

Dim sql As String
Dim rs As New ADODB.Recordset

sql = [Ô]insert into registro (number1, number2, number3, number4) [Ô]
sql = sql & [Ô] Values ([ô][Ô] & Text1.Text & [Ô][ô],[ô][Ô] & Text2.Text & [Ô][ô],[ô][Ô] & Text3.Text & [Ô][ô],[ô][Ô] & Text4.Text & [Ô][ô])[Ô]

[ô]grava registro na tabela
conexao.Execute sql

sql = [Ô]SELECT COUNT(*) AS TOTAL FROM REGISTRO WHERE REGISTRO.NUMBER1 = [ô][Ô] & Text1.Text & [Ô][ô][Ô]

rs.Open sql, conexao, adOpenKeyset, adLockReadOnly

If rs([Ô]TOTAL[Ô]) > 0 Then
MsgBox [Ô]Chave já existe[Ô], vbCritical, [Ô]Aviso[Ô]
End If

A mensagem de Erro é
Tipos de dados incompateveis na expressao de criterio
e aponta essa linha rs.Open sql, conexao, adOpenKeyset, adLockReadOnly

OBrigado
Abs
Marcelo Fazan
MSMJUDAS 23/07/2010 16:43:11
#348283
No [ô][Ô] & Text1.Text & [Ô][ô][Ô] , tire as ASPAS SIMPLES.

Outra coisa, vc tem que fazer a verificação ANTES do comando INSERT. Pq senão, vai inserir um novo registro, depois vai verificar que já existe e dar a mensagem de erro.

Coloque tbm um Exit Sub em baixo do MsgBox [Ô]Chave já existe[Ô], vbCritical, [Ô]Aviso[Ô]
MSMJUDAS 23/07/2010 16:46:32
#348284

Dim sql As String
Dim rs As New ADODB.Recordset

sql = [Ô]SELECT COUNT(*) AS TOTAL FROM REGISTRO WHERE REGISTRO.NUMBER1 = [ô][Ô] & Text1.Text & [Ô][ô][Ô]
rs.Open sql, conexao, adOpenKeyset, adLockReadOnly
If rs([Ô]TOTAL[Ô]) > 0 Then
MsgBox [Ô]Chave já existe[Ô], vbCritical, [Ô]Aviso[Ô]
Exit Sub
Else
sql = [Ô]insert into registro (number1, number2, number3, number4) [Ô]
sql = sql & [Ô] Values ([ô][Ô] & Text1.Text & [Ô][ô],[ô][Ô] & Text2.Text & [Ô][ô],[ô][Ô] & Text3.Text & [Ô][ô],[ô][Ô] & Text4.Text & [Ô][ô])[Ô]
[ô]grava registro na tabela
conexao.Execute sql
End If
MSMJUDAS 23/07/2010 16:57:56
#348290
Citação:

:
Vc não pode fazer COUNT no *. Tem que selecionar um campo.



Como não???

Pode sim, ou tbm pode ser COUNT(CLI_CODIGO), COUNT(CLI_NOME), e por aí vai...
MARCELOFAZAN 23/07/2010 17:12:45
#348293
Ola Judas Barros Obrigado as Respostas
Deu certo Aqui
Abraços
Marcelo Fazan

Dim sql As String
Dim rs As New ADODB.Recordset


sql = [Ô]insert into registro (number1, number2, number3, number4) [Ô]
sql = sql & [Ô] Values ([ô][Ô] & Text1.Text & [Ô][ô],[ô][Ô] & Text2.Text & [Ô][ô],[ô][Ô] & Text3.Text & [Ô][ô],[ô][Ô] & Text4.Text & [Ô][ô])[Ô]

[ô]grava registro na tabela
conexao.Execute sql

sql = [Ô]SELECT COUNT(number1) AS TOTAL FROM REGISTRO WHERE REGISTRO.NUMBER1 = [Ô] & Val(Text1.Text) & [Ô][Ô]

rs.Open sql, conexao, adOpenKeyset, adLockReadOnly

If rs([Ô]TOTAL[Ô]) > 1 Then
MsgBox [Ô]Chave já existe[Ô], vbCritical, [Ô]Aviso[Ô]
Text1.Text = [Ô][Ô]
Text2.Text = [Ô][Ô]
Text3.Text = [Ô][Ô]
Text4.Text = [Ô][Ô]
Text1.SetFocus
Else
Unload Me
End If
Tópico encerrado , respostas não são mais permitidas