Clique abaixo para nos ajudar
Conectar-se

Esqueci minha senha

Estamos no Facebook
Buscar
 
 

Resultados por:
 


Rechercher Busca avançada

Quem está conectado
12 usuários online :: Nenhum usuário registrado, Nenhum Invisível e 12 Visitantes :: 1 Motor de busca

Nenhum

[ Ver toda a lista ]


O recorde de usuários online foi de 468 em 1/3/2012, 10:43
Espessura do cursor intermitente

7/3/2017, 09:08 por Jefferson Matakas

Bom dia a todos !!

Existe uma opcao no windows que pode ser acessada atraves da 'central da …

Comentários: 0

DESENVOLVIMENTO EM REDES

4/3/2017, 18:45 por AJC

Pessoal tem ou conhece livros ou material para programação em
redes usando banco de dados nativo …

Comentários: 0

USAR REPORT FORM

30/12/2016, 09:06 por AJC

Pessoal bom dia,
Estou com um grande problema, já pesquisei muita coisa sobre report form, mas o …

Comentários: 4

Como preencher campos vazios

9/2/2017, 11:55 por Linghston

Pessoal boa tarde,

É o seguinte, eu preciso preencher os campos de uma coluna da tabela DBF que …

Comentários: 2

Enviar msg para WhatsAPP via VFP

7/2/2017, 10:31 por Eliana

Olá Pessoal!

Alguém sabe se é possível enviar mensagem para o WhatsAPP via VFP?


Grata


Comentários: 0

Estatísticas
Temos 7037 usuários registrados
O último usuário registrado atende pelo nome de GETULIO

Os nossos membros postaram um total de 31 mensagens em 17 assuntos

USO COMANDO SEEK

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Em curso USO COMANDO SEEK

Mensagem por AJC em 10/10/2013, 09:28

Pessoal como faço para fazer um pesquisa letra a letra usando o comando seek em uma tabela indexado por codigo e nome usando o mesmo textbox, atraves do select consigo, mas nao estou conseguindo com o seek.
Exemplo: tenho um textbox onde digito ou numero a numero ou letra a letra e o select filtra no meu grid os dados para escolha, mas esta lento demais pois banco dados e bem grande, preciso passar a usar indices e fazer o mesmo trabalho usando o seek, voces tem alguma ideia.

Antonio
avatar
AJC
Participante Regular
Participante Regular


Voltar ao Topo Ir em baixo

Em curso Re: USO COMANDO SEEK

Mensagem por rrfsistemas em 11/10/2013, 00:28

AJC, como está seu select ?
O BD usa índices no select ? Caso não, fica lento mesmo...
O Select pode utilizar os mesmos índices para otimizar a consulta.

rrfsistemas
Começando a Participar
Começando a Participar


Voltar ao Topo Ir em baixo

Em curso Re: USO COMANDO SEEK

Mensagem por Julio em 11/10/2013, 08:57

Não sei se vai lhe ajudar.
Achei este codigo quando precisei retirar letra a letra de um textbox, so que é com for:

Código:
c= ALLTRIM(thisform.text1.Value) && pegar todo textbox eliminando espaços laterais.
n= LEN(c) && retorna o nr de caracter contido na expressão c

FOR a = 1 TO n
cString= SUBSTR(c, a, 1) && pegar um caracter por vez
MESSAGEBOX( "O caracter da posição " + TRANSFORM(a) + " é: " + TRANSFORM(cstring) )

DO CASE
CASE UPPER(cString)= "A"
*- O chr A foi capturado
CASE UPPER(cString)= "B"
*- O chr B foi capturado
...
restante do codigo
...
CASE EMPTY(cString)
*- Representa espaço

OTHERWISE

ENDCASE

ENDFOR

Julio
Usuário 5 Estrelas
Usuário 5 Estrelas


Voltar ao Topo Ir em baixo

Em curso Re: USO COMANDO SEEK

Mensagem por Roberto em 11/10/2013, 11:59

poderia ser mais claro, e citar um exemplo

Roberto
Participante Regular
Participante Regular


Voltar ao Topo Ir em baixo

Em curso SEEK

Mensagem por AJC em 11/10/2013, 13:34

rrfsistemas quanto a usar indices para otimizar o select voce poderia me dar um exemplo de uso seu?

