VERIFICACAO DE REGISTRO NO BD

USUARIO.EXCLUIDOS 01/04/2005 10:22:44
#76129
Fala pessoal do fórum, td blz?

Espero q sim...bem, esta minha dúvida diz respeito ao seguinte: tenho dois DBGrid nos quais eu me baseio para uma tela de cadastr de romaneio. Ao dar um duplo clique em um dos registros do primeiro DBGrid, as informações dle, mais os dados de campos preenchidos fora do grid (textboxes) são inseridos no segundo DBGrid, q trabalha como uma tabela temporária. Eis o código:

Private Sub DBGrid1_DblClick()
On Error GoTo vError
DBGrid1.Columns(5) = txtRoman.Text
DBGrid1.Columns(3) = "N"

Set TB = db.OpenRecordset("select * from TBEFrm003_2")
TB.AddNew
TB("t2_text1") = txtRoman.Text
TB("t2_text2") = Data1.Recordset.Fields("controle")
TB("t2_text3") = Data1.Recordset.Fields("data")
TB("t2_text4") = Data1.Recordset.Fields("nomeclient")
TB("t2_text5") = "N"
TB("t2_text6") = Data1.Recordset.Fields("vendedor")
TB("t2_text7") = DTPicker1.Value
TB("t2_text8") = CDate(txtHr_entrega.Text)
TB("t2_text9") = txtTransport.Text
TB("t2_text10") = Data1.Recordset.Fields("tot_pro")
TB.Update

Data2.DatabaseName = varDADOS & "\bd001.mdb"
Data2.RecordSource = "select * from TBEFrm003_2"
Data2.Refresh

DTPicker1.Value = Date
DBGrid1.SetFocus

vError:
Select Case Err.Number
Case 0
Case 13
MsgBox "Um dos campos está em branco! Favor preenchê-los e tentar novamente esta operação.", vbCritical, "Sadin"
Case Else
MsgBox Me.Name & ": " & Err.Description, , Err.Number
End Select
End Sub


Porém, eu queria adaptar esta rotina para que o usuário não pudesse incluir duas vezes o mesmo registro...tipo, se já estiver incluido o registro com o número de controle "900384", quando o usuário der um duplo clique novamente neste msm registro no primeiro dbgrid, uma mensagem de erro será jogada!

Por favor, me ajudem, galera!
valeus!

J0k3rm4n[S97]
USUARIO.EXCLUIDOS 01/04/2005 10:30:28
#76132
Resposta escolhida
Antes de INCLUIR o Registro, Faça uma PESQUISA (Find) para ver Se já EXISTE o REGISTRO...
Ou (o campo onde se encontra o dado 900384 tem de ser chaveprimária...)
Veja qual o NÃÅ¡MERO do ERRO que é GERADO.. quando o INDICE é DUPLICADO...
USUARIO.EXCLUIDOS 01/04/2005 13:45:42
#76170
Valeu Germanir!

Mas caso eu trabalhasse com o Find, como deveria organizar minha rotina de programação? Deveria usar o FindFirst?
USUARIO.EXCLUIDOS 01/04/2005 14:02:39
#76176
o metodo find é para ADO e o findfirst é para o DAO
private sub checaregistro
ado.recordset.movefirst 'move o registro para a primeira posição, obrigatorio
ado.recordset.find "campo = " & codigoapesquisar 'para campo do tipo numerico
ado.recordset.find "campo like '" & codigoapesquisar & "'" 'para campo tipo texto
if ado.recordset.eof = true them
'após utilizar o find ele percorre todo o recordset e caso não ache nada com o criterio
'especificado ele vai para EOF (End Of File)
msgbox "registro nao encontrado"
else
msgbox "registro encontrado"
end if
a rotina acima é para checar em um determinado numero de registros, se tem algum com o codigo especificado na consulta( ou seja, sua tabela esta aberta pelo ADO com varios registros dentro dela)

caso a tabela esteja fechada,( você carregou os dados da tabela e a fechou em seguida) use um select e depois verifique se tem mais de 0 recordset

private sub checaregistro
ado.recordsource = "Select * from tabela where campo = " & codigoapesquisar
'ou
ado.recordsource = "select * from tabela where campo like '" & codigoapesquisar & "'"
ado.refresh
if ado.recordset.recordcount > 0 them 'se tiver mais do que 0 recordset encontrados com o criterio
msgbox "codigo encontrado"
else
msgbox "codigo nao encontrado
end if
ado.close
end sub
USUARIO.EXCLUIDOS 01/04/2005 14:29:45
#76185
Valeu, William!!!

E como deveria proceder se eu estiver usando o DAO, ao invés do ADO?
Tópico encerrado , respostas não são mais permitidas