Clique abaixo para nos ajudar
Conectar-se

Esqueci minha senha

Estamos no Facebook
Buscar
 
 

Resultados por:
 


Rechercher Busca avançada

Quem está conectado
8 usuários online :: Nenhum usuário registrado, Nenhum Invisível e 8 Visitantes :: 2 Motores de busca

Nenhum

[ Ver toda a lista ]


O recorde de usuários online foi de 468 em 1/3/2012, 10:43
TRY BEGIN E FLOCK()

17/4/2017, 10:32 por AJC

Pessoal estou tendo alguns problemas de gravação em rede, estou usando
try begin, mas vi algo na …

Comentários: 0

Exportar Dados Campo Memo Tabela DBF

10/4/2017, 10:28 por fcampos

Olá bom dia.

Estou tentando exportar os dados de algumas tabelas em formato dbf pelo foxpro.
O …

Comentários: 2

Função EVL()

8/4/2017, 12:18 por Clebervfp

Bom dia a todos.
Vim compartilhar de uma Função do próprio VFP que me benefício muito.
Função …

Comentários: 0

COMO BLOQUEAR REGISTRO OU TABELA NO VISUAL FOXPRO PARA GRAVAÇÃO EM REDE

3/4/2017, 10:29 por AJC

Pessoal estou tendo um problema que acontece sempre busco na minha tabela de clientes o ultimo …

Comentários: 2

Controlar Scanner Twain

31/3/2017, 17:31 por Kleber R Bento

Estou usando o EZTW32.DLL para criar uma ferramenta que escaneia e gera PDF. Porém com esses …

Comentários: 0

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

Os nossos membros postaram um total de 47 mensagens em 24 assuntos

Comandos SQL's com Expressão Regular

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

Resolvido Comandos SQL's com Expressão Regular

Mensagem por Marcos Guedes em 4/5/2010, 23:09

Olá, pessoal!
Estou trabalhando num projeto onde precisarei validar alguns comandos SQL para dar procedimento.

Até o momento tenho conseguido algo para...

Comando INSERT:
Código:
^\s*insert\s+into\s+\w*\s*\(\s*([a-z_]+[0-9]*|[a-z_]+[0-9]*\s*,\s*[a-z_]+[0-9]*)+\s*\)\s+values\s*\(\s*(('[^']*'|[0-9-+.*/]*)|('[^']*'|[0-9-+.*/]*)\s*,\s*('[^']*'|[0-9-+.*/]+))*\s*\)\s*;\s*$

Comando UPDATE:
Código:
^update\s+\w+\s+set\s+\s*\w+\s*=\s*('[^']*'|\w+)\s*((\s*,\s*\w+\s*=\s*('[^']*'|\w+)\s*)*)?(\s+where\s+(\s*\w+\s*=\s*('[^']*'|\w+)\s*)((\s+(and|or)\s+\w+\s*=\s*('[^']*'|\w+)\s*)*)?)?;$

Porém estou tendo dificuldades pois estou começando trabalhar com Expressões Regulares agora.

Alguém poderia dar uma força?
As expressões que citei acima ainda estão com falhas.
Desde já, agradeço!


Última edição por Marcos Guedes em 15/5/2010, 17:46, editado 1 vez(es)

_________________
Marcos Guedes - Programador e desenvolvedor Web.


Visite o nosso portal:
[Você precisa estar registrado e conectado para ver este link.]

Marcos Guedes
Webmaster
Webmaster


Voltar ao Topo Ir em baixo

Resolvido Re: Comandos SQL's com Expressão Regular

Mensagem por cabeludo em 5/5/2010, 09:28

Como diz o autor do livro Dominando Expressões Regulares (olhei o nome em casa):
Escrever expressões regulares é uma arte
Não domino tão a fundo para dizer que não dá, mas até onde conheço, não dá pra fazer o tratamento total apenas usando RegEx.
Por exemplo:
Código:
INSERT INTO 'T1' ('T3a', 'T3b', 'T3c') VALUES ('T5a', 'T5b', 'T5c');
A seguinte expressão pode ser o início da verificação:
Código:
^\s*INSERT\s*INTO\s*'?\w+'?\s*\(\s*('?\w+'?)(\s*,\s*'?\w+'?)*\s*\)\s*VALUES\s*\(('?\w+'?)(\s*,\s*'?\w+'?)*\)\s*;$
Se tentar passar o texto anterior, a regex vai dar ok.
Mas testemos o seguinte:
INSERT INTO 'T1' ('T3a') VALUES ('T5a', 'T5b', 'T5c');
Mesmo com o ok da regex, a sintaxe do comando está errada!
Agora, se eu considerar a primeira string, mas com a seguinte expressao:
Código:
^\s*INSERT\s*INTO\s*'?(\w+)'?\s*(\(\s*(?:'?\w+'?)(?:\s*,\s*'?\w+'?)*\s*\))\s*VALUES\s*(\((?:'?\w+'?)(?:\s*,\s*'?\w+'?)*\))\s*;$
Além do OK, tenho como retorno o seguinte:

  • T1
  • ('T3a', 'T3b', 'T3c')
  • ('T5a', 'T5b', 'T5c')

Ai sim, posso tratá-los de modo mais adequado.

O assunto é extenso e não pude prolongar mais, se agarrar, dá ideia!
avatar
cabeludo
Participa Bastante
Participa Bastante


Voltar ao Topo Ir em baixo

Resolvido Re: Comandos SQL's com Expressão Regular

Mensagem por Marcos Guedes em 5/5/2010, 11:06

Mas no meu caso, estou querendo criar uma expressão para comandos "limitados".

No caso do INSERT, o padrão exigido é:
Código:
INSERT INTO nomeTabela(campo1, campo2, campo3...ect) VALUES ('valor1', 2.0, 3, etc);

UPDATE:
Código:
UPDATE nomeTabela SET campo1='valor1', campo2='valor2', campo3=3, campo4=4.0 WHERE campoy='valory' AND|OR campox='valorx';

DELETE:
Código:
DELETE FROM nomeTabela WHERE campoy='valory' AND|OR campox='valorx';

Com base nestas limitações, acredito que seja possível, mas estou tendo dificuldades.

_________________
Marcos Guedes - Programador e desenvolvedor Web.


Visite o nosso portal:
[Você precisa estar registrado e conectado para ver este link.]

Marcos Guedes
Webmaster
Webmaster


Voltar ao Topo Ir em baixo

Resolvido Re: Comandos SQL's com Expressão Regular

Mensagem por cabeludo em 5/5/2010, 13:03

Apenas focando no insert, não sei se tem jeito pra "contar" itens reconhecidos e comparar, na propria expressao...
Adotei a muito tempo o princípio de dividir para conquistar...
Eu utilizaria pelo menos duas expressoes para validar o insert...
A primeira é a que descrevi acima, outra seria pra separar os itens de INTO e de VALUE, depois comparando a quantidade...
Estou com o pensamento em C#, não sei se esse modo funcionaria bem/facil no FP...
avatar
cabeludo
Participa Bastante
Participa Bastante


Voltar ao Topo Ir em baixo

Resolvido Re: Comandos SQL's com Expressão Regular

Mensagem por Marcos Guedes em 5/5/2010, 13:39

Foi o que fiz, fiz duas, porém postei a junção das duas funções.
Smile

Então eu quebro a string e comparo.
Até aí tudo bem, porém ainda não está muito forte.

_________________
Marcos Guedes - Programador e desenvolvedor Web.


Visite o nosso portal:
[Você precisa estar registrado e conectado para ver este link.]

Marcos Guedes
Webmaster
Webmaster


Voltar ao Topo Ir em baixo

Resolvido Re: Comandos SQL's com Expressão Regular

Mensagem por Marcos Guedes em 14/5/2010, 08:20

Pessoal, um dos modelos que precisarei para minha aplicação já consegui (eu acho...).
Caso alguém precise, aí está...

MODELO INSERT:
Código:
INSERT INTO nomeTabela (campo1, campo2, campo3) VALUES ('valo21', 'valor2', 0);
Obs.:Não importa a ordem dos valores. Aceita apenas números inteiros positivos.

Solução válida para minha aplicação:
Código:
^\s*insert\s+into\s+\w+\s*\(\s*\w+\s*((\s*,\s*\w+)?)+\s*\)\s*values\s*\(\s*('[\s*a-z-0-9.+-///*]*'|[0-9]+)\s*((,\s*('[\s*a-z-0-9.+-///*]*'|[0-9]+))?)+\s*\)\s*;\s*$

Para chegar a esta solução precisei quebrar o comando em algumas partes:

insert into nomeTabela(
Código:
^\s*insert\s+into\s+\w+\s*\(\s*$

campo1, campo2, campo3
Código:
^\s*\w+\s*((\s*,\s*\w+)?)+\s*$

) values (
Código:
^\s*\)\s*values\s*\(\s*$

'campo1', 'campo2', 0, 5, ''
Código:
^\s*('[\s*a-z-0-9.+-///*]*'|[0-9]+)\s*((,\s*('[\s*a-z-0-9.+-///*]*'|[0-9]+))?)+\s*$

);
Código:
^\s*\)\s*;\s*$




Se tiverem alguma dica que me ajude a melhorar esta expressão, agradeço.


Última edição por Marcos Guedes em 14/5/2010, 15:04, editado 2 vez(es)

_________________
Marcos Guedes - Programador e desenvolvedor Web.


Visite o nosso portal:
[Você precisa estar registrado e conectado para ver este link.]

Marcos Guedes
Webmaster
Webmaster


Voltar ao Topo Ir em baixo

Resolvido Re: Comandos SQL's com Expressão Regular

Mensagem por Marcos Guedes em 14/5/2010, 11:08

MODELO INSERT:
Código:
INSERT INTO nomeTabela VALUES ('valo21', 'valor2', 0);

Obs.: Não importa a ordem dos valores. Aceita apenas números inteiros positivos.

Solução válida para minha aplicação:
Código:
^\s*insert\s+into\s+\w+\s+values\s*\(\s*('[\s*a-z-0-9.+-///*]*'|[0-9]+)\s*((,\s*('[\s*a-z-0-9.+-///*]*'|[0-9]+))?)+\s*\)\s*;\s*$

Para chegar a esta solução precisei quebrar o comando em algumas partes:

insert into nomeTabela values(
Código:
^\s*insert\s+into\s+\w+\s+values\s*\(\s*$

'campo1', 'campo2', 0, 5, ''
Código:
^\s*('[\s*a-z-0-9.+-///*]*'|[0-9]+)\s*((,\s*('[\s*a-z-0-9.+-///*]*'|[0-9]+))?)+\s*$

);
Código:
^\s*\)\s*;\s*$




Se tiverem alguma dica que me ajude a melhorar esta expressão, agradeço.

_________________
Marcos Guedes - Programador e desenvolvedor Web.


Visite o nosso portal:
[Você precisa estar registrado e conectado para ver este link.]

Marcos Guedes
Webmaster
Webmaster


Voltar ao Topo Ir em baixo

Resolvido Re: Comandos SQL's com Expressão Regular

Mensagem por Marcos Guedes em 15/5/2010, 17:11

MODELO UPDATE:
Código:
UPDATE nomeTabela SET campo1='valor1', campo2=0 WHERE (campo1='' AND campo2='') OR (campo3='valor3' AND campo4=10);

Obs.: A condição where não é obrigatório e a existência, ou não, de parênteses, deverá ser tratada a parte.

Solução válida para minha aplicação:
Código:
^\s*update\s+\w+\s+set\s+\w+\s*=\s*('[\s*a-z-0-9.+-///*]*'|[0-9]+)\s*((,\s*\w+\s*=\s*('[a-z-0-9.+-///*]*'|[0-9]+))?)+\s*(\s*where\s+\w+\s*=\s*('[\s*a-z-0-9.+-///*]*'|[0-9]+)\s*((\s+(and|or)\s+\w+\s*=\s*('[\s*a-z-0-9.+-///*]*'|[0-9]+))?)+\s*)?\s*;\s*$

Para chegar a esta solução precisei quebrar o comando em algumas partes:

update nomeTabela set (
Código:
^\s*update\s+\w+\s+set\s+$

campo='', campo2=0
Código:
^\s*\w+\s*=\s*('[\s*a-z-0-9.+-///*]*'|[0-9]+)\s*((,\s*\w+\s*=\s*('[a-z-0-9.+-///*]*'|[0-9]+))?)+\s*$

where
Código:
^\s*where\s+$

campo='' and campo=0 or campo=1 and campo='valor'
Código:
^\s*\w+\s*=\s*('[\s*a-z-0-9.+-///*]*'|[0-9]+)\s*((\s+(and|or)\s+\w+\s*=\s*('[\s*a-z-0-9.+-///*]*'|[0-9]+))?)+\s*$

;
Código:
^\s*;\s*$




Se tiverem alguma dica que me ajude a melhorar esta expressão, agradeço.

_________________
Marcos Guedes - Programador e desenvolvedor Web.


Visite o nosso portal:
[Você precisa estar registrado e conectado para ver este link.]

Marcos Guedes
Webmaster
Webmaster


Voltar ao Topo Ir em baixo

Resolvido Re: Comandos SQL's com Expressão Regular

Mensagem por Marcos Guedes em 15/5/2010, 17:25

MODELO DELETE:
Código:
delete from nomeTabela where campo='' or campo='' and campo='';

Obs.: A condição where não é obrigatório e a existência, ou não, de parênteses, deverá ser tratada a parte.

Solução válida para minha aplicação:
Código:
^\s*delete\s+from\s+\w+\s*(\s*where\s+\w+\s*=\s*('[\s*a-z-0-9.+-///*]*'|[0-9]+)\s*((\s+(and|or)\s+\w+\s*=\s*('[\s*a-z-0-9.+-///*]*'|[0-9]+))?)+\s*)?\s*;\s*$

Para chegar a esta solução precisei quebrar o comando em algumas partes:

delete from nomeTabela
Código:
^\s*delete\s+from\s+\w+\s*$

where
Código:
^\s*where\s+$

campo='' and campo=0 or campo=1 and campo='valor'
Código:
^\s*\w+\s*=\s*('[\s*a-z-0-9.+-///*]*'|[0-9]+)\s*((\s+(and|or)\s+\w+\s*=\s*('[\s*a-z-0-9.+-///*]*'|[0-9]+))?)+\s*$

;
Código:
^\s*;\s*$




Se tiverem alguma dica que me ajude a melhorar esta expressão, agradeço.

_________________
Marcos Guedes - Programador e desenvolvedor Web.


Visite o nosso portal:
[Você precisa estar registrado e conectado para ver este link.]

Marcos Guedes
Webmaster
Webmaster


Voltar ao Topo Ir em baixo

Resolvido Re: Comandos SQL's com Expressão Regular

Mensagem por Marcos Guedes em 15/5/2010, 17:45

MODELO SELECT:
Código:
select campo, campo, campo from t1 where campo='' or campo='' and campo='';

Obs.: A condição where não é obrigatório e a existência, ou não, de parênteses, deverá ser tratada a parte.

Solução válida para minha aplicação:
Código:
^\s*select\s+(\*|\s*\w+\s*((\s*,\s*\w+)?)+)\s+\s*from\s+\w+(\s+where\s+\s*\w+\s*=\s*('[\s*a-z-0-9.+-///*]*'|[0-9]+)\s*((\s+(and|or)\s+\w+\s*=\s*('[\s*a-z-0-9.+-///*]*'|[0-9]+))?)+\s*)?\s*;\s*$

Para chegar a esta solução precisei quebrar o comando em algumas partes:

select
Código:
^\s*select\s+$

campo1, campo2, campo3 ou ( * )
Código:
^(\*|\s*\w+\s*((\s*,\s*\w+)?)+)\s+$

from nomeTabela
Código:
^\s*from\s+\w+\s+$

where
Código:
^\s*where\s+$

campo='' and campo=0 or campo=1 and campo='valor'
Código:
^\s*\w+\s*=\s*('[\s*a-z-0-9.+-///*]*'|[0-9]+)\s*((\s+(and|or)\s+\w+\s*=\s*('[\s*a-z-0-9.+-///*]*'|[0-9]+))?)+\s*$

;
Código:
^\s*;\s*$




Se tiverem alguma dica que me ajude a melhorar esta expressão, agradeço.

_________________
Marcos Guedes - Programador e desenvolvedor Web.


Visite o nosso portal:
[Você precisa estar registrado e conectado para ver este link.]

Marcos Guedes
Webmaster
Webmaster


Voltar ao Topo Ir em baixo

Resolvido Re: Comandos SQL's com Expressão Regular

Mensagem por Marcos Guedes em 15/5/2010, 17:49

Com isto, conclui minha necessidade.
Very Happy

_________________
Marcos Guedes - Programador e desenvolvedor Web.


Visite o nosso portal:
[Você precisa estar registrado e conectado para ver este link.]

Marcos Guedes
Webmaster
Webmaster


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