Julio legal sua ideia vai ser util, mas no meu caso tenho um textbox somente para inserir nele numero a numero do codigo ou letra a letra do nome e com select ele pesquisa e filtra no grid abaixo do textbox de pesquisa, isto porque estou usando como metodo pdv ou seja bco dados clientes estao em cada terminal, se usar em rede checando direto no servidor o sistema para
Antonio
avatar
AJC
Participante Regular
Participante Regular


Voltar ao Topo Ir em baixo

Em curso Re: USO COMANDO SEEK

Mensagem por rrfsistemas em 12/10/2013, 01:43

Você pode acelerar o acesso a dados em tabelas utilizando índices e buffer com eficiência. Além disso, você pode se beneficiar da tecnologia Rushmore para otimizar suas consultas.
É importante compreender quando as consultas serão otimizadas e quando não serão. O Visual FoxPro otimiza condições de consulta, procurando uma correspondência exata entre o lado esquerdo de uma expressão de filtro e uma expressão de chave de índice. Por isso, com a tecnologia Rushmore, uma expressão só poderá ser otimizada, se você procurar em relação à expressão exata usada em um índice.
Por exemplo, suponha que você tenha acabado de criar uma tabela e esteja adicionando o primeiro índice utilizando um comando como o seguinte:
USE T_Nome_01
INDEX ON UPPER(ca_name) TAG tag_name

O comando a seguir não é otimizável, pois a condição de procura baseia-se apenas no campo ca_name, não em uma expressão que é indexada:

SELECT * FROM customers WHERE ca_name ="ABCDE"

Em vez disso, você deve criar uma expressão otimizável utilizando um comando como o seguinte, no qual a expressão que você está procurando corresponde exatamente a uma expressão indexada:

SELECT * FROM T_Nome_01 WHERE UPPER(ca_name) = "ABCDE"

Quando vc usa o Select - SQL o VFP "se pergunta: existe índice?", se não, ele tomará o controle e decidirá, baseado em uma série de fatores, como por exemplo memória, qtd de registros, etc..., se cria ou não índices temporários e qual a melhor maneira de faze-los. Isso leva tempo. Se vc indicar para o VFP o que e como utilizar, poderá aumentar a velocidade da consulta.

Outra coisa:
escrevendo aplicativos para ambientes multi-usuários, o desempenho será de
extrema importância, pois a falta de eficiência é multiplicada. Além disso, se vários usuários estiverem acessando os dados, o seu aplicativo deverá lidar com questões de compatibilidade e acesso a rede.
Para lidar com essas questões, você pode:
- ajustar o intervalo de tentativa de bloqueio.

Ajustando o intervalo de tentativa de bloqueio

Se o aplicativo tentar bloquear um registro ou tabela e não obter êxito, você poderá fazer com que o Visual FoxPro tente automaticamente o bloqueio de novo, após um pequeno intervalo. No entanto, cada tentativa de bloqueio resulta em maior tráfego de rede. Se o tráfego de rede já estiver pesado, enviar várias solicitações de bloqueio sobrecarregará a rede e acarretará na redução da velocidade para todos os usuários.
Para lidar com esta situação, você pode ajustar o intervalo entre as tentativas de bloqueio. Ao utilizar um intervalo maior (que resulta em menos tentativas por segundo), você poderá reduzir o tráfego de rede e melhorar o desempenho.
Para ajustar o intervalo de tentativa de bloqueio :
- chame a função SYS(3051), passando a ela o número de milissegundos a ser esperado entre cada tentativa de bloqueio.

Espero ter ajudado

rrfsistemas
Começando a Participar
Começando a Participar


Voltar ao Topo Ir em baixo

Em curso Re: USO COMANDO SEEK

Mensagem por lardecristo em 14/10/2013, 13:50

Olá, cara se não for necessário trazer todos os clientes, sugiro usar SELECT com o parametro TOP 10, porque é bem mais rápido, e faça isso usando uma tabela com indexação, porque assim o sistema ficará mais rápido, a ideia que coloco aqui é a mesma que tem no Google, mas eu limito a minha busca em 10 linhas.

Código:

SELECT TOP 10 Chave_Cliente, Nome FROM Cliente WHERE LIKE(ALLTRIM(THISFORM.txtNome.Value)+"*", Cliente.Nome)
avatar
lardecristo
Participa Bastante
Participa Bastante


Voltar ao Topo Ir em baixo

Em curso INDEX X SELECT

Mensagem por AJC em 16/10/2013, 22:26

