Visual Basic - CONSULTA

Life is soft - evento anual de software empresarial
 
Vista:

CONSULTA

Publicado por tito (22 intervenciones) el 19/09/2006 18:00:59
hola q tal
yo tengo mi tabla en access con 5 campos,el ultimo campo se llama eliminado de tipo numero y todos los registros tienen valor 1,estos registros lo muestro en un datagrid1

si el campo eliminado tiene valor 1 quiere decir que el registro no eta eliminado,si tiene valor 0 si esta eliminado.

yo hago en mi codigo de eliminacion una actualizacion para que cambie a 0 en caso si elimino un registro, y si es valor 0 el registro eliminado pasa a un datagrid2

esto funciona bien pero el registro que elimino se queda en el datagrid1,no aparece cuando cierro la aplicacion pero no es la idea.

suponiendo que el registro 16 es el q elimino, ese registro pasa a mi datagrid2, pero se queda aun en el datagrid1 y si quiero agregar un nuevo registro cuando doy clic en mi boton nuevo se autogenera un codigo pero no se autogenera el que sigue osea el 17 sino se auogenera el 16 de nuevo y no debe ser asi

me podrian ayudar con eso que debo hacer ahi porfa
gracias!!!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:CONSULTA

Publicado por ivan (1039 intervenciones) el 19/09/2006 18:37:26
Puedes poner el código donde haces eso....???

Si acaso estás usando campos autonuméricos esto no debería de pasar.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:CONSULTA

Publicado por tito (22 intervenciones) el 19/09/2006 18:59:14
OK ESTE ES EL CODIGO, PERO SABES ACABO DE BER QUE HAY OTRO ERROR CREO Q TENGO QUE CAMBIAR LA SENTENCIA SQL PORQ MIRA YO TENGO 2 REGISTROS CUYO APELLIDO EMPIEZA CON LA LETRA N
SI YO EN EL TEXTBOX ESCRIBO N ME SALE LOS 2 REGISTROS QUE TIENEN LA LETRA N COMO PRIMERA LETRA DEL APELIDO PERO SELECCIONO SOLO 1 DE ELLOS, LO ELIMINO Y SE ELIMINAN LOS DOS OSEA SE ELIMINA TAMBIEN EL Q NO SELECCIONO, AYUDAME CON ESO PORFA, TE PASO TAMBIEN EL CODIGO QUE ESCRIBO EN EL TEXTBOX
GRACIAS!!!

Private Sub Command11_Click()
'BOTON ELIMINAR
With rs
Dim r As Integer
r = MsgBox("Desea Eliminar", vbCritical + vbYesNo)
If r = vbYes Then
comando = "update clientes3 set eliminado=0 where paterno like '" & Me.txtbuscar & "'+'%'"
cn.Execute (comando)
'.Delete
.MoveNext
Me.DataGrid1.Caption = "Son " & .RecordCount & " Clientes"
End If
End With

'LLENANDO DATAGRID2 SOLO LOS ELIMINADOS
Dim rs1 As New ADODB.Recordset
Dim sql As String
sql = "select codigo,nombre,paterno,materno,direccion,telefono from clientes3 where eliminado=0"
rs1.CursorLocation = adUseClient
rs1.Open sql, cn, adOpenKeyset, adLockOptimistic
Set Me.DataGrid2.DataSource = rs1
End Sub

************************************************************************************
Private Sub txtbuscar_Change()
'BUSCAR CON CAJA DE TEXTO
Dim sql As String
rs.Close
sql = "select codigo,nombre,paterno,materno,direccion,telefono from clientes3 where paterno like '" & Me.txtbuscar.Text & "'+'%'" & "order by 1"
rs.Open sql, cn
Set Me.DataGrid1.DataSource = rs
Me.DataGrid1.Caption = "Son " & rs.RecordCount & " Clientes"
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:CONSULTA

Publicado por ivan (1039 intervenciones) el 19/09/2006 19:29:01
Casi no entiendo tu estilo de programar, pero creo que puedo aportar algo..

Supongo que con esto, pones en cero el campo ELIMINADO donde el campo PATERNO sea similar a Me.txtbuscar

comando = "update clientes3 set eliminado=0 where paterno like '" & Me.txtbuscar & "'+'%'"
cn.Execute (comando)

Sugiero que esta parte la estás haciendo mal, ya que estás borrando (marcando con ceros) todo aquello que se parezca a lo que escribiste en la caja de texto y la intención es borrar solo uno, se supone que tu vas escribiendo el nombre que v as a borrar, en el datagrid se va mostrando el nombre parecido, eliges uno y lo borras, no todos los que se parezcan.

En mi caso cuando trabajo con nombres de personas, los grabo así como tu, apellido paterno, materno y nombres, pero además agrego un campo mas donde pongo el nombre completo (muchos pudieran opinar que es un desgaste innecesario de espacio), cuando doy de alta un registro capturo por separado los nombres y lo guardo inclusive con el nombre completo.

Cuando establezco una búsqueda, lo hago por medio del campo donde se encuentra el nombre completo, una vez elegido el registro que voy a borrar selecciono solamente ese registro y lo marco.

Por lo que te recomiendo que cambies el comando a algo parecido a...:

comando = "update clientes3 set eliminado=0 where nombre_completo = '" & DataGrid1.Text & "'+'%'"

Para esto el DataGrid.Text tuviera que tener el nombre completo (por eso uso el campo nombre completo) o si no tuvieras que formarlo tu, suponiendo tu consulta creo que tu datagrid está asi..:

Codigo Nombre(s) Ap Paterno Ap Materno Otro_campos..
(columna 0) (columna 1) (columna 2) (columna 3) (columna 4)

