SEEK C/ DATAENVIRONMENT NAO FUNFA
Boa noite moçada.
Tà ' estudando a função SEEK. Ainda não domino a arte, mas espero que os colegas possam me ajudar. Baixei até dois exemplos de código que utilizam esta função. Quando penso que já entendi como funciona, pronto, dá pau.
Vejam, os exemplos que peguei rodam normalmente com o MS Jet 4.0 (via código).
Tentei testar num projeto com DataEnvironment e dá erro informando que não há suporte. Ora, se o DE está configurado com o mesmo MSJet 4.0, não consigo entender o que está errado.
O DE e a função SEEK são incompatÃveis ou alguma propriedade do DE deve ser ajustada?
Desde já obrigado.
Tà ' estudando a função SEEK. Ainda não domino a arte, mas espero que os colegas possam me ajudar. Baixei até dois exemplos de código que utilizam esta função. Quando penso que já entendi como funciona, pronto, dá pau.
Vejam, os exemplos que peguei rodam normalmente com o MS Jet 4.0 (via código).
Tentei testar num projeto com DataEnvironment e dá erro informando que não há suporte. Ora, se o DE está configurado com o mesmo MSJet 4.0, não consigo entender o que está errado.
O DE e a função SEEK são incompatÃveis ou alguma propriedade do DE deve ser ajustada?
Desde já obrigado.
VB6Master
De preferência não utilize o SEEK, porque terá que ter todo o RecordSet carregado com dados que não utilizará no momento, a melhor alternativa é uma SQL que te retorna só a condição. Por exemplo:
sSQL = "Select * from clientes where CodigoCliente = " & txtCodigoCliente.Text
Tendo-se como base que CodigoCliente é único, você retornaria somente um Registro, é mais rápido, não sobrecarrega a rede com tráfego desnecessário e você não empenha tantos recursos de memória.
Coloque aqui qual sua situação e os campos para que possamos te auxiliar.
[s50]
De preferência não utilize o SEEK, porque terá que ter todo o RecordSet carregado com dados que não utilizará no momento, a melhor alternativa é uma SQL que te retorna só a condição. Por exemplo:
sSQL = "Select * from clientes where CodigoCliente = " & txtCodigoCliente.Text
Tendo-se como base que CodigoCliente é único, você retornaria somente um Registro, é mais rápido, não sobrecarrega a rede com tráfego desnecessário e você não empenha tantos recursos de memória.
Coloque aqui qual sua situação e os campos para que possamos te auxiliar.
[s50]
VB6Master
Desculpe, mas eu não entendi ainda o seu problema. [S50]
Com relação a lentidão existem 2 providências que costumam acelerar, se for só para consulta/impressão altere o cursor para Static e utilize pesquisa direto na String de abertura, assim só terá um Registro ou então um lote que você necessita, como eu tinha postado acima:
sSQL = "Select * from clientes where CodigoCliente = " & txtCodigoCliente.Text
Note que nesta SQL só retornará 1 Registro, o cliente que tem o Código fornecido, portanto a rede não estará trafegando com dados desnecessários.
Agora poderia me explicar se não há um campo identificador único (chave primária) nesta tabela como você está buscando informações?
O mais rápido é por meio de um campo numérico, é muito mais rápido que uma operação com Strings, qual seria a estrutura desta tabela que trabalha com os Protocolos?
Até Breve
[s68]
Desculpe, mas eu não entendi ainda o seu problema. [S50]
Com relação a lentidão existem 2 providências que costumam acelerar, se for só para consulta/impressão altere o cursor para Static e utilize pesquisa direto na String de abertura, assim só terá um Registro ou então um lote que você necessita, como eu tinha postado acima:
sSQL = "Select * from clientes where CodigoCliente = " & txtCodigoCliente.Text
Note que nesta SQL só retornará 1 Registro, o cliente que tem o Código fornecido, portanto a rede não estará trafegando com dados desnecessários.
Agora poderia me explicar se não há um campo identificador único (chave primária) nesta tabela como você está buscando informações?
O mais rápido é por meio de um campo numérico, é muito mais rápido que uma operação com Strings, qual seria a estrutura desta tabela que trabalha com os Protocolos?
Até Breve
[s68]
VB6Master
Mas veja bem, você está informando que deseja o 1º dos Registros e informa para que o Banco de Dados o coloque em ordem, certo?
cSQL = "SELECT TOP 1 * FROM Geral ORDER BY AProtocolo DESC, NProtocolo DESC"
O ideal seria que você identificasse só 1 Registro ou Grupo, assim o Banco de Dados não teria que ordenar, já que neste caso é desnecessário, é só 1 Registro, por isto te indiquei:
sSQL = "Select * from clientes where CodigoCliente = " & txtCodigoCliente.Text
Com relação a Chave Primária Composta, ela pode haver, é evidente, mas depende da Estrutura do Banco de Dados.
Quanto a consulta em si, eu entendi que o Formato é do tipo Protocolo/Ano 1008/2002 por exemplo, certo? Isto não impede que a chave primária seja um Integer, Single, etc.... O Filtro seria em cima destes números, que podem ser números para acelerar também, principalemente quando a Base de Dados ganha volume!.
"SELECT * FROM Geral where AProtocolo = 2002 and NProtocolo 1008"
Neste caso te retornaria só 1 Registro, ele não ordena, agora se tiver cadastrado em uma ListBox, TODOS os Protocolos ou então por Ano, por exemplo, você só necessita informar uma Chave Primária (Integer/Single/Long/Double) que a pesquisa ganhará em desempenho.
O Cursor seria interessante alterar para Static, você está imprimindo, ganhará em desempenho também, como é só 1 Registro dificilmente será a Rede o problema na consulta.
Uma pergunta, se está imprimindo com o Printer tem End Doc no final da impressão?
* Já vi um problema aqui de um colega que esqueceu e achou que era a rede o problema.
[s68]
Mas veja bem, você está informando que deseja o 1º dos Registros e informa para que o Banco de Dados o coloque em ordem, certo?
cSQL = "SELECT TOP 1 * FROM Geral ORDER BY AProtocolo DESC, NProtocolo DESC"
O ideal seria que você identificasse só 1 Registro ou Grupo, assim o Banco de Dados não teria que ordenar, já que neste caso é desnecessário, é só 1 Registro, por isto te indiquei:
sSQL = "Select * from clientes where CodigoCliente = " & txtCodigoCliente.Text
Com relação a Chave Primária Composta, ela pode haver, é evidente, mas depende da Estrutura do Banco de Dados.
Quanto a consulta em si, eu entendi que o Formato é do tipo Protocolo/Ano 1008/2002 por exemplo, certo? Isto não impede que a chave primária seja um Integer, Single, etc.... O Filtro seria em cima destes números, que podem ser números para acelerar também, principalemente quando a Base de Dados ganha volume!.
"SELECT * FROM Geral where AProtocolo = 2002 and NProtocolo 1008"
Neste caso te retornaria só 1 Registro, ele não ordena, agora se tiver cadastrado em uma ListBox, TODOS os Protocolos ou então por Ano, por exemplo, você só necessita informar uma Chave Primária (Integer/Single/Long/Double) que a pesquisa ganhará em desempenho.
O Cursor seria interessante alterar para Static, você está imprimindo, ganhará em desempenho também, como é só 1 Registro dificilmente será a Rede o problema na consulta.
Uma pergunta, se está imprimindo com o Printer tem End Doc no final da impressão?
* Já vi um problema aqui de um colega que esqueceu e achou que era a rede o problema.
[s68]
Tópico encerrado , respostas não são mais permitidas