Ir al contenido


Foto

capturar un radiobutton y guardar en base datos?


  • Por favor identifícate para responder
34 respuestas en este tema

#21 dooper

dooper

    Advanced Member

  • Miembros
  • PipPipPip
  • 298 mensajes

Escrito 25 abril 2016 - 11:51

Tengo algunas cosas que preguntar en esa demo Enecumene.

 

Porque en el DbGrid1 de la demo en la propiedad "columns" insertas "nombre", "edad" y "sexo"? Ya me dijeron que no era necesario y de echo tuve que

eliminar esas columnas y crearlas a traves de CREATE IF NOT EXISTS "Nombre" VARCHAR(20), "Edad" INTEGER, y "Sexo" VARCHAR(6)). Es mucho

más facil crear columnas y modfiicarlas con el inspector de objetos como así está en tu demo.

 

Creas variables del tipo INT (Integer) y TEXT (texto). En mi demo los texto los defino con VARCHAR(X).

Está casi todo el codigo idem al mío, pero no hay forma de grabar el texto del RadioGroup1 en la base de datos. Los demás campos si se graban incluso si añado alguno más de prueba tambien los vuelca en la tabla.

Lo único que cambia con respecto a mi demo es que no uso "Ztable" personas, en el datamodule1 y veo que tu si lo nombras.


  • 0

#22 dooper

dooper

    Advanced Member

  • Miembros
  • PipPipPip
  • 298 mensajes

Escrito 25 abril 2016 - 12:01

De la última muestra de código observo lo siguiente:

1. Al parámetro edad en lugar de invocar a un .AsInteger (como se esperaría y debe ser) figura un .Integer. Que yo recuerde no existe .Integer ;)

2. Podríamos asumir que tienes bien declarada e implementada la función GetSexoSeleccionado, pero como preguntabas por donde debería figurar la variable global y, de de donde sale la variable "result" ya estoy en dudas. ¿En que form la declaraste? ¿En el propio form en donde se la está usando? ¿En otro? Dependiendo de ello, deberá declararse en Uses la unidad del form y por tanto cabría la posibilidad de que deba invocarse así: ElForm.GetSexoSeleccionado.

 

El que preguntes que es ese result me hace pensar y dudar si tienes los conocimientos para comprender que es una función y que es un procedimiento. Conocimientos indispensables y básicos. Son los pilares en que descansa el paradigma estructurado y por extensión a POO.

 

3. De todas formas, sea de donde sea que estés obteniendo el sexo, al final al parámetro sexo le estás pasando siempre lo mismo: 'hombre'

 

Saludos,

No pensaba Delphius que tuvieramos un variable "Result" autodeclarada en un función. Voy asimilando conceptos, lo que ya se me escapa es si la estructura sintáctica y mis conocimientos de Lazarus, van encaminados correctamente a lo que deseo conseguir.

 

La función está declarado en el Form donde está el procedimiento de insercción de los campos de la tabla.

 

Aparte los errores que voy soportando, aunque tengan una explicación final, no son errores de nivel básico, ya que esos en parte los controlo.

 

Un saludo


  • 0

#23 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 25 abril 2016 - 12:07

Pues es lo correcto separar cada cosa con su función definida, uso el Zquery para insertar y la ZTable para mostrar así hay más control, lo de la columna, fíjate, no sé que te habrán dicho los demás, hay varias formas de hacerlo tanto el DBGrid como en campos persistentes, éste último es la que estoy aplicando, vas al Datamodule le das doble click al ZTable y verás los campos persistentes, yo los creé de antemano porque la tabla personas no existe la primera vez, cuando se cree la tabla ya esos campos están ahí y mostrarse en el DBGrid. Esto último sólo se aplica en casos específico como en el tuyo, ya que creas la tabla en tiempo de ejecución. Yo te recomiendo que crees la BD con sus tablas en un manejador de SQLite y lo definas allí no desde Lazarus, y a medida que vas creando campos vas cargando los campos persistentes en ZTable.

 

Te reitero, revisa detenidamente el demo ;).

 

Saludos.


  • 0

#24 dooper

dooper

    Advanced Member

  • Miembros
  • PipPipPip
  • 298 mensajes

Escrito 25 abril 2016 - 01:10

Pues me acabo de "venir abajo" sinceramente. Cuando al principio creaba la tabla y la columnas en el Dbgrid me comentaron, que la razón por la que no se visualizaban los datos en el dbgrid era porque tenía "columns" etiquetadas con su título para que al cargar el dbgrid aparecerian tuve que eliminarlas del dbgrid y "zas" apareció los campos y su contenido.

 