Y cambiarías el comando

"update clientes3 set eliminado=0 where nombre = '" _
& DataGrid1.Columns(1).Text & "' and paterno = '" _
& DataGrid1.Columns(2).Text & "' and materno = '" _
& DataGrid1.Columns(3).Text & "'+'%'"

(No recuerdo si está bien la sintaxis)

Con esto creo que seleccionarías solamente aquel registro donde los campos coincidas con el texto que tengas en las columnas 1, 2 y 3 del registro que tengas seleccionado en el datagrid, se supone que no tendrás nombres repetidos.

Para esto tendrás que validar que tengas seleccionado algún registro en el datagrid, porque si no, seguro te marcará error.

REFERENTE A TU BUSQUEDA...
Veo que el datagrid solo vas mostrando aquellos registros que se aparezcan a lo que estás escribiendo, a como yo lo hago, muestro todos los registros, en una caja de texto escribo el nombre que quiero buscar, doy un clic a un boton BUSCAR para posicionar el puntero del RecordSet en el registro buscado, o sea, no lo hago conforme vaya escribiendo, ya que sería muy tardado que cada teclazo se vaya al principio y esté buscando contínuamente, ya con tablas con muchos registros se notará la lentitud.

Respecto a que te generaba el mismo numero que borrabas anteriormente, no se si acaso eso ya lo solucionaste.

Suerte.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:CONSULTA

Publicado por tito (22 intervenciones) el 19/09/2006 20:23:26
AMIGO CON ESTAS LINEAS DE CODIGO QUE ME PASASTES
update clientes3 set eliminado=0 where nombre = '" _
& DataGrid1.Columns(1).Text & "' and paterno = '" _
& DataGrid1.Columns(2).Text & "' and materno = '" _
& DataGrid1.Columns(3).Text & "'+'%'"

FUNCIONA ELIMINA SOLO EL QUE YO SELECCIONO EN EL DATAGRID1

PERO SE QUEDA EN EL DATAGRID EL REGISTRO QUE ELIMINO OSEA TENGO QUE CERRAR LA APLICACION VOLVERLA A ABRIR Y YA NO APARECE PUEDES AYUDARME CON ESO GRACIAS
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:CONSULTA

Publicado por ivan (1039 intervenciones) el 19/09/2006 21:12:55
Vuelve a pasar los registros al datagrid, ya sea con el método REBIND o REFRESH o de plano volver a configurar el datagrid

Set DataGrid1.DataSource = Nothing
Set DataGrid1.DataSource = RecordSet_Usado

Suerte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:CONSULTA

Publicado por tito (22 intervenciones) el 20/09/2006 16:06:04
hola sabes este codigo
Set DataGrid1.DataSource = Nothing
Set DataGrid1.DataSource = RecordSet_Usado

no me funciona se sigue viendo en el datagrid el registro que elimino, porias porfa enseñarme otro metodo, y ese REBIN Y REFRESH nunca lo he usado
ayudame porfa
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:CONSULTA

Publicado por ivan (1039 intervenciones) el 20/09/2006 21:25:53
Si acaso vuelves a mostrar el RecordSet en el datagrid significa que EL CAMBIO NO SE HA GRABADO, por lo que te recomiendo...

1. Revisar depurando tu código... (F8) línea por línea, justo donde tu crees que graba, verifica tu tabla de access (o sea, ábrela desde Access) para que verifiques que REALMENTE se cambió el valor de 0 a 1 (o sea que lo marcaste para borrarlo).

2. El Método REBIND hace que el DataGrid realice las mismas operaciones que ocurren cuando se establece la propiedad DATASOURCE, restableciendo columnas, encabezados y otras configuraciones.

3. El método REFRESH se supone vuelve a dibujar un control, pero ese yo nunca lo he utilizado, en mi caso uso REBIND y SI ME FUNCIONA, o sea, muestra el contenido del RecordSet donde hago la consulta.

4. En su caso si haciendo lo anterior sigue sin funcionarte, vuelve a cargar los datos en RecordSet donde haces tu consulta (el recordset que usas para asignarle la propiedad DataSource a tu DataGrid)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:CONSULTA

Publicado por tito (22 intervenciones) el 21/09/2006 16:35:31
HOLA YA SE SOLUCIONO EL PROBLEMA DE MI DATAGRID

PERO APARECIO OTRO MIRA LA COSA VA ASI
YO TENGO EN MI DATAGRID1 18 REGISTROS,ELIMINO EL REGISTRO 18 Y PASA A MI DATAGRID2,ESO FUNCIONA BIEN Y YA NO APARECE EN MI DATAGRID1 EL REGISTRO 18 SOLO APARECE HASTA EL 17

PERO LUEGO QUIERO REGISTRAR UN NUEVO CLIENTE, DOY CLIC EN MI BOTON NUEVO Y ME DEBE AUTOGENERAR EL REGISTRO 19 PERO CON ESTE CODIGO QUE HE PUESTO NO ME AUTOGENERA PUEDES AYUDARME A CAMBIARLO CREO QUE EL ERRO ES LA PARTE DONDE PONGO NUM=VAL(SQL) YA QUE ANTES DE AGREGAR ESO Y MI SELECT SI SE AUTOGENERA EL CODIGO PERO AHORA NO
GRACIAS!!!!!!!!!

Dim sql As String
Dim num As Integer
sql = "select count(*) from clientes3"
num = Val(sql)
If num < 0 Then
Me.txtcod.Text = 1
Else
Me.txtcod = num + 1
'rs.MoveNext
limpiar
Me.txtnom.SetFocus
End If
habilitar_cajas
Me.Command5.Enabled = True
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar