Login
Estamos no Facebook
Buscar
Quem está conectado
Há 6 usuários online :: Nenhum usuário registrado, Nenhum Invisível e 6 Visitantes :: 2 Motores de buscaNenhum
[ Ver toda a lista ]
O recorde de usuários online foi de 468 em 1/3/2012, 10:43
Brasília
| |
Estamos no Twitter

Nossa Comunidade

Nosso Grupo

Últimos assuntos
Top dos mais postadores
| Marcos Guedes | ||||
| hugo | ||||
| alceu11 | ||||
| Julio | ||||
| m@r<3|o | ||||
| mfelis | ||||
| Tales Ruan | ||||
| Nelson Arcas | ||||
| _batmanvfp_ | ||||
| marcio |
Karaoke feito em FoxPro 2.6
23/5/2012, 11:45 por fabiomacarrao
Bom dia a todos. Desenvolvi um programa em FoxPro for windows 2.6 para karaoke. tenho mais de 2700 …
Comentários: 3
Estatísticas
Temos 4048 usuários registradosO último usuário registrado atende pelo nome de fabiomacarrao
Os nossos membros postaram um total de 14433 mensagens em 2047 assuntos
Comandos SQL's com Expressão Regular
Página 1 de 1 • Compartilhe •
Comandos SQL's com Expressão Regular
Olá, pessoal!
Estou trabalhando num projeto onde precisarei validar alguns comandos SQL para dar procedimento.
Até o momento tenho conseguido algo para...
Comando INSERT:
Comando UPDATE:
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!
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.
Convidado, seja nosso seguidor no Twitter:
twitter.com/programacaobras
Marcos Guedes- Webmaster

Re: Comandos SQL's com Expressão Regular
Como diz o autor do livro Dominando Expressões Regulares (olhei o nome em casa):
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:
A seguinte expressão pode ser o início da verificação:
Se tentar passar o texto anterior, a regex vai dar ok.
Mas testemos o seguinte:
Mesmo com o ok da regex, a sintaxe do comando está errada!
Agora, se eu considerar a primeira string, mas com a seguinte expressao:
Além do OK, tenho como retorno o seguinte:
Ai sim, posso tratá-los de modo mais adequado.
O assunto é extenso e não pude prolongar mais, se agarrar, dá ideia!
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!
_________________
[Você precisa estar registrado e conectado para ver esta imagem.]
Lucy - Hallelujah (Alexandra Burke) --> D.Maria cantando!!!
PalcoMP3/RatoMG
RIK - CD Demo

cabeludo- Participa Bastante

Re: Comandos SQL's com Expressão Regular
Mas no meu caso, estou querendo criar uma expressão para comandos "limitados".
No caso do INSERT, o padrão exigido é:
UPDATE:
DELETE:
Com base nestas limitações, acredito que seja possível, mas estou tendo dificuldades.
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.
Convidado, seja nosso seguidor no Twitter:
twitter.com/programacaobras
Marcos Guedes- Webmaster

Re: Comandos SQL's com Expressão Regular
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...
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...
_________________
[Você precisa estar registrado e conectado para ver esta imagem.]
Lucy - Hallelujah (Alexandra Burke) --> D.Maria cantando!!!
PalcoMP3/RatoMG
RIK - CD Demo

cabeludo- Participa Bastante

Re: Comandos SQL's com Expressão Regular
Foi o que fiz, fiz duas, porém postei a junção das duas funções.
Então eu quebro a string e comparo.
Até aí tudo bem, porém ainda não está muito forte.
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.
Convidado, seja nosso seguidor no Twitter:
twitter.com/programacaobras
Marcos Guedes- Webmaster

Re: Comandos SQL's com Expressão Regular
Pessoal, um dos modelos que precisarei para minha aplicação já consegui (eu acho...).
Caso alguém precise, aí está...
MODELO INSERT:
Obs.:Não importa a ordem dos valores. Aceita apenas números inteiros positivos.
Solução válida para minha aplicação:
Para chegar a esta solução precisei quebrar o comando em algumas partes:
insert into nomeTabela(
campo1, campo2, campo3
) values (
'campo1', 'campo2', 0, 5, ''
);
Se tiverem alguma dica que me ajude a melhorar esta expressão, agradeço.

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.
Convidado, seja nosso seguidor no Twitter:
twitter.com/programacaobras
Marcos Guedes- Webmaster

Re: Comandos SQL's com Expressão Regular
MODELO INSERT:
Obs.: Não importa a ordem dos valores. Aceita apenas números inteiros positivos.
Solução válida para minha aplicação:
Para chegar a esta solução precisei quebrar o comando em algumas partes:
insert into nomeTabela values(
'campo1', 'campo2', 0, 5, ''
);
Se tiverem alguma dica que me ajude a melhorar esta expressão, agradeço.

- 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.
Convidado, seja nosso seguidor no Twitter:
twitter.com/programacaobras
Marcos Guedes- Webmaster

Re: Comandos SQL's com Expressão Regular
MODELO UPDATE:
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:
Para chegar a esta solução precisei quebrar o comando em algumas partes:
update nomeTabela set (
campo='', campo2=0
where
campo='' and campo=0 or campo=1 and campo='valor'
;
Se tiverem alguma dica que me ajude a melhorar esta expressão, agradeço.

- 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.
Convidado, seja nosso seguidor no Twitter:
twitter.com/programacaobras
Marcos Guedes- Webmaster

Re: Comandos SQL's com Expressão Regular
MODELO DELETE:
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:
Para chegar a esta solução precisei quebrar o comando em algumas partes:
delete from nomeTabela
where
campo='' and campo=0 or campo=1 and campo='valor'
;
Se tiverem alguma dica que me ajude a melhorar esta expressão, agradeço.

- 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.
Convidado, seja nosso seguidor no Twitter:
twitter.com/programacaobras
Marcos Guedes- Webmaster

Re: Comandos SQL's com Expressão Regular
MODELO SELECT:
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:
Para chegar a esta solução precisei quebrar o comando em algumas partes:
select
campo1, campo2, campo3 ou ( * )
from nomeTabela
where
campo='' and campo=0 or campo=1 and campo='valor'
;
Se tiverem alguma dica que me ajude a melhorar esta expressão, agradeço.

- 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.
Convidado, seja nosso seguidor no Twitter:
twitter.com/programacaobras
Marcos Guedes- Webmaster

Re: Comandos SQL's com Expressão Regular
Com isto, conclui minha necessidade.

_________________
Marcos Guedes - Programador e desenvolvedor Web.
Convidado, seja nosso seguidor no Twitter:
twitter.com/programacaobras
Marcos Guedes- Webmaster

Página 1 de 1
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum
Início
» Modificar TitleBar e Icone do Executavel.
» Criar atalho, SYS(2020) e Desktop
» Karaoke feito em FoxPro 2.6
» Como separar caminho do diretório?
» Utilizando PHPMailer
» Programador em Visual Foxpro
» Link PHP (Dúvida)
» Fundo do PROJETO Transparente??
» Minimizar , Maximizar e Restaurar
» Pivot Table no sql server
» Scroll EditBox Automatico
» Select Nexval do FoxPro no OracleXE
» Colocar gif na caixa do MESSAGEBOX ()
» Comparar Versões do programa.exe
» Menu lateral
» Fazer com que a tela do sistema assume a janela principal
» Trocar Palavra no Sistema
» invocar Dll em Xbase
» Fechar Porta Aberta