Clique abaixo para nos ajudar
Conectar-se

Esqueci minha senha

Estamos no Facebook
Buscar
 
 

Resultados por:
 


Rechercher Busca avançada

Quem está conectado
13 usuários online :: Nenhum usuário registrado, Nenhum Invisível e 13 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
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

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