Yo creo los campos de la forma CREATE TABLE IF NOT EXISTS ("Nombre" VARCHAR(20), "Edad" Integer, "Sexo" VARCHAR(6))'; al visualizar el DBGRid aparecería el título Nombre   Edad   Sexo (tal y como lo escribo, con sus mayúsculas o minúsculas), pero claro si creo junto con esto las "columns" del DBGRid, la información no se visualizaría. Al revés no podría, al

menos que creara las tablas y campos desde fuera de Lazarus, y ahí a lo mejor ya podría usar columnas en el DbGrid, pero si

lo hago así, todas las tablas que cree desde fuera de Lazarus, cuando arranque la demo deberían estar ya creadas. porque

ahora CREATE TABLE IF NO EXISTS la crea si no existiera.

 

Supongo que podré usar como lo tienes en la demo, sin necesidad de usar ZTable, ya que no uso este componente, lo hago todo por ZQuery.

 

En cuanto elimino el "campo" sexo de la base de datos, el registro se graba perfectamente.

 

Como puedo ver el contenido que tienen los campos "Nombre, Edad y Sexo" antes de intentar ser grabados? ZQuery2.SQL.Text me muestra el INSERT INTO (Nombre, edad,sexo) values (:nombre, :edad, :sexo) literalmente, pero no el contenido de esas variables.

 

Porque sigo sin entender como añandiendo un campo más al registro ("sexo") y showmessage me muestra su contenido ("hombre") y al ser grabado me de la excepción....

 

Un saludo


  • 0

#25 Agustin Ortu

Agustin Ortu

    Advanced Member

  • Moderadores
  • PipPipPip
  • 831 mensajes
  • LocationArgentina

Escrito 25 abril 2016 - 01:18

Pues me acabo de "venir abajo" sinceramente. Cuando al principio creaba la tabla y la columnas en el Dbgrid me comentaron, que la razón por la que no se visualizaban los datos en el dbgrid era porque tenía "columns" etiquetadas con su título para que al cargar el dbgrid aparecerian tuve que eliminarlas del dbgrid y "zas" apareció los campos y su contenido.

 

No, los datos no aparecian por que tenias DefaultDrawing a False


  • 0

#26 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 25 abril 2016 - 01:30

Ya creo que deberé hacer un tutorial sobre esto (h)


  • 1

#27 dooper

dooper

    Advanced Member

  • Miembros
  • PipPipPip
  • 298 mensajes

Escrito 25 abril 2016 - 02:07

No, los datos no aparecian por que tenias DefaultDrawing a False

 

Eso fue Agustín. Ese DefaultDrawing me traumatiza cada vez que lo veo.


  • 0

#28 dooper

dooper

    Advanced Member

  • Miembros
  • PipPipPip
  • 298 mensajes

Escrito 25 abril 2016 - 02:13

Sigo buscando el problema, no decaigo, aunque pierdo motivación, pero ya veo que usar una variable directa tipo string que e insertarla en la base de datos se me hace imposible.


php
  1. Datamodule1.ZQuery2.ParamByName('sexo').AsString:='hombre'; 

Como puedo visualizar los datos del (nombre, edad y sexo) antes de intentar ser grabados?

 

 

Por fín, ya se graba el campo!!!!!. Que solución le he encontrado? ninguna. He vuelto a eliminar el campo de la zona de CREATE, del INSERT y en cualquier lugar que apareciera, (pero eso mismo he venido haciendo hasta ahora). Elimino la base de datos del directorio (eso mismo he venido haciendo también hasta ahora) y vuelvo cargar datos y vaya mi sorpresa que ahora termina por grabar. No le encuentro explicación, quizás tenga que seguir un orden a la hora de borrar el campo y regrabar la bb.dd no graba algunos campos correctamente o la tabla etc..., pero como digo, hasta que vuelva a visualizarme el mismo error, según vaya avanzando.

 

Me dan ganas de parar durante un tiempo con esto, y no molestar más si así lo hago, pero quién dijo que esto era fácil...

 

Un saludo


  • 0

#29 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 25 abril 2016 - 04:28

Te estoy subiendo un vídeo del proceso, así puedes aprender a gestionar bases de datos de forma básica.


  • 0

#30 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 25 abril 2016 - 06:33

Aquí te dejo el video, no tiene audio, así no escuchan mi horripilante voz, espero que con esto tengas una base sólida, un punto de partida, que lo disfrutes.

Nota: ponlo en pantalla completa para mejor resolución.

http://delphiaccess....e-zeos-lazarus/

Saludos.
  • 1

#31 Agustin Ortu

Agustin Ortu

    Advanced Member

  • Moderadores
  • PipPipPip
  • 831 mensajes
  • LocationArgentina

Escrito 25 abril 2016 - 06:58

Entonces no hay duda alguna

 

No habias creado el campo en la base de datos

 

Al eliminar el archivo, se volvio a ejecutar la sentencia CREATE

 

OJO

 

Esa sentencia reza lo siguiente:

 

Si la tabla no existe creala con este campo, este otro, y este otro..

 

Pero si la tabla ya existe entonces no hace nada. No la actualiza y le agrega los campos nuevos


  • 0

#32 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 25 abril 2016 - 07:19

No hay otra explicación. Yo estaba asumiendo que desde el comienzo dooper ya había borrado la versión anterior y recreado una nueva.

Lo que necesita dooper es definir desde el inicio, en su etapa de análisis, que tablas van a ser necesarias y su estructuras y por consiguiente: diseño.

Una vez concretado el diseño de la base de datos, ya podrá empezar a trabajar sin esos tipos de problemas. Sino los iremos tratando una y otra vez cada vez que se modifique la tabla.

 

Y aprovecho para hacer de nuevo la recomendación de que se emplee como clave primaria un campo numérico. Ya sea que tenga un significado artificial o no.

 

Lo que quizá pueda ayudarnos a entender Enecumene es el tema de las afinidades, y el caso de valores reales que serán utilizados como moneda que estabamos debatiendo en el otro hilo.

 

Saludos,

PD: Ya llevo viendo unos 12min del video Fernando. Pinta bastante bueno y se entiende perfectamente todo. (y)


  • 0

#33 dooper

dooper

    Advanced Member

  • Miembros
  • PipPipPip
  • 298 mensajes

Escrito 26 abril 2016 - 10:53

Entonces no hay duda alguna

 

No habias creado el campo en la base de datos

 

Al eliminar el archivo, se volvio a ejecutar la sentencia CREATE

 

OJO

 

Esa sentencia reza lo siguiente:

 

Si la tabla no existe creala con este campo, este otro, y este otro..

 

Pero si la tabla ya existe entonces no hace nada. No la actualiza y le agrega los campos nuevos

 

Que va chicos, eso lo tenia controlado. Sabía que al añadir nuevos campos, debería borrar la base de datos y volver a ejecutar, sino no se añadía el nuevo o nuevos campos en la tabla. Como dije, cada vez que añado campos me preocupo que estén los mismos en todos los sitios donde se hace mención. De ahí el problema que no entiendo porque no guardaba el registro.

 

Cierto es delphius que es conveniente crear un campo numérico con primary key, pero bueno iré acoplando nuevos campos y uno será ese. La razón

por la que no defino desde el principio tablas etc... es porque no quiero engrosar la estructura más de la cuenta, y creo conveniente usar menos

contenido e ir probando por mi mismo,con ensayos y error, y no que de la otra forma uno no sabe por donde seguir si tengo muchas estructuras.

 

gracias como siempre y saludos!


  • 0

#34 dooper

dooper

    Advanced Member

  • Miembros
  • PipPipPip
  • 298 mensajes

Escrito 26 abril 2016 - 10:54

Aquí te dejo el video, no tiene audio, así no escuchan mi horripilante voz, espero que con esto tengas una base sólida, un punto de partida, que lo disfrutes.

Nota: ponlo en pantalla completa para mejor resolución.

http://delphiaccess....e-zeos-lazarus/

Saludos.

 

Voy a ver tu gran aporte enecumene, gracias como siempre, si hay duda le haré mención.

 

Fantástico amigo, desde luego eso es lo que hubiera necesitado desde el comienzo. Como puedo descargarlo!

Hay cosas nuevas que he podido aprender viendo este video! Gracias por tu tiempo y dedicación, siempre ha

personas y ya sabeis quienes sois las que estan para cualquier duda, consulta o problemón.

 

Un saludo


  • 0

#35 dooper

dooper

    Advanced Member

  • Miembros
  • PipPipPip
  • 298 mensajes

Escrito 26 abril 2016 - 01:09

Veréis, como no quería quedar sin probar lo de "columns" en el DBGrid, he insertado columnas a columnas a través del inspector de objetos, ojo el DefaultDrawing está a TRUE y vaya mi sorpresa que al ejecutar el codigo aparece los registros insertados previamente pero sin datos en cada campo. Creo que esto ya se me escapa si no tiene "truco" a mi lógica! hasta ahora los creo con CREATE TABLE IF NOT EXISTS "Nombre" VARCHAR(20), .......

 

Porque ahora si DefaultDrawing = TRUE y creo las TColumns (0.Nombre; 1.Edad; 2.Sexo) el DBgrid no me carga el contenido, sí la fila.

 

Enecumene en el ejemplo el CREATE, INSERT en su demo, lo introduce a traves del inspector de objetos en la propiedad SQL, yo en mi caso lo tengo por código. Lo cual al irme a FieldName (Zquery1) como él hace, no me saca ningun campo automaticamente, como aparece en su demo. 

 

No acabo de cuadrar esto de las columnas en un DBGrid creando TColumns!!!


  • 0




IP.Board spam blocked by CleanTalk.