SEEK C/ DATAENVIRONMENT NAO FUNFA

VB6MASTER 11/07/2004 20:51:59
#33091
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.
LCSD 11/07/2004 21:22:34
#33094
Resposta escolhida
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]
LCSD 12/07/2004 07:16:44
#33124
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]
LCSD 13/07/2004 07:55:49
#33287
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]
Tópico encerrado , respostas não são mais permitidas