Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Matheus Brito

em cadastro com checkbox

Recommended Posts

Pessoal caso eu queira implementar um relacionamento desse tipo assim oh:

 

1 credenciado pode ter no minimo 1 e no maximo varias atividades, e 1 atividade pode pertrncer no minimo a 1 credenciado e no maximo varios.

 

Ate ai tudo bem, é um relacionamento vários pra vários, eu já criei uma tabela intermediaria, agora a duvida é a seguinte:

 

Quando eu criar a tela de cadastro de credenciados eu vou inserir um select pra listar as cidades pra o usuario informar a qual cidade ele pertence, e quanto as atividades eu teria que colocar varios checkboxs? E se for colocar esses varios checkboxs com vou jogar no banco uma escolha multipla de atividades?

 

ex: cadastro um credenciado do ramo de construção, só que ele tem mais de uma atividade ele vende outras coisas tb tipo "roupa", no checkbox ia ta as varias atividades ai o cara selecionava construcao e roupas, como eu iria jogar isso no banco?

 

abs espero que tenham entendido

Compartilhar este post


Link para o post
Compartilhar em outros sites

A idéia inicial você já tem.

 

Só que quando for cadastrar, o ideal é você inserir um a um na tabela.

 

Se você colocar todas as checkbox de atividade com o mesmo nome, quando enviar para cadastro, a página receberá os valores separados por vírgula. Assim é só você tratar isso utilizando a função split, por exemplo, e cadastrar código por código na tabela "intermediária" que você criou.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A idéia inicial você já tem.

 

Só que quando for cadastrar, o ideal é você inserir um a um na tabela.

 

Se você colocar todas as checkbox de atividade com o mesmo nome, quando enviar para cadastro, a página receberá os valores separados por vírgula. Assim é só você tratar isso utilizando a função split, por exemplo, e cadastrar código por código na tabela "intermediária" que você criou.

Axo que entendi o que você quis dizer, agora como um campo do tipo numero vai suportar mais de um valor? isso que nao entendi, tudo bem que o credenciado ele pode ter mais de uma atividade, mas como isso vai ficar na tabela? E como vou fazer para inserir uma a uma, poderia ser usando um select em vez de checkbox? Quando eu utilizo split ele num junta tudo em um vetor, como vou jogar no bd a partir dai?

 

Nossa ta uma confusão.

abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você terá de criar um for para navegar no vetor.

 

A sua tabela "intermediária" provavelmente terá dois campos. Um com o código do credenciado e um com o codigo de atividades.

 

Se estivermos falando a mesma coisa, provavelmente a idéia dela é cadastrar o mesmo credenciado com várias atividades diferente.

 

Então dentro do for você vai colocar o insert cadastrando as atividades nessa tabela "intermediaria". Lembre-se que o código do credenciado você já vai possuir por ter feito o cadastro ou a alteração antes de entrar nesse for.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tudo bem ate ai eu entendi.Vou comecar a fazer e ve no que da.

 

Agora por exemplo eu vou fazer um do while not objRS.eof para gerar os checkboxes, pq no caso sao muitos, tem como eu preencher ele dinamicamente desse modo.

 

Gerar eu ja conseguir agora colocar seu nomes nao deu,tem como?

 

abs

 

@Edit ja conseguir gerar tantos os checkboxes como os seus respectivos nomes.

Compartilhar este post


Link para o post
Compartilhar em outros sites

To com um erro aqui no insert, erro estranho.

 

Erro:

 

Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)

[Microsoft][Driver ODBC para Microsoft Access] Erro de sintaxe (operador faltando) na expressão de consulta '73 35259979'.

/matheus/cadastrar_credenciado.asp, line 46

 

Segue código

 

<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<%Option Explicit%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
</head>
<body>

<%
dim vetor_atividades,i,conexao,sql
dim nome_empresa,endereco_empresa,bairro_empresa,comple_empresa,site_empresa,email_e
mpresa,cidade_empresa
dim telefone_empresa,razao_empresa,entrega_empresa,atividades_empresa,fax_empresa

nome_empresa = Request.Form("nome_empresa")
endereco_empresa = Request.Form("endereco")
bairro_empresa = Request.Form("bairro")
comple_empresa = Request.Form("complemento")
site_empresa = Request.Form("site")
email_empresa = Request.Form("email")
cidade_empresa = Request.Form("cod_atividade")
telefone_empresa = Request.Form("telefone")
razao_empresa = Request.Form("razao")
fax_empresa = Request.Form("fax")
entrega_empresa = Request.Form("entrega")

atividades_empresa = Request.Form("atividades")

vetor_atividades = split(atividades_empresa, ",")

for i=LBOUND(vetor_atividades) to UBOUND(vetor_atividades)
	Response.Write vetor_atividades(i) & "<br>"
	next

Set conexao = Server.CreateObject("ADODB.Connection")
conexao.connectionstring= "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="& Server.MapPath("dataBase") &"/bd.mdb"

conexao.open

[b]sql ="insert into credenciados (nome, endereco, complemento, site, cod_cidade, telefone, email, fax, bairro, razao,entrega) values ('" & nome_empresa & "','" & endereco_empresa & "','" & comple_empresa & "','" & site_empresa & "'," & cidade_empresa & "," & telefone_empresa & ",'" & email_empresa & "'," & fax_empresa & ",'" & bairro_empresa & "','" & razao_empresa & "','" & entrega_empresa & "')"[/b]
'Response.Write(sql)
'Response.End()
conexao.execute sql

Response.Write "Credenciado introduzida com sucesso"

conexao.close
set conexao = nothing

%>
</body>
</html>

 

Não faço a menor ideia do que seja o campo numerico telefone e fax nao estao entre as aspas simples, e pelo codigo tudo parece esta certo.

 

vlw

Compartilhar este post


Link para o post
Compartilhar em outros sites

O campo telefone e fax são texto ou númerico?

 

Veja que você está tentando inserir um valor que possui espaço. Se o campo for númerico, não aceita espaço e se for texto você tem que informar entre aspas simples igual você fez com o campo nome_empresa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

essa variavel está sendo enviada como numero cidade_empresa

 

verifique se não é do tipo texto

 

verifique se algum dos campos não está como requerido na tabela

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eram campos texto o telefone o fax consertei as aspas simples, agora apareceu outro erro mais doido ainda:

 

Microsoft OLE DB Provider for ODBC Drivers (0x80004005)

[Microsoft][Driver ODBC para Microsoft Access] A tabela 'credenciados' foi aberta em modo exclusivo por outro usuário, ou foi aberta através da interface do usuário e não pode ser manipulada via programação.

/matheus/cadastrar_credenciado.asp, line 46

 

 

Porem tenho um campo nessa tabela que é do tipó Sim/não como devo representa-lo? Talvez o problema esteja partindo dai.

 

 

abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sobre o modo exclusivo pode ser que você está com o banco de dados aberto no momento do cadastro.

 

Campo sim/não você deve informar 1/0, entre aspas simples.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sobre o modo exclusivo pode ser que você está com o banco de dados aberto no momento do cadastro.

 

Campo sim/não você deve informar 1/0, entre aspas simples.

Como assim informar 1/0?

 

Na interface eu criei dois radio button um com o valor de sim e outro com o valor de nao, como vou colocar esse 1/0?

 

 

preciso fazer o Request.form("name") // para poder pegar a escolha do usuario

num entendi explioca melhor ai.

 

vlw

 

@Edit

Seguinte fiz um if e funcionou.

voce é um genio vlw

xD

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você deve informar 1 como valor para sim (verdadeiro) e 0 como valor para não (falso).

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você deve informar 1 como valor para sim (verdadeiro) e 0 como valor para não (falso).

 

Seguinte fiz um if e funcionou.

voce é um genio vlw

xD

 

P.S nao de como resolvido pq ainda vo ter problemas com aquele outro negocio a questao das atividades pelo codigo você pode perceber que ja fiz uma parte ja ta no vetor as opcoes do usuario.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você terá de criar um for para navegar no vetor.

 

A sua tabela "intermediária" provavelmente terá dois campos. Um com o código do credenciado e um com o codigo de atividades.

 

Se estivermos falando a mesma coisa, provavelmente a idéia dela é cadastrar o mesmo credenciado com várias atividades diferente.

 

Então dentro do for você vai colocar o insert cadastrando as atividades nessa tabela "intermediaria". Lembre-se que o código do credenciado você já vai possuir por ter feito o cadastro ou a alteração antes de entrar nesse for.

 

Seguinte voltando a duvida original, eu quero cadastrar varias atividades para um credenciado , mas como vou ter o cod_empresa se ainda vou estar cadastrando a empresa?

 

Pq como você disse devo colocar o insert dentro do for, mas nao tenho o cod_empresa ainda e ai?

abs e vlw

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só para esclarecer: cod_empresa = código do credenciado certo?

 

Se for isso, os passos são o seguinte:

 

Na página que recebe os dados do formulário você vai criar nessa ordem:

1) Receber os dados do formulário em variáveis

 

2) Criar o INSERT que cadastrará esses dados

 

3) Caso o cod_empresa seja autonumeração você deve fazer um SELECT para recuperar o último cadastro e armazenar em uma váriavel. Pode ser cod_empresa mesmo.

 

4) Você vai criar o FOR que vai pegar as atividades. Dentro desse FOR você coloca o INSERT que vai cadastrar a atividade e o cod_empresa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só para esclarecer: cod_empresa = código do credenciado certo?

 

Se for isso, os passos são o seguinte:

 

Na página que recebe os dados do formulário você vai criar nessa ordem:

1) Receber os dados do formulário em variáveis

 

2) Criar o INSERT que cadastrará esses dados

 

3) Caso o cod_empresa seja autonumeração você deve fazer um SELECT para recuperar o último cadastro e armazenar em uma váriavel. Pode ser cod_empresa mesmo.

 

4) Você vai criar o FOR que vai pegar as atividades. Dentro desse FOR você coloca o INSERT que vai cadastrar a atividade e o cod_empresa.

É exatamente isso mas olhe bem, o passo 3 tem um problema como vou criar um select pra recuperar um dado que nem cadastrei ainda?Pois quando vou cadastrar tenho que cadastrar tudo de vez, ou seja os dados pessoais da empresa(passo 1 e passo 2 feitos) e as atividades, dai é impossivel eu criar um select pra listar as empresas?

 

é isso ai que to com duvidas... esclarece pra mim.

abs e vlw

Compartilhar este post


Link para o post
Compartilhar em outros sites

Impossível não é.

 

Você tem que pensar que o servidor não executa tudo de uma vez. Ele executa linha por linha do código.

 

Então se você fizer uma consulta SQL (SELECT) logo após o INSERT e pedir para armazenar um resultado (o codigo por exemplo) em uma váriavel, vai ser armazenado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendi eu entendi mas nao conseguir fazer nao =/

 

Como faço uma clausula select pra pegar o ultimo valor, que acabou de ser inserido?

E como utilizo a clausula insert dentro de um for(sintaxe) se puder postar os dois exemplos agradeço.

 

abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pegar último código:

"SELECT TOP 1 codigo FROM tabela ORDER BY codigo DESC"
INSERT

campo = split(campo,",")
for i=0 to UBOUND(campo) -1
INSERT bla bla bla
next

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.