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:
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
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.