Campo "null" no Formulário <RESOLVIDO>

Bom dia!

Sou novato no SC e estou com um problema, que deve ser simples de resolver:

Preciso incluir numa tabela um campo, chave estrangeira que, conforme uma condição imposta pelo operador, pode ser “null”.
É um campo “SELECT”, e´já coloquei “Título/negação” = “S” e “Valor Negativo” = NULL. Dá um erro, desta chave estrangeira ao incluir no banco.

Já acrescentei no evento onBeforeInsert {campo} = “null” e {campo} = null, também deu o mesmo erro.

Também não posso colocar no BD Insert porque o campo pode não ser “null”.

Meu BD é o Mysql, no Windows.

Quem puder me ajudar, agradeço!

Celso,

Uma chave estrangeira não pode em hipótese alguma ser null. Crie um atributo para esse caso na tabela principal e faça então a gravação na tabela secundária.

Na verdade no Mysql o campo chave estrangeira pode ser null ou coincidir com um registro na tabela filha. O que não pode é o valor da chave estrangeira não existir na outra tabela.
Vc pode enviar a mensagem de erro?
Tente isso:
Na configuração do campo, coloque Usar Título/Negação = SIM, coloque um título e deixe o Valor Negativo em branco.
Ainda na configuração deste mesmo campo, coloque Valor no Banco de Dados = Nulo para inserção e atualização.
Boa sorte.
[]s

Não custa nada lembrar um detalhe: neste seu caso, o campo chave estrangeira não pode ser NOT NULL no banco ;-))

Allan,

Sua sugestão atende perfeitamente quando o campo é “null”.

Mas, como te disse, neste formulário, uma informação do usuário é que define se o campo vai ser “null” ou não. E colocando " Valor no Banco de Dados = Nulo para inserção" o campo SEMPRE será incluído como null.

O que não estou conseguindo, no SC, é controlar a atribuição ou não do “null” ao campo.

Estou, por enquanto, propenso a criar 2 rotinas, ou “quebrar o galho” atribuindo um valor válido qualquer e depois regravar altarando o campo pra “null”.

Mas por enquanto valeu!

[]s

Celso,
Na verdade só vai ser enviado null ao banco caso não haja valor no campo.
Tenho essa mesma situação em uma aplicação minha e funciona perfeitamente.
Só me esclarece uma coisa, o que define se o campo vai ser null? Outro campo? Explica isso melhor.
[]s

É exatamente isso Allan.

É uma tabela de baixas de “Contas a Pagar”.
A baixa pode ser do tipo “1 = Pagamento” ou “2 - Cancelamento”.
Quando o usuário define o tipo 1, administro, através de um evento OnClick, o acesso os campo da Conta.
Quando o usuário define o tipo 2, não acesso a conta e tenho que gravar “NULL”.

Atualmente a rotina está com Valor do campo para Inserção em branco. Quando coloquei “Nulo”, estava sempre gravando NULL, desconsiderando a informação da Tela.

VEJAS AS MENSAGEM DE ERRO DE AGORA:

Erro ao incluir na base de dados:
Cannot add or update a child row: a foreign key constraint fails (coorporativo.baixas_pagar, CONSTRAINT TIPO_MOV_FINANC-BXP
FOREIGN KEY (TIPO-MOV_FINANC_BXP) REFERENCES tipos_movs_financs (CODIGO_TMV)
ON DELETE NO ACTION ON UPDATE NO ACTION)

INSERT INTO baixas_pagar (NUMERO_BXP, DATA_BXP, VALOR_BXP, COMPLEMENTO_BXP, TIPO_BAIXA_BXP, TIPO_MOV_FINANC_BXP, DOC_FINANC_BXP, CONTA_BXP)
VALUES (3, ‘2014-05-28’, 0, ‘’, 3, ‘’, 0, ‘’)

Repare que onde deveria estar NULL está ‘’ (DOC_FINANC-BXP e CONTA_BXP).

Tenta o seguinte:
Cria o campo do tipo select (manual) e coloca os valores Pagamento = 1 e Cancelamento = vazio.
Na configuração deste campo, coloque Valor no Banco de Dados = Nulo para inserção e atualização.
Na teoria, ele vai usar o valor 1 para pagamento e null para cancelamento.
Testa e me diz.
[]s

Allan,

Já tentei “quase isso”, porque não é o campo TIPO que tenho que gravar “NULL” e sim a “CONTA”.

Desculpe… teclei algo aqui e enviei antes de terminar…rsss
Mas completando a informação anterior…

Eu coloquei conta como Select (automático) e no campo de negação coloquei NULL.

Quando faço isso, no INSERT o SC coloca NULL entre aspas… Daí dá o erro.

Ok, vou fazer uns testes…

Celso testa o seguinte:
No campo conta, com select automático, coloque ‘Valor no Banco de Dados’ = Nulo para ‘inserção’ e ‘atualização’ e coloque ‘Usar Título/Negação’ = SIM, coloque um título e deixe o Valor Negativo em branco.
No campo TIPO, com select manual, coloca os valores Pagamento = 1 e Cancelamento = 2.
Crie um evento ajax onchange para o campo TIPO e coloque um código mais ou menos assim:
if ({tipo}==2){
{conta} = ‘’;
}

Aqui deu certo.
[]s

Dá até pra incrementar um pouco o evento onChange:
if ({tipo} == 2){
{conta} = ‘’;
sc_field_display({conta}, ‘off’);
} else {
sc_field_display({conta}, ‘on’);
}

Blz Allan. Agora deu certo!
Valeu pela ajuda!

[]s