Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   como se trabaja con CheckBox1.Checked (https://www.clubdelphi.com/foros/showthread.php?t=90015)

darkbits 19-03-2016 17:20:08

como se trabaja con CheckBox1.Checked
 
Hola a todo el club
estoy trabajando con CheckBox1 que me da un TRUE o FALSE
quiero guardar CheckBox1.Checked en una DB mysql, en mi DB lo declare el campo como tinyint o hay alguien que guarda true o false?

cuando quiero guardar me da error les coloc
Código SQL [-]
     _DM.consulta1.close;
     _DM.consulta1.SQL.Text:='INSERT INTO USUARIOS(nombre_usuario,estado_usuario) values ('+QuotedStr(edit1.text)+','+QuotedStr(CheckBox1.Checked)+')';
     _DM.consulta1.ExecSQL;
     _DM.tusuarios.Refresh;
me sale eso "there is no overloaded version Of 'QuotedStr' that can be called with these arguments" y me apunta al CheckBox1.Checked

agradesco sus respuesta.

jhonny 19-03-2016 18:49:33

Siguiendo la manera en como lo estás haciendo y si usas una de las últimas versiones de Delphi, intenta:

Código Delphi [-]
   __DM.consulta1.close;
     _DM.consulta1.SQL.Text:='INSERT INTO USUARIOS(nombre_usuario,estado_usuario) values ('+QuotedStr(edit1.text)+','+QuotedStr(CheckBox1.Checked.ToString)+')';
     _DM.consulta1.ExecSQL;
     _DM.tusuarios.Refresh;

Si no:


Código Delphi [-]
  _DM.consulta1.close;
     _DM.consulta1.SQL.Text:='INSERT INTO USUARIOS(nombre_usuario,estado_usuario) values ('+QuotedStr(edit1.text)+','+QuotedStr(BoolToStr(CheckBox1.Checked))+')';
     _DM.consulta1.ExecSQL;
     _DM.tusuarios.Refresh;

darkbits 19-03-2016 19:54:56

jhonny

estoy trabajando con DX 10
la primera opción me funciono de maravilla

me sale esto:
CheckBox1.Checked esta en TRUE me me guarda -1
CheckBox1.Checked esta en FALSE me me guarda 0

en la DB lo puse el campo type "Varchar" hay algun tipo que soporta 0 o 1 ? o true o false ?

Casimiro Notevi 19-03-2016 20:02:59

En mysql creo que sí.

AgustinOrtu 19-03-2016 22:36:26

Usa parametros y que los componentes se encargen de hacer el trabajo sucio de convertir el boolean a la representacion que le gusta a mysql

darkbits 19-03-2016 22:43:18

cuando guardo esto QuotedStr(BoolToStr(CheckBox1.Checked))
si CheckBox1 esta en TRUE Guarda -1
si CheckBox1 esta en FALSE Guarda 0

no debería ser true 1 y false 0 ?
mi campo de DB lo puse varchar para no complicarme ya q no encontre alguien que guarde true o false o 1 o 0

Casimiro Notevi 19-03-2016 23:13:32

Yo siempre uso 0/1
Mira si tu checkbox tiene alguna propiedad para los valore true y false.

AgustinOrtu 19-03-2016 23:17:50

Cita:

Empezado por darkbits (Mensaje 503493)
cuando guardo esto QuotedStr(BoolToStr(CheckBox1.Checked))
si CheckBox1 esta en TRUE Guarda -1
si CheckBox1 esta en FALSE Guarda 0

no debería ser true 1 y false 0 ?
mi campo de DB lo puse varchar para no complicarme ya q no encontre alguien que guarde true o false o 1 o 0

Supongo que será por la representacion binaria a bajo nivel

El tipo Boolean esta representado internamente como un byte:

False = 00000000 binario = 0 decimal
True = 11111111 binario = -1 decimal

El primer bit indica signo (1 negativo, 0 positivo)

darkbits 19-03-2016 23:25:45

hay alguna forma que el CheckBox me de directamente:

true= 1
false= 0

configurando alguna propiedad?

AgustinOrtu 19-03-2016 23:45:02

Olvidate del Checkbox, estas trabajando con el tipo Boolean

El problema no es el tipo Boolean. El problema es que en la base le pusiste varchar :confused::confused:

Si buscas en la documentacion, a partir de determinada version introdujeron el tipo BIT que es un alias de TINYINT(1). Dentro de los TINYINT, el valor 0 es considerado False, el resto son True

Luego, desde Delphi, no tiene porque importarte como MYSQL maneja el tipo Boolean

Usa parametros en tus consultas y comandos sql

Código Delphi [-]
var
  qry: TADOQuery;
begin
  qry := TADOQuery.Create(NIL);
  try
   // grabar en la BD
   qry.SQL.Text := 'INSERT INTO Tabla (Flag) VALUES (:Flag) ';
   qry.Parameters.ParamByName('Flag').DataType := ftBoolean;
   qry.Parameters.ParamByName('Flag').Value := CheckBox1.Checked;

   // recuperar valor
   qry.SQL.Text := 'SELECT * FROM Tabla';
   qry.Open;
   CheckBox1.Checked := qry.FieldByName('Flag').AsBoolean;     
  finally
    qry.Free;
  end;
end;

Casimiro Notevi 19-03-2016 23:45:42

El dbcheckbox sí que lo tiene.
Pero creo que te estás complicando mucho, o quizás no entiendo qué estás haciendo.
Para conseguir uno o cero es simple:
Código Delphi [-]
if elcheckbox.checked then iVariable=1 else iVariable=0;

AgustinOrtu 19-03-2016 23:47:23

Me falto el ejemplo de filtrar:


Código Delphi [-]
  qry.SQL.Text := 'SELECT * FROM Tabla WHERE Flag = :Flag';
  qry.Parameters.ParamByName('Flag').DataType := ftBoolean;
  qry.Parameters.ParamByName('Flag').Value := Checkbox1.Checked;
  qry.Open;

darkbits 20-03-2016 00:03:21

solucionado

utilice los 3 últimos ejemplos del post y si funciona mil gracias Casimiro, agustin y jhony

ecfisa 20-03-2016 00:05:11

Hola.
Cita:

Empezado por darkbits (Mensaje 503496)
hay alguna forma que el CheckBox me de directamente:

true= 1
false= 0

configurando alguna propiedad?

Para obtener el valor entero (0/1) desde un TCheckBox:
Código Delphi [-]
   valor := Integer(tuCheckBox.Checked);
Sin embargo, creo que el componente mas adecuado para manejar la entrada de datos no es el TCheckBox sino el TDBCheckBox. A él podes asociar directamente la columna en cuestión y tiene las propiedades ValueChecked y ValueUncheck en las que podes definir el tipo de dato resultante.

Saludos :)


La franja horaria es GMT +2. Ahora son las 08:42:10.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi