Banda Ancha EU

Comunidad de usuarios
de fibra, móvil y ADSL

Visual Basic 6.0 + BBDD longitud 0 o campos nulos

BocaDePez
BocaDePez

Bueno yo a lo mio... Sigo haciendo el programa de la empresa y aunque cada vez mejoro un poco la version a ratos me pasan cosas como estas... :

Siempre cuando abro el proyecto.vbp y no hay nada en mi base de datos me pone ERROR BOF Y EOF SON IGUALES que lo he solventado con un if rst.eof and rst.bof then base de datos vacia, rellenela end if ( alguna otra forma mas limpia que conozcais? aunque bueno esta opcion me ha gustado bastante.. )

Ahora me vienen los problemas de verdad

Cuando se abre me muestra un monton de datos del usuario entonces ANTES le daba a un boton modificar que me permite escribir en los textbox ( los tengo enabled = false ) y escribia en los campos que me faltaban por rellenar daba a guardar y guardaba los cambios, los nuevos campos rellenos y si abia alguno sin poner todavia lo dejaba y no me saltaba error..

pero he añadido unos campos nuevos a mi tabla porque necesitamos recoger más datos y e ido a probar el guardar y nada me saltaba error en la nueva línea de comando haciendo referencia justo a los nuevos campos que e exo... e pensado k sería un error de los campos, e ido a mirarlo al access y exacto , en los campos ponia que no podia ser una línea de texto vacía, es decir "", encontra de los otros más antiguos que si que los ponía y bueno entonces he cambiado todos los campos nuevos con esa opción y voy a guardar y ERROR pero ahora el error no esta en ese primer campo nuevo sino en los campos viejos que antes funcionaban bien :S:S Todo sin ninguna explicación aparente... He estado comprobando y comprobando y bueno los campos tienen las mismas características ( todos de tipo texto con 250 caracteres por defecto que ponga "" y que se pueda longitud 0 , es decir "" , pero ni aun así me lo coje...

Un poco de lio igual al explicarme que me exo pero espero que me podais decir porque no puedo guardar en mi base de datos campos que esten vacios por que en ese momento se desconocen los datos.

Gracias

Este tema está cerrado a nuevas respuestas. Abre un nuevo tema para retomar la conversación.
BocaDePez
BocaDePez

Lo siento, pero no te he entendido. ¿que quieres hacer?. Resume. Y, por favor, intenta pasar un corrector ortográfico antes de enviar un mensaje al foro, estás asesinando mediante tortuosas técnicas a la señora ortografía.

🗨️ 7
BocaDePez
BocaDePez
-1

lo siento por no saber explicarme no porque escriba mal ya que es un foro no un documento importante... yo y la gran mayoria de personas cuando cojemos notas para lo que sea haces eso.. cojer notas apuntar un numero una palabra algo con lo que te acuerdes no te apuntas todo el parrafon bien explicado... pues aqui parecido... estoy en el trabajo con prisa y con ganas de seguir avanzando y no quiero perder tiempo en escribir todas las letras ya que asi tardo unos segundos mas ( escribo en mas de un foro casi a la vez y cosas distintas que no puedo cortar y pegar para ganar tiempo ).

A lo que voy que justo ahora lo estoy probando otra vez y al menos he conseguido que los campos viejos de mi base de datos funcionen BIEN.

Mira estoy en el modo INTERRUPCION de visual basic 6.0 y me pongo encima de estas dos instrucciones :

txtProvincia.Text = rst.Fields("PROVINCIA") y sale : txtProvincia.text = ""

txtReglada.text = rst.Fields("REGLADA") y sale : ERROR VALOR NULO ..

en los dos casos tengo mi caja de texto sin rellenar.

en la base de datos , en access, tengo las opciones de longitud 0 en todos los campos.

porque me da error en REGLADA y en PROVINCIA QUE HAGO LO MISMO MISMO me pone "" eso es lo que me gustaria saber... Igual influye que tenga los datos en un SSTab donde en la primera hoja me funciona todo guay pero en la segunda hoja es donde me empiezan a dar los problemas ( tambien hize la primera hoja hace 1 semana y he estado trabajando en ella esta semana y hoy he añadido los campos y las cajas de texto a la segunda hoja )

Un saludo y GRACIAS POR ADELANTADO

🗨️ 6
BocaDePez
BocaDePez

Hombre de dios ¿has hecho un next?. Y yo en mis notas escribo sin tantas faltas.

BocaDePez
BocaDePez

Igual el tipo de datos, quizás tengas como provincia tipo texto y reglada tipo boleano o numerico, por lo que en el caso del tipo texto tienes rellenado "" y en el caso de reglada no hay nada. Realmente te da error? o simplemente que te da nulo?

Lo de las faltas no creo que sea por prisas, ya que cojer es con g.

BocaDePez
BocaDePez

Cambia "txtReglada.text = rst.Fields("REGLADA")" por esto: txtReglada.text = rst.Fields("REGLADA") & "" para todos los campos de texto

BocaDePez
BocaDePez

Escribe las asignaciones para los campos de texto asi:

txtProvincia.Text = rst.Fields("PROVINCIA") & ""

De esta manera, nunca cascara por nulo

🗨️ 2
BocaDePez
BocaDePez

Yo creo que después de ocho años ya lo habrá solucionado 😎

🗨️ 1
BocaDePez
BocaDePez
BocaDePez
BocaDePez

Es decir, que en el Acces tienes que esos campos pueden contener NULL y a pesar de ello te falla pq no has introducido nada? Si rellenas algo y no los dejas en blanco, entonces funciona?

🗨️ 7
BocaDePez
BocaDePez

exacto en el access tengo que pueden ser NULL y tambien he probado que puedan ser NULL Y que de predeterminado sea "" y nada

Si relleno todos todos los datos funciona perfecto.

🗨️ 6
BocaDePez
BocaDePez

Puede que te esté petando el comando para insertar los datos, y que ese comando no pueda estar en blanco, por lo que tu programando o debes entrecomillarlo o algo por el estilo.

Puedes poner el comando que utilizas para insertar los datos del formulario?

Por ejemplo, en SQL el problema seria: "INSERT INTO tabla(campo1,campo2) VALUES(,'hola')" Esta sentencia petaria porque el campo 1 no está informado, se arregla si lo pones entre comillas:
"INSERT INTO tabla(campo1,campo2) VALUES('','hola')"

Lo dicho, pon el código si crees que el problema puede ser ese.

🗨️ 5
BocaDePez
BocaDePez

OK pongo el codigo a la hora de darme el fallo... e exo una funcion escribir que me ace esto :

Public Sub imprimir()

    If rst.EOF And rst.BOF Then

        MsgBox "No tienes ningun registro guardado.", vbOKOnly + vbInformation, "BASE DE DATOS VACIA"

    Else

'Parte Datos Personales

    txtNombre.Text = rst.Fields("NOMBRE")

    txtApellido.Text = rst.Fields("APELLIDO1")

    txtApellido2.Text = rst.Fields("APELLIDO2")

    txtDNI.Text = rst.Fields("DNI")

    txtFechaNacimiento.Text = rst.Fields("FECHANACIMIENTO")

    txtEmail.Text = rst.Fields("EMAIL")

    txtDomicilio.Text = rst.Fields("DOMICILIO")

    txtPoblacion.Text = rst.Fields("POBLACION")

    txtCPostal.Text = rst.Fields("CPOSTAL")

    txtProvincia.Text = rst.Fields("PROVINCIA")

    txtTelefono.Text = rst.Fields("TELEFONO1")

    txtTelefono2.Text = rst.Fields("TELEFONO2")

    txtFechaAlta.Text = rst.Fields("FECHAALTA")

    If (rst.Fields("ESTADOCIVIL") = "CASADO") Then

        optEstadoCasado.Value = True

    ElseIf (rst.Fields("ESTADOCIVIL") = "VIUDO") Then

        optViudo.Value = True

    ElseIf (rst.Fields("ESTADOCIVIL") = "SOLTERO") Then

        optEstadoSoltero.Value = True

    ElseIf (rst.Fields("ESTADOCIVIL") = "DIVORCIADO") Then

        optDivorciado.Value = True

    ElseIf (rst.Fields("ESTADOCIVIL") = "OTROS") Then

        optOtros.Value = True

    End If

    If (rst.Fields("SEXO") = "HOMBRE") Then

        optSexoHombre.Value = True

    ElseIf (rst.Fields("SEXO") = "MUJER") Then

        optSexoMujer.Value = True

    End If

    If (rst.Fields("HIJOS") = "SI") Then

        optHijosSi.Value = True

    ElseIf (rst.Fields("HIJOS") = "NO") Then

        optHijosNo.Value = True

    End If

    If (rst.Fields("ESTADO") = "ALTA") Then

        optEstadoAlta.Value = True

    ElseIf (rst.Fields("ESTADO") = "BAJA") Then

        optEstadoBaja.Value = True

    End If

'Parte Formacion y Experiencia

    txtReglada.Text = rst.Fields("REGLADA")

    txtComplementaria = rst.Fields("COMPLEMENTARIA")

    txtTrayectoriaLaboral = rst.Fields("TRAYECTORIA")

    txtIdiomas.Text = rst.Fields("IDIOMAS")

    txtInformatica.Text = rst.Fields("INFORMATICA")

    txtTiempoTrabajado.Text = rst.Fields("TIEMPOTRABAJADO")

    If (rst.Fields("CARNET") = "SI") Then

        optCarnetSi.Value = True

    ElseIf (rst.Fields("CARNET") = "NO") Then

        optCarnetNo.Value = True

    End If

    If (rst.Fields("VEHICULO") = "SI") Then

        optVehiculoSi.Value = True

    ElseIf (rst.Fields("VEHICULO") = "NO") Then

        optVehiculoNo.Value = True

    End If

    If (rst.Fields("ESTADOACTUAL") = "ACTIVO") Then

        optEstadoActivo.Value = True

    ElseIf (rst.Fields("ESTADOACTUAL") = "PARADO") Then

        optEstadoParado.Value = True

    End If

    End If

End Sub

Public Sub guardar()

'Parte Datos Personales

    rst.Fields("NOMBRE") = txtNombre.Text

    rst.Fields("APELLIDO1") = txtApellido.Text

    rst.Fields("APELLIDO2") = txtApellido2.Text

    rst.Fields("DNI") = txtDNI.Text

    rst.Fields("FECHANACIMIENTO") = txtFechaNacimiento.Text

    rst.Fields("EMAIL") = txtEmail.Text

    rst.Fields("DOMICILIO") = txtDomicilio.Text

    rst.Fields("POBLACION") = txtPoblacion.Text

    rst.Fields("CPOSTAL") = txtCPostal.Text

    rst.Fields("PROVINCIA") = txtProvincia.Text

    rst.Fields("TELEFONO1") = txtTelefono.Text

    rst.Fields("TELEFONO2") = txtTelefono2.Text

    rst.Fields("FECHAALTA") = txtFechaAlta.Text

    If (optEstadoCasado.Value = True) Then

       rst.Fields("ESTADOCIVIL") = "CASADO"

    ElseIf (optEstadoViudo.Value = True) Then

        rst.Fields("ESTADOCIVIL") = "VIUDO"

    ElseIf (optEstadoSoltero.Value = True) Then

        rst.Fields("ESTADOCIVIL") = "SOLTERO"

    ElseIf (optEstadoDivorciado.Value = True) Then

        rst.Fields("ESTADOCIVIL") = "DIVORCIADO"

    ElseIf (optEstadoOtros.Value = True) Then

        rst.Fields("ESTADOCIVIL") = "OTROS"

    End If

    If (optSexoHombre.Value = True) Then

        rst.Fields("SEXO") = "HOMBRE"

    ElseIf (optSexoMujer.Value = True) Then

        rst.Fields("SEXO") = "MUJER"

    End If

    If (optHijosSi.Value = True) Then

        rst.Fields("HIJOS") = "SI"

    ElseIf (optHijosNo.Value = True) Then

        rst.Fields("HIJOS") = "NO"

    End If

    If (optEstadoAlta.Value = True) Then

        rst.Fields("ESTADO") = "ALTA"

    ElseIf (optEstadoBaja.Value = True) Then

        rst.Fields("ESTADO") = "BAJA"

    End If

'Parte Formacion y Experiencia

    rst.Fields("REGLADA") = txtReglada.Text

    rst.Fields("COMPLEMENTARIA") = txtComplementaria

    rst.Fields("TRAYECTORIA") = txtTrayectoriaLaboral

    rst.Fields("IDIOMAS") = txtIdiomas.Text

    rst.Fields("INFORMATICA") = txtInformatica.Enabled

    rst.Fields("TIEMPOTRABAJADO") = txtTiempoTrabajado.Enabled

    If (optCarnetSi.Value = True) Then

        rst.Fields("CARNET") = "SI"

    ElseIf (optCarnetNo.Value = True) Then

        rst.Fields("CARNET") = "NO"

    End If

    If (optVehiculoSi.Value = True) Then

        rst.Fields("VEHICULO") = "SI"

    ElseIf (optVehiculoNo.Value = True) Then

        rst.Fields("VEHICULO") = "NO"

    End If

    If (optEstadoActivo.Value = True) Then

        rst.Fields("ESTADOACTUAL") = "ACTIVO"

    ElseIf (optEstadoParado.Value = True) Then

        rst.Fields("ESTADOACTUAL") = "PARADO"

    End If

End Sub

Graciasss, el fallo me da en rst.Fields("reglada")

🗨️ 4
BocaDePez
BocaDePez
🗨️ 1
BocaDePez
BocaDePez
BocaDePez
BocaDePez
BocaDePez
BocaDePez
BocaDePez
BocaDePez

SOLUCIONADO + o -

Nose porque algunos campos me rellena automaticamente con "" y otros me los deja en null... pero bueno la opcion mas correcta para tratar estos casos es con la funcion isnull(campo) then acemos lo k keremos end if asi si un campo es nulo podremos llenarlo por ejemplo con numeros si es un telefono aunk sea 1111111111 o como queramos.. , es decir , tenemos abierto el abanico para cualquier opcion con la funcion is null.. la forma warrimala es :

txtReglada.Text = "" & rst.Fields("REGLADA") y asi si en rst... no hay nada y es nulo en txtReglada al menos no lo pondra como nulo si no como vacio.

BocaDePez
BocaDePez

Como PROGRAMADOR Experto de Visual Basic 6.0 Opino ( que es un lenguaje muy bueno y simple= menos complicado que el net y sus sucesores , solo fijate lo complicado que resulta crear hijos de MDI y que no se abra mas de una instancia en dichas versiones en comparacion con la version 6)

El Código es malo o muy malo desde el principio :

1º- Deberias comprobar con el ADODBC que la tabla este vacia

2º- Poner las condiciones en dicho caso y en el opuesto

3º- Seguro que tienes un PrimaryKey o ForeignKey , o ambas sin concretar (ya que los fallos radican cuando cambia un primakey a foreignkey en sus propiedades)

Yo tengo un truco para comprobar como se estan metiendo los datos ( ver si se meten o no o cuales se meten o no) para comprobar que no hay fallos en el relleno de los datos de las tablas. Tambien deberias rellenar los datos de la tabla con el ADODBC y no con SQL (YA QUE ES MUCHO MAS FACIL Y MENOS PROBLEMATICO); Tambien deberias asegurarte que los datos se introducen por el nombre del campo y no por su posicion (que es el primer error que te salta; ya que si es por posicion en el mismo momento que amplies la tabla con nuevos campos tendras que indicar las nuevas posiciones de dichos campos).

Porque sino se volvera loco a la hora de rellenar los datos unos seran rellenados y otros no. Por no hablar de lo dificil que sera entender lo que hiciste hace unos meses. ¡¡¡SUERTE!!!