none
VB6 x SQL x ADO RRS feed

  • Pergunta

  • Turma, 

    Estou com um problema daqueles para discutirmos aqui!

    Hoje, temos várias aplicações desenvolvidas em VB6 x SQL que utiliza de um conceito que vou tentar colocar aqui para discutirmos melhor. 

    O padrão adotado foi que todas as vezes que necessitar acessar o banco de dados, será aberto uma conexão com o mesmo e os comandos serão executados "TODOS" via stored procedure, e no caso de SELECT será devolvido um recordset. 
    O maior problema que estou enfrentando é a quantidade de dados retornado para o recordset, pois dependendo do filtro que é passado, pode retornar até 250.000 itens, o que "trava" o processo até que o SQL possa concluir sua tarefa para devolver o recordset montado. 
    Meu pensamento é fazer com a aplicação fique concetada o tempo todo no banco de dados, para não provocar o conecta/desconecta a todo momento. Isso é fácil de alterar!
    A maior dificuldade está em devolver o recordset, por demanda (não sei se é possível), ou seja, ao invés de esperar o SQL Server terminar o processo, se existe alguma forma dele devolver os dados. Até mesmo por que se a tela for fechada, esse processo é cancelado. 
    Em Resumo:

    1) é possível devolver um recordset, mesmo que ele ainda não tenha terminado a pesquisa completa no banco de dados?
    2) quando o recordset for devolvido, é possível cancelar a operação?
    3) exisite algum custo para o o SQL ficar com todas as conexões aberta ao mesmo tempo?

    Obrigado a todos !

    Pablicio
    domingo, 30 de maio de 2010 10:07

Todas as Respostas

  • 1) é possível devolver um recordset, mesmo que ele ainda não tenha terminado a pesquisa completa no banco de dados?,
    Pablicio, não sei exatamente que tipo de aplicação você está fazendo, mas eu tenho sérias restrições quanto à pesquisas que retornam mais de 1000 ou 2000 registro, nem se fala 270.000. Eu "truco" qualquer um que diz que analiza ou vê esse resultado, ou o sistema é ineficiente e não retorna para o usuário o resultado/analise que ele precisa, então ele migra os dados para um Excel ou qq outra coisa.
    Isso é um processamento e trafego de rede absurdamente desnecessário.
    2) quando o recordset for devolvido, é possível cancelar a operação?
    Essa não sei te responder, o pessoal do forum de programação com certeza sabe, mas do lado do banco, sim, é cancelado.
    3) exisite algum custo para o o SQL ficar com todas as conexões aberta ao mesmo tempo?
    Sim há, alem de dependendo de como estiver a configuração do seu servidor de SQLServer, há limitações de quantidade de conexções ativas.

    Tks. Fausto Fiorese Branco MCTS, MCITP/DBA 2005 | MCITP/DBA 2008 São Paulo - Brasil * http://www.linkedin.com/in/faustobranco
    segunda-feira, 31 de maio de 2010 17:19