Página 1 de 1

Dúvida com checkbox Gravando Resultado em Mysql.

Enviado: 18 Jan 2017 18:45
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.

Dúvida com checkbox Gravando Resultado em Mysql.

Enviado: 19 Jan 2017 11:06
por alxsts
Olá!

Teste definindo a coluna da tabela como tipo de dados BIT, onde zero é falso e um verdadeiro.

Dúvida com checkbox Gravando Resultado em Mysql.

Enviado: 19 Jan 2017 17:10
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.

Dúvida com checkbox Gravando Resultado em Mysql.

Enviado: 19 Jan 2017 19:16
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

Dúvida com checkbox Gravando Resultado em Mysql.

Enviado: 23 Jan 2017 18:32
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.

Dúvida com checkbox Gravando Resultado em Mysql.

Enviado: 23 Jan 2017 21:49
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?

Dúvida com checkbox Gravando Resultado em Mysql.

Enviado: 24 Jan 2017 11:45
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.

Dúvida com checkbox Gravando Resultado em Mysql.

Enviado: 26 Jan 2017 17:02
por Marcos
Graças a ajuda do Nilton Medeiros está resolvido e entendido como funciona a rotina. Obrigado.