no redundancia en registro de BD en VB

Live_Shit
10 de Septiembre del 2005
Hola amigos, disculpen, traigo una dudilla que me esta deteniendo en un proyecto, se que es sencilla pero olvide la respuesta... estoy haciendo un manejador de base de datos, pero al momento de agregar un nuevo registro debo consultar si uno de los campos ya estan en la BD para no permitir que se repitan, pero no me acepta este codigo...

co = Chr(34)
re = Text2.Text
cr = "rfc=" & co & re & co
Data1.Recordset.FindFirst cr
b = True
If Data1.Recordset.NoMatch Then
b = True
Else
b = False
End If
Select Case b
Case True
Data1.Recordset.Update
MsgBox ("RFC no encontrado, ha sido agregado")
Case Else
MsgBox ("El RFC ya existe")
End Select

no me esta dejando usar el Update dentro de una condicion, ni en case ni en if, que es lo que uso para validar si ya existe, me pueden ayudar? como lo soluciono?

Aldo
10 de Septiembre del 2005
No veo donde le dices a tu recordset cuales son los datos a agregar..

mvallejos
10 de Septiembre del 2005
El recordset de DAO es diferente al de ADO, entes de hacer un Update, debes llamar al método Edit o AddNew

Saludos

Gaston Flores
10 de Septiembre del 2005
Si queres chekear que un registro este o no en la base de datos hace una consulta SQL de este tipo. (Esta optimizada y es rapida).
Abri un recordset que se llame por ej. RSCONSULTA , este mismo solamente servira para chekear esa informacion.

Set RSCONSULTA = TuBase.OpenRecordset("SELECT * FROM tutabla WHERE tucampo = '" & tuvariable & "'")
If rsbusqueda.EOF = true Then
msgbox "Tu codigo no esta cargado"
else
msgbox "Tu codigo esta cargado"
end if

A ver si entendiste, lo que hago es hacer una consulta con el posible codigo a cargar, si el recordset esta vacio (EOF) quiere decir que tu codigo no existe. Si el recordste no esta EOF quiere decir que ese codigo existe en la base de datos.
Una recomendacion, trata de que tu soft controle la numeracion de forma automatica para no generar inconsistencia en la informacion. O sea, genera vos los codigos automaticamente.
En forma de codigo seria una cosa asi:

Sub CargarCodigo() 'CARGA AUTOMATICAMENTE EL CODIGO DEL ARTICULO A INGRESAR'

If rsarticulos.RecordCount = 0 Then
ContCodigoArticulo = 1
Me.LabelCodigoArticulo.Caption = ContCodigoArticulo
Else
If rsarticulos.EOF = True Then
ContCodigoArticulo = rsarticulos!codarticulo + 1

If Len(ContCodigoArticulo) = 0 Then
Me.LabelCodigoArticulo.Caption = "0000" & ContCodigoArticulo
ElseIf Len(ContCodigoArticulo) = 1 Then
Me.LabelCodigoArticulo.Caption = "000" & ContCodigoArticulo
ElseIf Len(ContCodigoArticulo) = 2 Then
Me.LabelCodigoArticulo.Caption = "00" & ContCodigoArticulo
ElseIf Len(ContCodigoArticulo) = 3 Then
Me.LabelCodigoArticulo.Caption = "0" & ContCodigoArticulo
ElseIf Len(ContCodigoArticulo) = 4 Then
Me.LabelCodigoArticulo.Caption = ContCodigoArticulo
End If
rsarticulos.MoveFirst
Else
rsarticulos.MoveLast
ContCodigoArticulo = rsarticulos!codarticulo + 1

If Len(ContCodigoArticulo) = 0 Then
Me.LabelCodigoArticulo.Caption = "0000" & ContCodigoArticulo
ElseIf Len(ContCodigoArticulo) = 1 Then
Me.LabelCodigoArticulo.Caption = "000" & ContCodigoArticulo
ElseIf Len(ContCodigoArticulo) = 2 Then
Me.LabelCodigoArticulo.Caption = "0" & ContCodigoArticulo
ElseIf Len(ContCodigoArticulo) = 3 Then
Me.LabelCodigoArticulo.Caption = ContCodigoArticulo
End If
rsarticulos.MoveFirst
End If
End If

End Sub

Este codigo lo que hace es lo siguiente, ademas de generar solamente el codigo te pones los Ceros adelante por ej. 00001 o 00233
Esta preparado para trabajar con 5 caracteres. Si vos queres despues modificalo. Esto solamente para que tengas una idea de como se trabajo con codigo.

Espero que te sirva.