Ir para conteúdo

POWERED BY:

Arquivado

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

FabianoSouza

Consulta para relatórios

Recommended Posts

Preciso fazer um relatório apontando pelo menos uns dez itens. Para cada item, uma consulta (basicamente de totais, usando SELECT COUNT...).

A questão é que fazer dez consultas vai exigir muito do banco, certo?

 

 

Pensei em armazenar os totais que vou exibir, num XML. Mas tem o problema de ter que atualizar o arquivo XML toda que vez que fizer um INSERT, UPDATE ou DELETE na tabela.

Além disso, não sei se é possível fazer o SQL Server gerar automaticamente, após cada ação citada acima, um arquivo XML para ser lido pelo ASP (sem falar que certamente não poderei criar nada no diretório raiz do host).

 

Então pergunto. Os amigos tem alguma sugestão??

 

1 help por caridade.

Compartilhar este post


Link para o post
Compartilhar em outros sites

após fizer um INSERT, UPDATE ou DELETE na tabela, na sequencia já atualize o XMl tb e para ficar mais otimizado use stored procedure

Compartilhar este post


Link para o post
Compartilhar em outros sites

Xanburzum,

A atualização do XML deveria ser feita pela aplicação (ASP, no meu caso) ou pelo SQL Server?

Como sugeriu usar stored procedure creio seria para o SQL Server atualizar o XML, certo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi Gustavo.

O objetivo é ter uma fonte de dados para consultar frequentemente, mas que não seja o BD do sistema (para não derrubar a performance).

 

Por hora acho que XML seja a melhor opção.

Se tiver sugestões, manda aí.

Valew!

Compartilhar este post


Link para o post
Compartilhar em outros sites

pelo ASP, e chama a SP pelo ASP tb, para criar um XML com dados do bd, faz assim:

 

<%
'String de conexão com o banco de dados.
ConnString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=e:\home\LoginFTP\dados\banco.mdb;"
Set conexao=server.createobject("adodb.connection")
Conexao.open ConnString
 
'Seleciona os campo do recordset
SQL="select Email,produto from dados"
set rs = conexao.execute(SQL)
 
'Instancia o objeto FSO
Set ObjFSO = CreateObject("Scripting.FileSystemObject")
 
'A propriedade CreateTextFile cria o arquivo arq.xml no local especificado
Set escreve = ObjFSO.CreateTextFile("e:\home\LoginFTP\Web\teste\arq.xml", true)
 

'O método write escreve a string no arquivo
escreve.write "<?xml version=""1.0"" encoding=""ISO-8859-1"" ?>" & vbcrlf
 
escreve.write "<internet>" & vbcrlf
 
'Lopping até o último registro do banco
do while not rs.eof
 
escreve.write "<opcoes>" & vbcrlf
 
'Looping para contagem dos campos
for i=0 to rs.fields.count-1
 
escreve.write "<" & rs.fields(i).name & ">" & rs.fields(i).value & "</" & rs.fields(i).name & ">" & vbcrlf
 
next
rs.movenext
 
escreve.write "</opcoes>" & vbcrlf
 
loop
 
escreve.write "</internet>" & vbcrlf
 
Response.write "Arquivo salvo !"
 
'Fechando de destruíndo os objetos
set ObjFSO = nothing
rs.close
conexao.close
set rs = nothing
set conexao = nothing
%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fabiano, seu banco está disponibilizado pelo seu computador ou você tem hospedagem? se for pelo seu pc com o uso do no-ip ou ddns da winconnections seu pc não vai suportar a demanda pois depende da taxa de upload de sua internet se for velox sai fora... mas também depende de quantos usuários irão acessar simultaneamente ... assim cai a performance ... o que pode ser tratado um limite... se você tem hospedagem paga veja o que está no contrato para ver se o seu banco é compartilhado ou exclusivo... se for compartilhado se tiver muita demanda o hospedeiro vai fazer seu site cair... para não afetar os demais se for excluxivo manda chumbo quente para cima que o SQL Server aguenta o tranco... Access funciona mas não existe certo!? já usei muito DB Access para rede local e dava problema .... compartilhado na net nem quero ver... hoje trabalho com postgresql pois é robusto e é gratuito nunca mais tive problemas com ele... muda algumas coisas nas instruções SQL mas nada de mais só dar uma lida que resolve...

 

você quer fazer 2 consultas Loop de (Loop com agrupamento) certo...!?

 

Fazer um xml atualizando a situação atual pode ser tão prejudicial quanto aquele que quer fazer uma consulta ... abrir um banco para inserir ou editar é pior daquela que abre para consultar ou apagar... é relativo pois ... quantos usuários irão inserir, editar ou apagar o banco simultaneamente? quantos irão consultar simultaneamente?

 

para atualizar um arquivo já não sei sobre a concorrência.. já com o banco de dados já é tratado a concorrência imagina 3 usuários um apagando outro editando outro inserindo? como fica o arquivo que está sendo atualizado por cada usuário de uma vez? é claro que pode haver aquela diferença de milisegundo entre um e outro mas não é certo confiar nisso... tem o detalhe de que cada ação dos usuários fará a consulta loop dentro de loop com agrupamento...

 

por que bato tanto na tecla do simultaneo...?

 

pois é o que prejudica...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Gustavo. Vamos ser se entendi tudo que falou heheh...

 

Bom, tenho uma hospedagem paga.

Em relação ao XML a ideia é que cada usuário tenha seu respectivo arquivo. Então não haverá concorrência.

 

 

O processo seria:

Usuário grava/exclui registro no BD --> rotina ASP faz consulta (umas DEZ) --> rotina ASP atualiza arquivo XML com valor de somas --> página "resumo" lê arquivo XML

 

Creio que desta forma seja suave pois a página "resumo" (que será bastante requisitada) fará somente operação de leitura do XML do respectivo usuário.

 

O pesado mesmo é na hora de rodar as DEZ consultas acima para atualizar o XML. Mas isso só ocorrerá quando o usuário fizer um INSERT ou DELETE.

 

 

A outra saída (que me parece inadequada) seria a página "resumo" rodar diretamente as DEZ consultas.

Se for para trabalhar diretamente com o BD a coisa deve ficar complicada porque para fazer o resumo que preciso, cada usuário teria que rodar DEZ consultas. Dez consultas para cem usuários são 1000 consultas simultâneas!

 

O inconveniente de usar o XML é que terei muitos arquivos.

 

Está coerente meu raciocínio ou estou viajando nas ideias??

Compartilhar este post


Link para o post
Compartilhar em outros sites

no caso de muitos arq. xml, crie uma função em FSO que verifica a data de criação do XML e se for superior a uma data X ele exclui automaticamente. Você poderia fazer uso de recordset desconectados para alguns itens do relatório e ver a possibilidade de estruturar um trigger, mas cuidado com o uso de triggers, pois mal estruturada dá dor de cabeça.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fabiano, sua idéia está ideal para o que quer fazer a sugestão do xanburzum de criar uma trigger é excelente pois iria tirar o peso do hospedeiro (site) onde geralmente os hospedeiros tem servidores específicos para cada coisa para o sites usam um para bancos usam outro com isso a carga fica balanceada... mas se for fazer pelo asp também funciona legal...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa! Valew pessoal. Tive a luz que precisava. Agora é colocar a mão na massa hehehe

 

Uma última coisa.

Já ouvi falar de recordset desconectado, citado pelo xanburzum. O que seria exatamente isso? Para quê serve? Quais os benefícios?

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ao criarmos uma conexão com uma base de dados,geralmente criamos também uma conexão recordset, pois queremos poder fazer tratamento de dados. Se estivermos usando um recordset com um cursor lado cliente (AdUseClient) não precisamos manter está conexão aberta o tempo todo, ou seja, podemos fechar a conexão de um recordset sem fechar imediatamente o recordset.Quanto fazemos isto estamos desconectando o recordset.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Xanburzum, na prática, isso significa usar o famoso

Set rs= Nothing

??
Tem algum exemplo? Recordset desconectado impacta em desempenho?



Gustavo, agora captei o lance que falou dos caras usarem hosts específicos (um para BD e ou para site), está impactando heheh

Pois não será possível fazer o meu banco, que está no host "X", exportar (via trigger, por exemplo) um arq.xml para a pasta do meu site, que está no host "Y".
Lascou! Vai ter que ser tudo pelo ASP mesmo :-(

Tive o maior trampo para descobrir como gera arquivo XML pelo SQL e não vou poder usar este recurso heheh...

Compartilhar este post


Link para o post
Compartilhar em outros sites

dá uma olhada no fórum, que postei alguns exemplos

Compartilhar este post


Link para o post
Compartilhar em outros sites

Compartilhar este post


Link para o post
Compartilhar em outros sites

Beleza

 

1456612_638521866191613_18760147_n.jpg

Compartilhar este post


Link para o post
Compartilhar em outros sites

Revendo Fabiano realmente ia ficar complicado trabalhar com trigger porque o gatilho identifica o insert ou exclusão vindo de um servidor para depois esse servidor executar a rotina para depois criar o arquivo para jogar no outro servidor... sua ideia foi a mais adequada para a situação... muito bom ter pessoas que se preocupam com perfomance... pois de trabalho que pego para continuar ou acrescentar algum relatório fico espantado com normalizações dos bancos e códigos repetitivos... é isso ai parabéns...

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.