AJUDA COM VB URGENTE
PESSOAL,
ESTOU DESENVOLVENDO UM MODULO DE GERAÇÃO DE RELATÓRIO, SO QUE PARA CHEGAR NO RELATORIO PASSO POR MUITAS CONSULTAS.
ACONTEC UM SEGUINTE O VB NAO ESTA DEIXANDO EU TRABALHAR COM TABELAS TEMPORARIS
EX:
PARA DUAS PESSOAS GERAREM O MESMO RELATORIO NO MESMO TEMPO, PRECISO DESTAS TABELAS ENTAO O QUE FARIA CRIARIA AS TABELAS TEMPORARIA E DEPOIS RESGATARIA NOVAMENTE PARA EFETUAR UMA CONSULTA.
MEU CODIGO
COMO POSSO FAZER ISSO GERAR UM RELATORIO UTILIZANDO OS COMANDOS ACIMA
ESTOU DESENVOLVENDO UM MODULO DE GERAÇÃO DE RELATÓRIO, SO QUE PARA CHEGAR NO RELATORIO PASSO POR MUITAS CONSULTAS.
ACONTEC UM SEGUINTE O VB NAO ESTA DEIXANDO EU TRABALHAR COM TABELAS TEMPORARIS
EX:
PARA DUAS PESSOAS GERAREM O MESMO RELATORIO NO MESMO TEMPO, PRECISO DESTAS TABELAS ENTAO O QUE FARIA CRIARIA AS TABELAS TEMPORARIA E DEPOIS RESGATARIA NOVAMENTE PARA EFETUAR UMA CONSULTA.
MEU CODIGO
With cmd
.CommandTimeout = 0
.ActiveConnection = cnn
.CommandType = adCmdText
.CommandText = "SELECT NUMEROCONTRATO,DATEDIFF(DAY,VENCDEBITO,GETDATE()) AS DIASATRASO,CARTEIRA " & _
"INTO #DADOSHSBCBANCO " & _
"FROM CONTRATOS " & _
"WHERE CARTEIRA IN (" & Carteiras & ") " & _
"AND STATUSCONTRATO NOT IN ('DEVOLVIDO')"
.CommandText = "SELECT A.NUMEROCONTRATO,DIASATRASO,CARTEIRA,NUMEROPARCELA,NUMEROACORDO,VALORTOTAL,DATAPAGAMENTO,VALORPAGAMENTO " & _
"INTO #HSBCBANCO " & _
"FROM #DADOSHSBCBANCO A, PARCELAS B " & _
"Where A.NUMEROCONTRATO = B.NUMEROCONTRATO"
.Execute
.CommandText = "SELECT * " & _
"INTO MIS.DBO.HSBCBANCODADOS " & _
"FROM #HSBCBANCO A " & _
"WHERE NUMEROACORDO IN (SELECT MAX(NUMEROACORDO) FROM #HSBCBANCO B " & _
"WHERE A.NUMEROCONTRATO = B.NUMEROCONTRATO)"
.Execute
.CommandText = "SELECT NUMEROCONTRATO,DIASATRASO,CARTEIRA,NUMEROACORDO,MIN(NUMEROPARCELA)PP,MAX(NUMEROPARCELA)PPL,SUM(VALORTOTAL) VALORTOTAL " & _
"INTO MIS.DBO.HSBCBANCO1 " & _
"FROM #HSBCBANCODADOS " & _
"GROUP BY NUMEROCONTRATO,DIASATRASO,CARTEIRA,NUMEROACORDO " & _
"ORDER BY NUMEROCONTRATO"
.Execute
End With
COMO POSSO FAZER ISSO GERAR UM RELATORIO UTILIZANDO OS COMANDOS ACIMA
UMA DICA:
PQ VC não gera uma PROC, e passa esses dados como PARÂMETRO pra essa PROC.
E no CRYSTAL, ao invés de VC passar a TABELA, passa a PROC (nestas PROCÂÂ's têm que ter os campos que VC deseja exibir).
AàVC chama o Crystal e passa os parâmetros da PROC via CRYSTAL e pronto... O Crystal se encarrega de rodar a proc e joga os dados pro relatório. Sem problema de vários usuários rodarem o mesmo relatório ao mesmo tempo.
é tranquilo e facinnnnnnnnnn
PQ VC não gera uma PROC, e passa esses dados como PARÂMETRO pra essa PROC.
E no CRYSTAL, ao invés de VC passar a TABELA, passa a PROC (nestas PROCÂÂ's têm que ter os campos que VC deseja exibir).
AàVC chama o Crystal e passa os parâmetros da PROC via CRYSTAL e pronto... O Crystal se encarrega de rodar a proc e joga os dados pro relatório. Sem problema de vários usuários rodarem o mesmo relatório ao mesmo tempo.
é tranquilo e facinnnnnnnnnn
SÓ TEM UM PROBLEMA OS RELATORIOS SERAM EXIBIDOS EM UMA PAGINA ASP QUE O VB IRA CHAMAR...
POR ISSO PRECISO RODAR ESTE PROCESSO DESTA FORMA POIS ELE IRA GERAR DUAS TABELAS QUE AI IREI PASSAR OS PARAMETROS E SELECIONAR SOMENTE OS DADOS QUE ME INTERESSAM
ATT,
POR ISSO PRECISO RODAR ESTE PROCESSO DESTA FORMA POIS ELE IRA GERAR DUAS TABELAS QUE AI IREI PASSAR OS PARAMETROS E SELECIONAR SOMENTE OS DADOS QUE ME INTERESSAM
ATT,
SE VC rodar tudo isso no Query Analizer, ele te gerará todas essas tabelas temporárias numa boa???
SIM
1 - Tabelas temporárias são visÃÂÂveis á todos os usuários de uma mesma seção. Desse modo, a mesma tabela temporária pode ser acessada por todos na mesma seção ao mesmo tempo. Sendo assim, utilizar as tabelas temporárias para gerar relatórios simultâneos em estações diferentes requer que as tabelas tenham nomes distintos. Usar o nome do usuário da estação como prefixo da tabela, por exemplo.
2 - Quando você "abre" um recordset, está trazendo para a memória local o conteúdo da tabela. Se após abrir o recordset você atribuir um Nothing á ActiveConnection, a conexão é encerrada, mas os dados continuam na estação, podendo ser utilizados como melhor aprouver. é como se fosse uma tabela temporária, mas espelha uma tabela do banco de dados, ok?
3 - Parta do seguinte princÃÂÂpio: Do fim para o começo ás vezes é melhor.
- Quais campos são mostrados no relatório?
- De onde vêm esses campos (quais tabelas, com quais filtros)?
- Se há uma forma de filtrar esses dados inserindo-os em tabelas temporárias, há como simplesmente retornar suas consultas. Considere salvar as consultas não como tabelas temporárias, mas como arquivos XML nomeados, á partir da instrução Save do objeto Recordset. Depois de salvos, esses XML podem ser abertos por outros objetos Recordset até mesmo em processos distintos, sem perder nada.
- Se o relatório é em página ASP, que portanto aceita Recordsets, você pode transferir o objeto Recordset diretamente, sem precisar salvar em arquivo ou banco, por meio de uma função pública. Avalie essa possibilidade.
- Se a sua página ASP gera HTML dinâmico, pode ser mais interessante adotar uma sequência de Stored Procedures parametrizadas, que poderão ser carregadas diretamente, como fossem tabelas, com os filtros que o cliente ASP sugerir, e não filtros globais, como em uma tabela temporária.
2 - Quando você "abre" um recordset, está trazendo para a memória local o conteúdo da tabela. Se após abrir o recordset você atribuir um Nothing á ActiveConnection, a conexão é encerrada, mas os dados continuam na estação, podendo ser utilizados como melhor aprouver. é como se fosse uma tabela temporária, mas espelha uma tabela do banco de dados, ok?
3 - Parta do seguinte princÃÂÂpio: Do fim para o começo ás vezes é melhor.
- Quais campos são mostrados no relatório?
- De onde vêm esses campos (quais tabelas, com quais filtros)?
- Se há uma forma de filtrar esses dados inserindo-os em tabelas temporárias, há como simplesmente retornar suas consultas. Considere salvar as consultas não como tabelas temporárias, mas como arquivos XML nomeados, á partir da instrução Save do objeto Recordset. Depois de salvos, esses XML podem ser abertos por outros objetos Recordset até mesmo em processos distintos, sem perder nada.
- Se o relatório é em página ASP, que portanto aceita Recordsets, você pode transferir o objeto Recordset diretamente, sem precisar salvar em arquivo ou banco, por meio de uma função pública. Avalie essa possibilidade.
- Se a sua página ASP gera HTML dinâmico, pode ser mais interessante adotar uma sequência de Stored Procedures parametrizadas, que poderão ser carregadas diretamente, como fossem tabelas, com os filtros que o cliente ASP sugerir, e não filtros globais, como em uma tabela temporária.
PROFESSOR,
MUITO OBRIGADO PELA SUA AJUDA VOU AVALIAR AS SUGESTOES PASSADAS E APLICAR A MELHOR.
GRATO
MARCELO
MUITO OBRIGADO PELA SUA AJUDA VOU AVALIAR AS SUGESTOES PASSADAS E APLICAR A MELHOR.
GRATO
MARCELO
Tópico encerrado , respostas não são mais permitidas