Pessoal estou pesquisando sobre comando seek, vi uma materia de tabela indexada mais select...bom nunca vi e usei, sempre uso select...mas estou com problema em acessar uma tabela via rede, esta muito lento, alguem ja usou esta situação se usou poderia me passar um exemplo?
tabela clientes - preciso indexar codigo, nome para pesquisa
tipo select
select codigo,nome from clientes where alltrim(nome)=thisform.pesquisa.value into cursor nomecliente
jogo esta pesquisa no interactive change no meu grid para pesquisar letra a letra

Antonio

avatar
AJC
Participante Regular
Participante Regular


Voltar ao Topo Ir em baixo

Em curso Re: USO COMANDO SEEK

Mensagem por rrfsistemas em 16/10/2013, 23:00

AJC parece que vc não leu o que eu escrevi acima:
"O Visual FoxPro otimiza condições de consulta, procurando uma correspondência exata entre o lado esquerdo de uma expressão de filtro e uma expressão de chave de índice.", isso inclui o SEEK e o SELECT.

Seu select: não está errado !
select codigo,nome from clientes where alltrim(nome)=thisform.pesquisa.value into cursor nomecliente

Se você usar a expressão " where alltrim(nome)"
você deve criar um índice exatamente igual , ou seja :
Index on alltrim(nome) ...
Não use funções de conversão ,formatação ou referências diretamente no SELECT ("thisform.pesquisa...","alltrim(nome)"), crie a expressão antes, em uma variável, isso ajuda muito o processamento .
Creio que vc está usando tabelas em um BD, certo ?
Se for tabela livre, acho que tá ai o seu problema...
Outra coisa, vc disse "...InteractiveChange do meu grid... ", não seria InteractiveChange do TextBox ?

rrfsistemas
Começando a Participar
Começando a Participar


Voltar ao Topo Ir em baixo

Em curso Re: USO COMANDO SEEK

Mensagem por AJC em 17/10/2013, 13:37

rrfsistemas eu li mas não entendi direito, mas agora ficou bem claro.

"Se você usar a expressão " where alltrim(nome)"
você deve criar um índice exatamente igual , ou seja :
Index on alltrim(nome) ..."
neste caso esta tabela tem dois indices dentro dela
pelo alltrim(codigo) e alltrim(nome) e ai como ficaria neste caso usando o select
o mesmo encontra o set order do indice?

"Não use funções de conversão ,formatação ou referências diretamente no SELECT ("thisform.pesquisa...","alltrim(nome)"), crie a expressão antes, em uma variável, "

valeu esta situação e não a usava.

"Creio que vc está usando tabelas em um BD, certo ?
Se for tabela livre, acho que tá ai o seu problema...
Outra coisa, vc disse "...InteractiveChange do meu grid... ", não seria InteractiveChange do TextBox ?"

Não realmente estou usando tabela livre, pelo que entendi se usar no banco
de dados ficaria melhor?
e InteractiveChange e no textbox de pesquisa e não no grid errei ao digitar.
bom mas segue no que tem dentro do meu interactive do textbox:

rscli1='SELECT cod, nome, endereco, bairro, cpf, rg, cidade,estado,obs FROM FORCE clientes WHERE ALLTRIM(UPPER(nome))=ALLTRIM(UPPER(thisform.pesquisa.Value))'
rscli2=' and ALLTRIM(UPPER(nome))<>SPACE(40) OR cod=VAL(thisform.pesquisa.Value) order by nome, cod INTO CURSOR cursor'
rscli = rscli1+rscli2
thisform.grid1.RecordSourceType = 4
thisform.grid1.RecordSource = rscli

Antonio



avatar
AJC
Participante Regular
Participante Regular


Voltar ao Topo Ir em baixo

Em curso Re: USO COMANDO SEEK

Mensagem por jmd.sistemas em 17/10/2013, 23:27

Antonio

usando tabela livre ou BD nativo sem select e usando o indice ativo:

*************************************
Quem ( Textbox )
No metodo InteractiveChange digitar:
*************************************

set near on
set exact off

procura = alltrim(thisform.quem.value)

seek procura

thisform.grid1.refresh
thisform.grid1.setfocus
thisform.quem.setfocus


***************************
no meu caso funciona bem e rápido.
espero que ajude

José Maria Dias

jmd.sistemas
Participa Pouco
Participa Pouco


Voltar ao Topo Ir em baixo

Em curso Re: USO COMANDO SEEK

