Ir para conteúdo

POWERED BY:

Arquivado

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

mara.GAD

Puxar dados do BD MySQL

Recommended Posts

Olá a todos!

Gente, fiz uma trabalhosa pesquisa nos correios pra fazer um banco de dados de preços de remessas internacionais. Só que agora não tô conseguindo achar de jeito nenhum onde estou errando que não consigo puxar esses dados para o meu carrinho de compras.

 

A estrutura da tabela é essa:

-- 
-- Estrutura da tabela `frete_internacional`
-- 

CREATE TABLE `frete_internacional` (
  `id` int(11) NOT NULL auto_increment,
  `pais` varchar(150) NOT NULL default '',
  `cod_pais` int(3) NOT NULL default '0',
  `zona` int(1) NOT NULL default '0',
  `kgs` int(2) NOT NULL default '0',
  `tipo_frete` varchar(150) NOT NULL default '',
  `cod_tipofrete` int(1) NOT NULL default '0',
  `preco_tabela` varchar(50) NOT NULL default '0,00',
  `taxa_manipulacao` int(2) NOT NULL default '0',
  `percentual_aumento` int(3) NOT NULL default '0',
  `valor_frete` varchar(50) NOT NULL default '0,00',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=642 ;

-- 
-- Extraindo dados da tabela `frete_internacional`
-- 

INSERT INTO `frete_internacional` (`id`, `pais`, `cod_pais`, `zona`, `kgs`, `tipo_frete`, `cod_tipofrete`, `preco_tabela`, `taxa_manipulacao`, `percentual_aumento`, `valor_frete`) VALUES (1, 'argentina', 10, 1, '1', 'leve_economico', 1, '0', '0', 0, '32,00'),
(2, 'argentina', 10, 1, '1', 'leve_prioritario', 2, '0', '0', 0, '40,00'),
(3, 'argentina', 10, 1, '2', 'leve_economico', 1, '0', '0', 0, '56,00'),
(4, 'argentina', 10, 1, '2', 'leve_prioritario', 2, '0', '0', 0, '62,00'),
(5, 'argentina', 10, 1, '3', 'economico', 3, '0', '0', 0, '64,00'),
(6, 'argentina', 10, 1, '3', 'expresso', 4, '0', '0', 0, '124,00'),
(7, 'argentina', 10, 1, '4', 'economico', 3, '0', '0', 0, '69,00'),
(8, 'argentina', 10, 1, '4', 'expresso', 4, '0', '0', 0, '139,00'),
(9, 'argentina', 10, 1, '5', 'economico', 3, '0', '0', 0, '78,00'),
(10, 'argentina', 10, 1, '5', 'expresso', 4, '0', '0', 0, '160,00'),

### E aí mais 600 e poucos registros... são 65 países com os valores para pacotes até 5 kgs ###

Aí puxo os dados da seguinte forma:

<%
                         Set lpri1 = conexao.Execute("SELECT * FROM frete_internacional WHERE cod_pais = session(country) And kgs = 1 And cod_tipofrete = 2")
                         Set leco1 = conexao.Execute("SELECT * FROM frete_internacional WHERE cod_pais = session(country) And kgs = 1 And cod_tipofrete = 1")
                         Set lpri2 = conexao.Execute("SELECT * FROM frete_internacional WHERE cod_pais = session(country) And kgs = 2 And cod_tipofrete = 2")
                         Set leco2 = conexao.Execute("SELECT * FROM frete_internacional WHERE cod_pais = session(country) And kgs = 2 And cod_tipofrete = 1")

                         Set exp3 = conexao.Execute("SELECT * FROM frete_internacional WHERE cod_pais = session(country) And kgs = 3 And cod_tipofrete = 4")
                         Set eco3 = conexao.Execute("SELECT * FROM frete_internacional WHERE cod_pais = session(country) And kgs = 3 And cod_tipofrete = 3")
                         Set exp4 = conexao.Execute("SELECT * FROM frete_internacional WHERE cod_pais = session(country) And kgs = 4 And cod_tipofrete = 4")
                         Set eco4 = conexao.Execute("SELECT * FROM frete_internacional WHERE cod_pais = session(country) And kgs = 4 And cod_tipofrete = 3")
                         Set exp5 = conexao.Execute("SELECT * FROM frete_internacional WHERE cod_pais = session(country) And kgs = 5 And cod_tipofrete = 4")
                         Set eco5 = conexao.Execute("SELECT * FROM frete_internacional WHERE cod_pais = session(country) And kgs = 5 And cod_tipofrete = 3")


session("PesoTotalInter_levepri1") = lpri1("valor_frete")
session("PesoTotalInter_leveeco1") = leco1("valor_frete")
session("PesoTotalInter_levepri2") = lpri2("valor_frete")
session("PesoTotalInter_leveeco2") = leco2("valor_frete")

session("PesoTotalInter_exp3") = exp3("valor_frete")
session("PesoTotalInter_eco3") = eco3("valor_frete")
session("PesoTotalInter_exp4") = exp4("valor_frete")
session("PesoTotalInter_eco4") = eco4("valor_frete")
session("PesoTotalInter_exp5") = exp5("valor_frete")
session("PesoTotalInter_eco5") = eco5("valor_frete")


%>
                         

A sessão tá ok recebendo o valor do páis (country)

A conexão com o banco (nesta página tem o include com o arquivo de conexão, ok tbm)

 

Mas os valores que é bom.... Nada!!!

 

Lembrando que a estrutura do SELECT que fiz, não existe a possibilidade de valores repetidos, cada um é único mesmo, assim como tbm nao tem a possibilidade de valores nulos (não encontrar o valor na tabela)

Será que uma boa alma consegue enxergar onde tá o meu erro???

 

Ah!! Não sei se esse banco seria útil pra alguém, mas se alguém se interessar pra usar em algum projeto, posso enviar ele completo.

 

Obrigada antecipado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Resuma todos os seus Selects nesse:

 

Sql = "SELECT * FROM frete_internacional WHERE cod_pais = session(country) And kgs in(1,2,3,4,5) And cod_tipofrete in(1,2,3,4)"
Set Rs = Server("ADODB.RecordSet")

Faça um While


While Not Rs.EOF
   Response.Write(Rs("frete_internacional")& "<br />")
Rs.MoveNext
Wend

Veja se imprime...

E veja se também o seu MySQL não está como Case Sensitive, se sim você tem que colocar os nomes das colunas exatamente com os nomes que as criou, estou falando se no caso você digitou com maiusculas ou minusculas.

 

Se você colocou o nome do campo como Frete_Internacional, no ASP tem que ser a mesma coisa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Resuma todos os seus Selects nesse:

 

Sql = "SELECT * FROM frete_internacional WHERE cod_pais = session(country) And kgs in(1,2,3,4,5) And cod_tipofrete in(1,2,3,4)"
Set Rs = Server("ADODB.RecordSet")

Faça um While


While Not Rs.EOF
   Response.Write(Rs("frete_internacional")& "<br />")
Rs.MoveNext
Wend

Veja se imprime...

E veja se também o seu MySQL não está como Case Sensitive, se sim você tem que colocar os nomes das colunas exatamente com os nomes que as criou, estou falando se no caso você digitou com maiusculas ou minusculas.

 

Se você colocou o nome do campo como Frete_Internacional, no ASP tem que ser a mesma coisa.

 

Oi Dee, obrigada pela resposta... Deu certo sim com o While, imprimiu. Só que com um pequeno probleminha:

na instrução que eu puxo o código do pais (cod_pais = session(country) a página fica carregando uma vida inteira e não dá certo. Sei que não é problema da sessão, pq a uso para outros fins e ela é passada normalmente.

 

Se eu coloco por exemplo: cod_pais = 10 FUNCIONA TUDO OK... Sabe me dizer pq?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Provavelmente entrou em loop infinito.

 

Poste exatamente a parte do código que você alterou e que faz dar erro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Provavelmente entrou em loop infinito.

 

Poste exatamente a parte do código que você alterou e que faz dar erro.

 

Oi Hargon, obrigada pela resposta. É o seguinte: Eu tenho dificuldade em instruções sql que não sejam números, esses dias fiz um sisteminha de aniversário e troquei todos os nomes dos meses por números de 01 a 12, pois na instrução chamando janeiro, fevereiro e talz nao tava funcionando, como eu precisava e logo do sistema não tive tempo de tentar descobrir o pq... E pelo visto é o que tá acontecendo agora. Cadastrei códigos de todos os países do banco para que eu pudesse trabalhar com números e não nomes, ficando códigos de 10 a 75 no lugar de argentina, bolivia, chile e talz...

 

Aí crio a sessão que tá tudo ok (ela é passada normalmente, pois como disse, a uso para outros fins)

session("country") = request.form("country")

Neste caso o valor vem do formulário da pagina anterior em que o usuario escolheu seu país e cada país tem seu valor em números de 10 a 75.

 

Aí a instrução SQL ( PS: não consegui usar todas juntas como o Dee aconselhou, não consegui mesmo entender a lógica já que necessito dos valores individuais de 1 kg, 2 kgs, 3 kgs, etc

 

Então, o SQL que causa o loop infinito:

PS: o problema está aqui: cod_pais = VALOR QUE QUERO DO PAIS quando uso valor absoluto, funciona ok, quando tento puxar o valor da sessão, dá loop infinito.

 Set lpri1 = conexao.Execute("SELECT * FROM frete_internacional WHERE cod_pais = session(country) And kgs = 1 And cod_tipofrete = 2")

 

Tentei trocar tbm por:

 Set lpri1 = conexao.Execute("SELECT * FROM frete_internacional WHERE cod_pais = request.form(country) And kgs = 1 And cod_tipofrete = 2")

Mas nao tá rolando... Já se eu usar (só pra testar obviamente, pq não dá pra ser assim, mas se eu usar exatamente o valor do campo cod_pais (qualquer número entre 10 e 75), assim:

 Set lpri1 = conexao.Execute("SELECT * FROM frete_internacional WHERE cod_pais = 10 And kgs = 1 And cod_tipofrete = 2")

Aí funciona normal !!! honestamente já gastei todos os meus neurônios e não sei mais o que fazer...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá !

 

Você terá que "desmontar" sua clausula sql para funcionar:

 

onde está:

Set lpri1 = conexao.Execute("SELECT * FROM frete_internacional WHERE cod_pais = session(country) And kgs = 1 And cod_tipofrete = 2")

Tenta assim:

Set lpri1 = conexao.Execute("SELECT * FROM frete_internacional WHERE cod_pais ='"& session(country)&"' And kgs = 1 And cod_tipofrete = 2")

Talvez funcione, um conselho, não use session para o valor do pais, a menos que você destrua a session depois que não usar ela, pois caso não destrua, ela só será esvaziada quando a sessão expirar (o tempo pode variar se você definiu o tempo da sessão no global.asa ou no que está configurado no servidor)

Nesse caso, definir uma variavel já basta, a menos que você use também esse valor em outra página que não daria para resgatar o valor de outra forma que não com o uso de session.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá !

 

Você terá que "desmontar" sua clausula sql para funcionar:

 

onde está:

Set lpri1 = conexao.Execute("SELECT * FROM frete_internacional WHERE cod_pais = session(country) And kgs = 1 And cod_tipofrete = 2")

Tenta assim:

Set lpri1 = conexao.Execute("SELECT * FROM frete_internacional WHERE cod_pais ='"& session(country)&"' And kgs = 1 And cod_tipofrete = 2")

Talvez funcione, um conselho, não use session para o valor do pais, a menos que você destrua a session depois que não usar ela, pois caso não destrua, ela só será esvaziada quando a sessão expirar (o tempo pode variar se você definiu o tempo da sessão no global.asa ou no que está configurado no servidor)

Nesse caso, definir uma variavel já basta, a menos que você use também esse valor em outra página que não daria para resgatar o valor de outra forma que não com o uso de session.

 

Ok brigadao Vinicius, vou tentar assim e mais tarde posto aqui se deu certo, mas sem querer abusar, só pra que eu já teste tudo de uma vez, se eu puder seguir seu conselho de não usar a sessão, como ficaria a instrução sql somente puxando o valor do form? mais ou menos assim:

 

cod_pais = '"& request.form(country)&"' ?

 

Ah! e só outra duvidazinha: A sessão vem do VALOR do form, se o usuário selecionar um país errado por exemplo, e depois voltar e selecionar o pais correto, a sessão não vai automaticamente mudar para o segundo país escolhido?

 

Brigadão a todos gente !! tava de cabelo em pé já com esse probleminha que eu sozinha não conseguia achar solução.

Compartilhar este post


Link para o post
Compartilhar em outros sites

voce pode colocar uma variavel para receber o request:

pais = request.form("country")

 

e no sql: cod_pais='"&pais&"' ....

 

Em tese, a sessão seria reescrita, mas pode "bugar" ou seja não receber o valor corretamente, por isso pode-se usar o Session.Contents.Remove na pagina que vai mandar os dados.

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.