Foros del Web » Programación para mayores de 30 ;) » Programación General »

como hacer para no repetir tanto lo mismo

Estas en el tema de como hacer para no repetir tanto lo mismo en el foro de Programación General en Foros del Web. Hola, tengo que hacer una inserción en una bd access con vb 6, el código es el siguiente: Código PHP: Private  Sub actualizarbd ()     rs ...
  #1 (permalink)  
Antiguo 20/11/2003, 10:04
Avatar de Sir Matrix  
Fecha de Ingreso: octubre-2000
Ubicación: Dentro de mi cabeza. ono?
Mensajes: 1.264
Antigüedad: 23 años, 6 meses
Puntos: 3
como hacer para no repetir tanto lo mismo

Hola,

tengo que hacer una inserción en una bd access con vb 6, el código es el siguiente:

Código PHP:
Private Sub actualizarbd()

   
rs!nombre txtnombre.Text
   rs
!apellido txtapellido.Text
   rs
!edad txtedad.Text
   rs
!sexo txtsexo.Text
   etc
..etc....(muchos más campos)

   
rs.AddNew

End Sub 
El problema es que cuando no se escribe nada en los textboxes me da un error de: "La operación de múltiples pasos de OLE DB generó errores. Compruebe los valores de estado de OLE..."

Bueno, esto lo soluciono con un IF en cada campo:

Código PHP:
If Not txtnombre="" Then
   rs
!nombre txtnombre.Text
Else
   
rs!nombre " sin completar "
End If 
Pero tendría que hacer esto por cada uno de los campos, y no me parece la mejor solución... Cómo se puede solucionar mejor esto?? o hacer un bucle que valla validando todos los texboxes para que no se ingresen vacíos a la bd???


Saludos y gracias de antemano

Última edición por Sir Matrix; 20/11/2003 a las 10:06
  #2 (permalink)  
Antiguo 20/11/2003, 21:37
Avatar de Zeratul  
Fecha de Ingreso: marzo-2003
Ubicación: Palencia, España
Mensajes: 64
Antigüedad: 21 años, 2 meses
Puntos: 0
Hola, yo tenia el mismo problema y lo solucioné añadiendo un espacio en blanco a cada cadena que se quiere ingresar en la tabla

Código PHP:
rs!nombre txtnombre.Text " " 
esto sirve si el campo no es obligatorio, de otro modo tienes que comprobar que han introducido datos y tienes razón que es una lata. Yo lo compruebo haciendo que los textbox donde se introducen los datos sean una matriz de controles, asi puedes controlar que estan todos llenos en un solo bucle usando los elementos de la matriz

Espero que esto te sirva de ayuda
  #3 (permalink)  
Antiguo 21/11/2003, 07:31
Avatar de Sir Matrix  
Fecha de Ingreso: octubre-2000
Ubicación: Dentro de mi cabeza. ono?
Mensajes: 1.264
Antigüedad: 23 años, 6 meses
Puntos: 3
Muchas gracias, me ha funcionado muy bien lo del & ""

lo de la matriz de controles tendré que hacerlo para la otra, es que ya tengo creados todos los botones