Mensagem por rrfsistemas em 17/10/2013, 23:47

Bem vamos lá: dicas são sempre bem vindas.

Qdo eu disse pra vc criar a expressão antes e não usar diretamente no select, eu queria dizer que:
Ex:
select codigo,nome from clientes where alltrim(nome)=thisform.pesquisa.value into cursor nomecliente

Ficaria assim :

m.valor = thisform.pesquisa.value

select codigo,nome from clientes where alltrim(nome) = m.valor into cursor nomecliente

Ok !

*------------------------------------------------*

"neste caso esta tabela tem dois indices dentro dela
pelo alltrim(codigo) e alltrim(nome) e ai como ficaria neste caso usando o select
o mesmo encontra o set order do indice?"

RESPOSTA:
Não entendi bem sua pergunta mas, você pode escolher o índice normalmente como se estivesse usando em outra situação, comando...

Ex:
Set order to codigo
ou
Set order to nome

*------------------------------------------------*

As tabelas livres não possuem mecanismos internos para otimização.
O BD trabalha com conceitos internos semelhantes ao da arquitetura cliente-servidor.
O BD usa o conceito de "Procedimento armazenado". Insert´s, Delete´s, etc...
Esta situação eu já comprovei e os resultados são bem diferentes.
Essas mudanças podem depender de um estudo mais profundo do seu projeto...

*------------------------------------------------*
Observei que vc está usando a cláusula "FORCE" no select. Isto indica ao VFP que o Select não precisa de otimização.
No seu caso, sem índices, usando tabelas livres e em rede, não aconselho a usá-la.
Seria interessante deixar o VFP tentar otimizar o Select, depois tire suas próprias conclusões...
Não sei como está o layout do seu form, mas, na minha opinião, usar dois tipos de dados ou dois campos para fazer pesquisa incremental em um mesmo TextBox é um risco não calculado.
Essa situação deve ter uma atenção a mais.
Será que existe a necessidade de dois índices ?!?!? Ou seria melhor ter dois TextBox ?!?!?!?!
Eu costumo colocar o programa (.EXE) nas estações, isto diminui muito o tráfego na rede.
Espero que com esses conceitos e as dicas dos outro membros vc consiga seu objetivo.
Qqer coisa é só postar ! Smile

rrfsistemas
Começando a Participar
Começando a Participar


Voltar ao Topo Ir em baixo

Em curso OTIMIZAÇÃO

Mensagem por AJC em 24/10/2013, 12:55

Boa tarde rrfsistemas
Quando perguntei sobre indices seria no caso como usá-lo vou explicar melhor
Não trabalho com as tabelas abertas, quando crio os formularios
no init peço com select... para carregar os dados que preciso, sei que colocando indices na tabela ajudaria, mas no caso tenho dois indices na tabela codigo, nome
quanto aciono um formulario uso select para pesquisa por codigo chamo o select direto select codigo,nome from clientes where alltrim(nome)=vnome into cursor xxx
mas esta tabela esta com dois indices, como usar o set order sendo que o mesmo so vai funcionar com tabela aberta, tipo
use clientes
set order nome
no select nao precisamos disto acionamos direto podendo usar o order by
Quanto ao meu problema estou em demora no acesso ao banco de dados de um terminal para um servidor, por enquanto para solucionar trouxe a tabela de clientes para o terminal usando tipo pdv, e com algumas funcoes o sistema se auto atualiza em todos os terminais inclusive no servidor, mas mesmo assim percebemos demora, estou tentando descobrir melhoras para resolver a questão , já li muita coisa sobre otimização , uso melhor do select, mas ainda não consegui resover a questão.
Mas toda ajuda de vocês são extremamente validas, pois estamos buscando soluções.
Obrigado,
Antonio
avatar
AJC
Participante Regular
Participante Regular


Voltar ao Topo Ir em baixo

Em curso Re: USO COMANDO SEEK

Mensagem por rrfsistemas em 25/10/2013, 13:51

Antonio só respondendo parte da sua pergunta, a maioria dos DBA que conheço me disseram que tanto o Order by ou Group By causa um atraso significativo no processamento, isso claro depende tbm do equipamento, tamanho da base entre outras, mas no geral me recomendaram tentar não usar, só se precisar mesmo. Como vc não trabalha com as tabelas abertas vou analisar sua última postagem e ver se consigo uma solução...

rrfsistemas
Começando a Participar
Começando a Participar


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo


 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum