Ir para conteúdo

POWERED BY:

Arquivado

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

Mauricio Ramos

multiple insert, como funciona?

Recommended Posts

Fala pessoal,

 

tenho um menu multiple select q quero postar os dados

em uma tabela mas preciso q cada campo desse

menu seja colocado na tabela NEWCLASS em

forma de looping.

 

Explicando melhor, esse menu multiple select contem

categorias de uma noticia, entao como ele pode estar

em mais de uma categoria, preciso q cada item selecionado

seja inserido na tabela NEWSCLASS com o ID da noticia

para q depois possa fazer o relacionamento de noticas versus

categorias e listar as q se encaixam na mesma classe.

 

O que eu fiz? .... bom.. qdo vou inserir, eu primeiro

insiro a noticia na tabela NEWS! depois faco um select

pra pegar qual ID ela esta na tabela NEWS, e tento

inserir na tabela de categorias (NEWCLASS) a categoria

e o ID q ela ficou na outra tabela (NEWS)...

 

ai comeca meu problema...

 

o codigo ficou assim:

 

ID = rs("ID") ' variavel q guarda o ID q ficou na tabela de noticias

 

 

ADICIONAR2="INSERT INTO newsclass (ID, StrCategoria)"

 

x=1

while(x<>0)

VarCategoria = request.form("categoria" & x)

if VarCategoria <> "" then

ADICIONAR2=ADICIONAR2 & "("& ID &" ,'"& VarCategoria &"')"

x=x+1

else

x=0

end if

wend

 

cat.open sql,conexao

conexao.execute ADICIONAR2

 

 

O q acontece eh q nao funciona.... na tabela de noticias os dados

sao inseridos mas qdo vai inserir na tabela de categorias da noticia

(NEWSCLASS), ele da esse erro:

 

 

Error Type:

Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)

[MySQL][ODBC 3.51 Driver][mysqld-5.0.22-community-nt]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

/confirma_.asp, line 185

 

 

na linha 185 é exatamente o conexao.execute ADICIONAR2

 

 

Que q eu to fazendo de errado???

 

abraços

Mauricio

Compartilhar este post


Link para o post
Compartilhar em outros sites

se eu entendi bem você tem o seguinte...2 tabelas, uma filha e outra pai...você quer pegar o código(id) da tabela pai e colocar na tabela filha junto com vários dados...é isso?

 

se for faça assim

 

sql=insert into tabelaPai (id) values ("&idSelect&") set rs=con.execute(sql)

depois

 

do while i < totalSubItens sql=insert into tabelaFilho (id,conteudo) values ("&idSelect&", '"&strConteudo&"')set rs=con.execute(sql)i=i+1loop

pelo que entendi é essa logica que quer atingir, onde o total de subItens será a quantidade de conteudos digitados no formulario

 

 

corrigindo do while i < totalSubItens (enqianto i menor que totalSubItens)

Compartilhar este post


Link para o post
Compartilhar em outros sites

se eu entendi bem você tem o seguinte...2 tabelas, uma filha e outra pai...você quer pegar o código(id) da tabela pai e colocar na tabela filha junto com vários dados...é isso?se for faça assim

sql=insert into tabelaPai (id) values ("&idSelect&") set rs=con.execute(sql)
depois
do while i < totalSubItens sql=insert into tabelaFilho (id,conteudo) values ("&idSelect&", '"&strConteudo&"')set rs=con.execute(sql)i=i+1loop
pelo que entendi é essa logica que quer atingir, onde o total de subItens será a quantidade de conteudos digitados no formulariocorrigindo do while i < totalSubItens (enqianto i menor que totalSubItens)
Opa, valeu Jonathano q eu quero eh q o menu multiselect do form... q tem um monte de categoriasonde a noticia pode estar, seja incluido cada linha selecionada nele,na tabela newsclass... onde o ID deve bater com o da noticia pra depoispoder fazer a relacao entre as duas tabelas...Vou tentar usar o codigo q você descreveu... muito obrigado!!!abração

Compartilhar este post


Link para o post
Compartilhar em outros sites

velho.. da um response.write na string SQL.. que deveria ser inserida no banco.. pra escrever na tela como está ficando a sintaxe do comando..Com isso, da pra tentar debugar melhor o erro!ps: tem que comentar a linha q executa o sql

Compartilhar este post


Link para o post
Compartilhar em outros sites

Legal gente .. desculpa a demora pra dar continuidade

no tópico, mas agora consegui retomar meus estudos aqui

e consegui inserir cada item na tabela de categorias... graças

a ajuda de vcs

 

Fiz assim:

 

For Total = 0 To Request.Form("categoria").Count

Total = Total+1

Next

 

nao sei pq ele conta sempre um cara a mais , exemplo,

se eu seleciono dez itens no menu multiple select, ele coloca 11 como 'Total'

mas ok... depois tento entender e vejo como solucionar isso

 

usei o código q nosso colega postou aqui:

 

ADICIONAR2= "insert into newsclass (ID,StrCategoria) values ("&ID&", '"&VarCategoria&"')"

 

do while i < Total

conexao.execute ADICIONAR2

i=i+1

loop

 

Funcionou direitinho.. ele faz o insert enquanto o 'i' nao tiver o valor do Total!

e insere a quantidade de linhas na tabela de categorias

 

Agora o problema é que ele insere a qtdade de linhas correta, e repete em

todas a quantidade de categorias. Assim:

 

ID StrCategoria

96 categoria1,categoria2,categoria3

96 categoria1,categoria2,categoria3

96 categoria1,categoria2,categoria3

 

O que eu preciso é q fique assim na tabela:

 

ID StrCategoria

96 categoria1

96 categoria2

96 categoria3

 

Ou seja, ele 'quebre' essas categorias em linhas e mantenha o ID!

 

Como posso chegar nesse resultado ???

 

abração

Mauricio

Compartilhar este post


Link para o post
Compartilhar em outros sites

estas categorias sao passadas como??se elas vem separadas por virgula e tal voce pode usar a funcao SPLIT para quebrar em indices de um array e assim inserir uma a uma dentro de um laço FOR

Compartilhar este post


Link para o post
Compartilhar em outros sites

estas categorias sao passadas como??se elas vem separadas por virgula e tal voce pode usar a funcao SPLIT para quebrar em indices de um array e assim inserir uma a uma dentro de um laço FOR

Opa..entao elas vem separadas por virgula do menu multiple select!mas realmente nao sei como inserir no formato q passei no postanterior.humm.. array? ... tenho q pesquisar como montar isso!abração

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

estas categorias sao passadas como??

 

se elas vem separadas por virgula e tal voce pode usar a funcao SPLIT para quebrar em indices de um array e assim inserir uma a uma dentro de um laço FOR

Opa..

entao elas vem separadas por virgula do menu multiple select!

mas realmente nao sei como inserir no formato q passei no post

anterior.

 

humm.. array? ... tenho q pesquisar como montar isso!

 

abração

 

Legal!! consegui !

o código ficou assim:

 

sMyString = request.Form("categoria")

 

arrResult = Split(sMyString, ",")

 

set cat = Server.CreateObject("ADODB.Recordset")

For iCounter = 0 to Ubound(arrResult)

conexao.execute "insert into newsclass (ID,StrCategoria) values ("&ID&", '"&arrResult(iCounter)&"')"

Next

 

Agora meu problema é o seguinte... qdo você seleciona mais de uma opção de categoria

q está no menu multiple select q esta no fomrulário e estas estão na mesma categoria,

por exemplo:

 

/serviços públicos/praças -------> categoria 1

/serviços públicos/iluminação --> categoria 1

/serviços públicos/entulhos -----> categoria 1

 

/entidade social/creches --------->categoria 2

/entidade social/escolas ---------> categoria 2

 

Eu não quero q ele insira registros repetidos na tabela, pois

seria besteira ... ele agora insere assim na tabela:

 

 

ID_______Categoria

107______ 1

107______ 1

107______ 1

108______ 2

108______ 2

 

entao a pegunta q fica é.. tem como construir

alguma função q possa eliminar qdo as categorias forem as mesmas?

pra evitar esse acumulo de inserts repetidos????

 

abração

Compartilhar este post


Link para o post
Compartilhar em outros sites

antes de inserir cada registro faça uma consulta para saber se o valor que será inserido já foi cadastrado

 

 

 

sMyString = request.Form("categoria") arrResult = Split(sMyString, ",") set cat = Server.CreateObject("ADODB.Recordset")For iCounter = 0 to Ubound(arrResult)conexao.execute "select id,strCategoria from newsclass where ID="&ID&" and StrCategoria= '"&arrResult(iCounter)&"'"if conexao.eof then   conexao.execute "insert into newsclass (ID,StrCategoria) values ("&ID&", '"&arrResult(iCounter)&"')"end ifNext

Quando postar, procure colocar seu código entre as tags ao invez de colorir o mesmo, isso dificulta a visualização

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa sorry... :) e valeu pelo post!!!

 

 

então.. coloquei como você sugeriu mas deu erro:

 

Error Type:

ADODB.Connection (0x800A0BB9)

Arguments are of the wrong type, are out of acceptable range, or are in conflict with one another.

/confirma.asp, line 185

 

essa é a linha 185

if conexao.eof then

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.