Saludos :D
__________________
|||| ))>_<(( ||||
www.webmagic.cl <-- esta pagina está mala, no la busquen
  #4 (permalink)  
Antiguo 21/11/2003, 15:06
Avatar de pabli  
Fecha de Ingreso: octubre-2003
Mensajes: 381
Antigüedad: 20 años, 6 meses
Puntos: 0
Sir Matrix,

con permiso de Zeratul, dependiendo de las especificaciones puede ser una buena idea meter un espacio o no. En general yo personalmente creo que no es una buena práctica, pues un espacio no es lo mismo que un null. En mis programas trabajo con dato o con null. Cuando haces búsquedas, o utilizas ciertas funciones de base de datos, ese campo es recuperado como si tuviera dato(para la base de datos), pero aplicando la lógica que somos nosotros los que sabemos que espacio es = a nada no estaría funcionando.

Yo utilizaría:

rs!nombre = iif(txtnombre.Text = "", null, txtnombre.Text)

te escribo el código directamente en la web, no se si hay algún error sintáctico, pero la filosofía es esa...
  #5 (permalink)  
Antiguo 21/11/2003, 18:06
 
Fecha de Ingreso: septiembre-2003
Mensajes: 172
Antigüedad: 20 años, 7 meses
Puntos: 0
Hola, yo estoy de acuerdo con pabli, la solución de poner una espacio en blanco detrés del campo no es demasiado recomendable, la mejor solución es hacer una matriz de controles, si no quieres cambiar el programa que ya tienes te propongo que hagas algo similar a esto:

public function Validar() as boolean
Dim Control As Control


Validar=True

'hace un bucle por todos los controles del formulario
For Each Control In Me.Controls

If TypeOf Control Is TextBox And Control.Container.Name = "Frame1" Then
if Control.text= "" then
validar=false
end if
End If
Next
end function

Esto es solo un ejemplo, lo del frame es por si tienes otras cajas de texto que no sean la que tienes que validar, te propongo que pongas las cajas a validar en un frame o en un contenedor que puedas controlar, si no haces eso te devolverá error si cualquier caja de texto del formulario contiene "".

Saludos!
__________________
Sr.Propio
  #6 (permalink)  
Antiguo 21/11/2003, 18:08
 
Fecha de Ingreso: septiembre-2003
Mensajes: 172
Antigüedad: 20 años, 7 meses
Puntos: 0
Perdon por las tabulaciones y por el nombre de la variable Control, quiza no seria el mas indicado, pero creo que se entiende mas o menos.
__________________
Sr.Propio
  #7 (permalink)  
Antiguo 22/11/2003, 00:30
Avatar de Zeratul  
Fecha de Ingreso: marzo-2003
Ubicación: Palencia, España
Mensajes: 64
Antigüedad: 21 años, 2 meses
Puntos: 0
Hola de nuevo.
sin animos de crear polemica debo decir que no dejais muy claro por que no os parece una opcion adecuada la de insertar un espacio en blanco. Partimos de que el campo que dejamos con un espacio en blanco no es clave, con lo que no creamos registros invalidos en la base de datos. ademas estamos hablando de access y si realizamos una consulta como
"SELECT count(*) AS cantidad
FROM Tabla1
WHERE registro Is Not Null"
y en el campo registro de la tabla Tabla1 tenemos 7 valores y seis espacios en blanco el resultado de la consulta es 7 de donde se concluye que los valores introducidos como "espacio en blanco" es tomado como nulo por access.
Por otro lado en un software de bases de datos debe permitirse cierta flexibilidad al introducir los datos (salvo en campos clave), de otro modo obligamos a la introduccion de datos que en ese momento pueden no conocerse.
Repito que el motivo de este mensaje no es otro que el de saber mas sobre el tema, supongo que en otros gestores de bases de datos mas potentes que access la introduccion de un espacio en blanco puede crer problemas, sin embargo creo que son mas las ventajas que los problemas que produce. Si me equivoco desde luego que estare encantado de daros la razon.
Un Saludo
Zeratul
  #8 (permalink)  
Antiguo 22/11/2003, 07:42
Avatar de pabli  
Fecha de Ingreso: octubre-2003
Mensajes: 381
Antigüedad: 20 años, 6 meses
Puntos: 0
Zeratul,

por supuesto que no creas polémica ni mucho menos, aquí estamos para ayudar y ser ayudados.

A ver si nos ponemos de acuerdo:

En programación, hay estilos, cada uno tiene el suyo, y hay muchas cosas discutibles, pero en este caso yo lo tengo claro, voy a intentar razonarlo:

cuando insertas un espacio en un campo, en la cuadrícula donde son consultados los datos, nosotros no vemos nada, pero en realidad hay un caracter, me da igual que sea una "a" que un " ", y por supuesto para la base de datos en el campo hay un caracter, en este caso el 32 de la tabla ASCII, un ejemplo:

tabla MUSICA, campo NOMBRE, quiero sacar un conteo de todos los registros que tengan nombre:
SELECT count(*) FROM musica
WHERE nombre IS NOT NULL
en el conteo me incluirá lo campos que tengan un espacio, y eso es incorrecto, pues un espacio no se toma por NULL. No solo en esta query, sino en muchas funciones de BBDD que juegan con NULL para devolver o no resultados. El tema del NULL es delicado.

Cuando he visto tu ejemplo de ACCESS, he dudado, pues trabajo con SYBASE y SQL SERVER, lo he probado y ACCESS no se comporta como dices, a no ser que tu configuración sea diferente. También he estado mirando por las opciones y no me ha parecido encontrar nada al respecto.

Esta instrucción para mi no es correcta
rs!nombre = txtnombre.Text & " "
que se puede utilizar? por supuesto que sí, sin lugar a dudas.

Un saludo
Pablo
  #9 (permalink)  
Antiguo 22/11/2003, 11:19
 
Fecha de Ingreso: septiembre-2003
Mensajes: 172
Antigüedad: 20 años, 7 meses
Puntos: 0
Hola otra vez,

De nuevo estoy de acuerdo con Pabli, tb en lo de que cada uno tiene su estilo y que cuantas mas opciones se conozcan mucho mejor.

Bajo mi punto de vista, cuando guardas un dato en la base de datos éste tiene que ser significativo, un espacio en blanco por si solo no suele aportar información, así que para que guardarlo? En el caso de que un campo pueda no tener por que ser llenado creo que la mejor opcion es diseñar el campo como no requerido y permitirle una longitud 0. De esta manera como bien dice Pabli, te es mucho más fácil controlar que registros contienen información en ese campo y que registros no.
Vuelvo a repetir que son maneras de verlo, cada una tiene sus ventajas, solo queda elegir la que mas nos guste.

Saludos!
__________________
Sr.Propio
  #10 (permalink)  
Antiguo 23/11/2003, 18:56
Avatar de Zeratul  
Fecha de Ingreso: marzo-2003
Ubicación: Palencia, España
Mensajes: 64
Antigüedad: 21 años, 2 meses
Puntos: 0
Tengo que reconocer que me equivoqué al decir que access tomaba los blancos como nulos. Mi error viene de que lo probe sobre la tabla directamente, dando a la barra espaciadora, si lo haces así al cambiar de campo desaparecen los 'blancos' dejando un valor nulo, pero si haces una consulta insert into (o desde visual) metiendo " " sí que figura en ese campo el espacio con lo que ya no es nulo. Teneis razón, eso introduce errores, así que a partir de ahora voy a utilizar con mas cuidado el & " ".

La verdad es que estos foros son de PM siempre aprendes algo nuevo.

Saludos.
  #11 (permalink)  
Antiguo 24/11/2003, 05:09
Avatar de pabli  
Fecha de Ingreso: octubre-2003
Mensajes: 381
Antigüedad: 20 años, 6 meses
Puntos: 0
Zeratul,

Tienes toda la razón, a mi me han ayudado muchísimo.

Saludos
Pablo
  #12 (permalink)  
Antiguo 14/06/2004, 15:39
 
Fecha de Ingreso: junio-2004
Ubicación: Vivo en santiago de chile, la zona horaria que puse no corresponde, puesto que no salia la opcion de santiago de chile
Mensajes: 4
Antigüedad: 19 años, 10 meses
Puntos: 0
Necesito ayuda

Tengo que hacer un trabajo, y me pidieron lo siguiente :

- en javascript, insertar en un text y al apretar un button que me agregue un campo a un select en forma automatica.

- Tambien, tengo 2 objeto radio y 2 text, cuando inserto en el text1 el text2 y el radio2 deben estar desactivados y el radio1 activado, lo mismo para el radio2 y el test2
  #13 (permalink)  
Antiguo 14/06/2004, 15:42
 
Fecha de Ingreso: junio-2004
Ubicación: Vivo en santiago de chile, la zona horaria que puse no corresponde, puesto que no salia la opcion de santiago de chile
Mensajes: 4
Antigüedad: 19 años, 10 meses
Puntos: 0
Espero me puedan ayudar

Ojala me puedan ayudar con este problema, saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:59.