O EgStrParser é uma biblioteca de componentes Delphi que analisa entradas de texto livre do utilizador, transformando-as em valores tipificados e validados, e gera quatro resultados prontos a utilizar: um string com a entrada normalizada num formato legível para o utilizador, uma lista de valores de exibição normalizados, uma lista de literais formatados individualmente em SQL e um fragmento completo de comparação SQL pronto a ser inserido num query.
Os campos de pesquisa e filtragem em aplicações de bases de dados exigem normalmente que o programador trate a entrada do utilizador para cada campo individualmente: validar o valor, convertê-lo para o tipo correto e construir a expressão SQL. A lógica tem de ser repetida para cada campo e cada formulário, e tem de lidar com formatos específicos da localização, intervalos opcionais, listas com vários valores e entradas vazias.
O EgStrParser centraliza essa lógica numa única chamada. O programador passa o texto bruto do controlo de entrada e o tipo de dados esperado; a biblioteca devolve uma expressão SQL pronta a utilizar e os valores analisados, ou um código de erro preciso caso a entrada seja inválida.
Os exemplos seguintes ilustram os quatro resultados para dois casos comuns. A biblioteca lida com muitas outras combinações de tipos de dados, operadores e dialetos; estes são abordados em pormenor na Parte 2.
Exemplo 1 Um único valor para procurar os nomes de
todos os clientes chamados O’Brien, utilizando o operador
sopLikeLeft.
Entrada do utilizador: O'Brien
Resultado:
| TParseResult. | Valor |
|---|---|
| ParsedValue (String) | O’Brien |
| Values[] (Array) | [O’Brien] |
| SQLValues[] (Array) | [‘O’‘Brien’] |
| SQLExpression (String) | LIKE ‘%O’‘Brien’ ESCAPE ‘\’ |
Exemplo 2 Uma lista de datas, digitada por alguém
com pressa, que fez cópia/colagem a partir de diferentes documentos, que
utilizam separadores e formatos de data diferentes, localização
en-US, dialeto SQL de destino
sqlElevateDB.
Entrada do utilizador:
,11022026, 12/3, 1-8, 2026.12.01
Saída:
| TParseResult. | Valor |
|---|---|
| ParsedValue (String) | ; 11/02/2026 ; 12/03/2026 ; 01/08/2026 ; 12/01/2026 |
| Values[] (Matriz) | [’‘, ’02/11/2026’, ‘03/12/2026’, ‘08/01/2026’, ‘01/12/2026’] |
| SQLValues[] (Matriz) | [‘NULL’, ‘DATE’‘2026-11-02’’‘, ’DATE’‘2026-12-03’’‘, ’DATE’‘2026-01-08’’‘, ’DATE’‘2026-12-01’’’] |
| SQLExpression (String) | IN (NULL, DATE ‘2026-11-02’, DATE ‘2026-12-03’, DATE ‘2026-01-08’, DATE ‘2026-12-01’) |
ParsedValue contém valores normalizados e adaptados à
localização, tal como o parser os interpretou, num formato
legível para o utilizador. Values[] contém uma lista de
valores individuais normalizados e sensíveis às configurações regionais,
prontos para serem apresentados ou registados. SQLValues[]
contém uma lista de literais SQL individuais, prontos para serem
utilizados em expressões parametrizadas queries ou
personalizadas. SQLExpression é o fragmento de comparação
completo, pronto para ser anexado a uma cláusula WHERE.
O formato exato dos literais de data, hora e booleanos depende do
dialeto SQL; sqlElevateDB é o padrão. As diferenças entre
dialetos são abordadas em detalhe na Parte 2.
A mesma chamada lida com valores únicos, listas separadas por
vírgulas ou ponto e vírgula e intervalos, em todos os tipos de dados e
dialetos SQL suportados. O separador de intervalos (~ por
predefinição) é configurável.
Inteiro, Decimal (ponto fixo), Ponto flutuante, Booleano, Data, Hora, Data e Hora e Cadeia de caracteres.
ElevateDB, MySQL/MariaDB, PostgreSQL, Microsoft SQL Server, SQLite, Firebird, Oracle, Microsoft Access, DBISAM e BDE/Paradox.
O EgStrParser pode ser utilizado de duas formas:
Como componente — coloque um ou mais componentes
TEgStrParser num formulário ou módulo de dados, configure
as propriedades comuns uma única vez em tempo de design e chame
Parse() a partir de manipuladores de eventos, tais como
OnExit ou OnChange.
Como biblioteca — adicione
EgStrParser à cláusula uses e chame
ParseInput() diretamente, sem necessidade de qualquer
componente.
Ambas as abordagens partilham o mesmo motor de análise e produzem resultados idênticos.