Dúvida com checkbox Gravando Resultado em Mysql.

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
Marcos
Usuário Nível 3
Usuário Nível 3
Mensagens: 355
Registrado em: 20 Set 2003 09:16
Localização: Cáceres/Mato Grosso

Dúvida com checkbox Gravando Resultado em Mysql.

Mensagem por Marcos »

Procurei informações na Internet e disseram que o Tipo de Campo que recebe informações .T.-Verdadeiro ou .F.-Falso no mysql seria o Booleano outros dizem que foi substituído por tinyint, o problema é que não estou conseguindo gravar informações do Checkbox em nenhum destes formatos, acontece que também poderá ter erro de código, por isso peço novamente a ajuda de vocês, vejam o código abaixo:

Código: Selecionar todos

static function dados(parametro)
....
local x_opcao_001  := .F.
define checkbox chkbox_001
    caption 'Cadastro Propriedade'
    col 150
    row 050
    width 350
    value x_opcao_001
    fontname 'tahoma'
    fontsize 10
    fontbold .T.
    transparent .F.
end checkbox
....
********************************************
static function gravar(parametro)
....
local v_cadfazendas:= form_dados.chkbox_001.value
cQuery := "insert into usuarios (login_usuario,email_usuario,[b]cad_fazendas[/b],usario_bloqueado) values ('"
cQuery += v_login       +"','"
cQuery += v_email       +"','"
cQuery += v_cadfazendas +"','"
cQuery += v_bloqueado   +"')"
oQuery := oQuery := oServer:Query( cQuery )
if oQuery:NetErr()
   msginfo('Erro na Inclusão : '+oQuery:Error())
   return(nil)
endif
oQuery:Destroy()
.....
Como poderia gravar na Tabela "usuarios" a informação cad_fazendas ?
As outras informações que não são checkbox estou conseguindo gravar normalmente, estou gravando TEXT, COMBO mas CHECK não.
Atenciosamente,
_____________________________
Marcos Antonio da Silva
marcosilva90@hotmail.com
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Dúvida com checkbox Gravando Resultado em Mysql.

Mensagem por alxsts »

Olá!

Teste definindo a coluna da tabela como tipo de dados BIT, onde zero é falso e um verdadeiro.
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
Marcos
Usuário Nível 3
Usuário Nível 3
Mensagens: 355
Registrado em: 20 Set 2003 09:16
Localização: Cáceres/Mato Grosso

Dúvida com checkbox Gravando Resultado em Mysql.

Mensagem por Marcos »

Se mudar o campo para "BIT" da erro de variável na linha 23-cQuery += v_cadfazendas +"','" se mudar para "BIT" e mudar na linha 23-cQuery += alltrim(transform( v_cadfazendas, "@R !" )) +"','" aparece o erro dentro do sistema e não grava mas o sistema não cai "Erro na Inclusão: Data too long for column 'cad_fazendas' at row 1". Lembrando que a variável está declarada assim: local x_opcao_001 := 0
Percebi que o Checkbox retorna um valor Verdadeiro ou Falso, portanto temos que saber como gravar no campo do Mysql este valor e também como converter isto dentro do código para que o Mysql aceite este valor.
Atenciosamente,
_____________________________
Marcos Antonio da Silva
marcosilva90@hotmail.com
wmanesco
Usuário Nível 3
Usuário Nível 3
Mensagens: 116
Registrado em: 09 Set 2016 13:18
Localização: ITAJAI - SC

Dúvida com checkbox Gravando Resultado em Mysql.

Mensagem por wmanesco »

Marcos, acabei de fazer um teste utilizando o Mysql Query Browser, e quando crio um campo boolean ele automaticamente troca para TINYINT, e consegui inserir qualquer valor int, porém se fazer uma query utilizando "false" ou "true", ele grava 0 para false e 1 para true, algo assim:

Código: Selecionar todos

insert into test_table(bool) values(false);
Então acredito que você possa fazer uma função para retornar true ou false.

Código: Selecionar todos

FUNCTION RetornaValorBoolMysql( lValue )
   IF lValue
       RETURN "true"
   ENDIF 
RETURN "false"
E chamar no seu insert passando o valor do checkbox

Código: Selecionar todos

cQuery := "insert into usuarios (login_usuario,email_usuario,[b]cad_fazendas[/b],usario_bloqueado) values ('"
	cQuery += v_login       +"','"
	cQuery += v_email       +","
	cQuery += RetornaValorBoolMysql(v_cadfazendas) +","
	cQuery += v_bloqueado   +"')"

Isso se v_cadfazendas for bool.

Espero ter ajudado, desculpa qualquer erro, desenvolvi o código aqui no post, não foi testado...

Abraço
William Manesco
Harbour 3.x | Fivewin | BCC | MySQL (TDolphin) | HBQT | HBIDE | Atom
Avatar do usuário
Marcos
Usuário Nível 3
Usuário Nível 3
Mensagens: 355
Registrado em: 20 Set 2003 09:16
Localização: Cáceres/Mato Grosso

Dúvida com checkbox Gravando Resultado em Mysql.

Mensagem por Marcos »

Olá wmanesco, fiz o teste que sugeriu mas no código do sistema não funcionou, a variável que estou definindo é: local x_opcao_001 := 0 o erro da imagem anexa aparece.
Anexos
Erro ao tentar gravar no campo Tinyint
Erro ao tentar gravar no campo Tinyint
Atenciosamente,
_____________________________
Marcos Antonio da Silva
marcosilva90@hotmail.com
wmanesco
Usuário Nível 3
Usuário Nível 3
Mensagens: 116
Registrado em: 09 Set 2016 13:18
Localização: ITAJAI - SC

Dúvida com checkbox Gravando Resultado em Mysql.

Mensagem por wmanesco »

Voce está utilizando o tipo boolean? E ao inserir utilizando "true" ou "false"? Por que entendi que sua variavel é 0.. não sei se fui claro, mas no exemplo que eu postei utiliza-se o tipo booleano(que aparentemente ele altera para tinyint) e para inserir utiliza-se true ou false

Código: Selecionar todos

INSERT INTO tb (field) VALUES (true)
E me diga outra coisa, está utilizando a versão mais nova do mysql?
William Manesco
Harbour 3.x | Fivewin | BCC | MySQL (TDolphin) | HBQT | HBIDE | Atom
Avatar do usuário
NiltonGM
Usuário Nível 3
Usuário Nível 3
Mensagens: 397
Registrado em: 05 Jun 2014 23:47
Localização: Caieiras/SP

Dúvida com checkbox Gravando Resultado em Mysql.

Mensagem por NiltonGM »

Olá Marcos,

No MySQL para campo boolean você usa o TINYINT (1), not null, default 0, onde 0 = .F. e 1 = .T. (ou > 0 = .T.)
Use assim para setar no banco de dados:

Código: Selecionar todos

// Do Harbour para MySQL
// No insert
sql := "INSERT INTO <tabela> SET coluna_boolean = " + if( lCampoLogico, 1, 0 ) + ", "
sql += "coluna_2 = 'abcd...', "
sql += "coluna_3 = '2017-01-24 12:02:00';"

// No update
sql := "UPDATE usuarios SET coluna_boolean = " + if( lCampoLogico, 1, 0 ) + ", "
sql += "coluna_2 = 'abcd...', "
sql += "coluna_3 = '2017-01-24 12:02:00' WHERE user_id = 43;" 
Para o Inverso use:

Código: Selecionar todos

// Do MySQL para Harbour
lCampoLogico := !( oRow:GetField('coluna_boolean') == 0 )
Nota: Eu só uso o VALUES (coluna1,...,coluna(n)) quando tenho um loop com vários registros (linhas) para inserir de uma única vez.

Espero ter ajudado e desculpa a demora.
Nilton Medeiros
nilton@sistrom.com.br
Avatar do usuário
Marcos
Usuário Nível 3
Usuário Nível 3
Mensagens: 355
Registrado em: 20 Set 2003 09:16
Localização: Cáceres/Mato Grosso

Dúvida com checkbox Gravando Resultado em Mysql.

Mensagem por Marcos »

Graças a ajuda do Nilton Medeiros está resolvido e entendido como funciona a rotina. Obrigado.
Atenciosamente,
_____________________________
Marcos Antonio da Silva
marcosilva90@hotmail.com
Responder