Como excluir caracteres no fim da string
Olá!
Tenho uma tela para consulta que mostra o resultado da query num dbgrid.
Sendo que as cláusulas where dessa query, são montadas através de if´s, onde uma ou mais variáveis recebem a condição (um total de 5 variáveis).
No final dos if´s, tenho uma outra variável que recebe a query final completa, conforme abaixo:
w_sql :=
w_select + w_where1 + w_where2 + w_where3 + w_where4 + w_where5;
O problema é que no fim dessas variáveis where, eu tenho um ´and´, ou seja, se por exemplo apenas a variável w_where1 receber a condição, irá dar um erro na query, pois no fim do select terá um ´and´.
Por isso gostaria de saber como faço para identificar e deletar no fim da variável w_sql os caracteres ´and´ ???
Obrigado
Tenho uma tela para consulta que mostra o resultado da query num dbgrid.
Sendo que as cláusulas where dessa query, são montadas através de if´s, onde uma ou mais variáveis recebem a condição (um total de 5 variáveis).
No final dos if´s, tenho uma outra variável que recebe a query final completa, conforme abaixo:
w_sql :=
w_select + w_where1 + w_where2 + w_where3 + w_where4 + w_where5;
O problema é que no fim dessas variáveis where, eu tenho um ´and´, ou seja, se por exemplo apenas a variável w_where1 receber a condição, irá dar um erro na query, pois no fim do select terá um ´and´.
Por isso gostaria de saber como faço para identificar e deletar no fim da variável w_sql os caracteres ´and´ ???
Obrigado
Bclr
Curtidas 0
Respostas
Rafael Heise
28/10/2003
Acho que é mais fácil você fazer diferente
simplesmente receber as cláusulas where sem o AND do começo, e ir colocando AND a medida que você precisa
if where_1 <> ´´ then
sql := sql + ´ AND ´ + where_1
e assim por diante...
simplesmente receber as cláusulas where sem o AND do começo, e ir colocando AND a medida que você precisa
if where_1 <> ´´ then
sql := sql + ´ AND ´ + where_1
e assim por diante...
GOSTEI 0
Bclr
28/10/2003
O problema é que eu tenho 5 variáveis, ou seja, se fizer desta maneira teria que fazer vários if´s, e passar todas as situações possíveis.
O ideal mesmo seria excluir os caracteres ´and´ no final da string formada.
Alguém saberia me dizer como fazer isto???
Obrigado
O ideal mesmo seria excluir os caracteres ´and´ no final da string formada.
Alguém saberia me dizer como fazer isto???
Obrigado
GOSTEI 0
Garoto Programa
28/10/2003
Prezado,
Use da seguinte forma.
Delete(w_sql, Length(w_sql) - 3, 3);
Desta forma você vai deletar somente os 3 ultimos caracteres.
Supondo que o w_sql seja:
w_sql:= ´Select * from MyTab where campo1=´Nome´ and Campo2=100 and´
Após esta função ficaria assim
w_sql:= ´Select * from MyTab where campo1=´Nome´ and Campo2=100 ´
O valor do Length(w_sql) é de 59
e o tamanho do texto a ser deletado ´AND´ é de três, então nos deletamos do texto w_sql somente os 3 ultimos caracteres.
Espero ter lhe ajudado.
Depois você da uma olhada no conselho do Zerneo pois a ideia dele é boa.
Que Deus lhe Abençoe!
Use da seguinte forma.
Delete(w_sql, Length(w_sql) - 3, 3);
Desta forma você vai deletar somente os 3 ultimos caracteres.
Supondo que o w_sql seja:
w_sql:= ´Select * from MyTab where campo1=´Nome´ and Campo2=100 and´
Após esta função ficaria assim
w_sql:= ´Select * from MyTab where campo1=´Nome´ and Campo2=100 ´
O valor do Length(w_sql) é de 59
e o tamanho do texto a ser deletado ´AND´ é de três, então nos deletamos do texto w_sql somente os 3 ultimos caracteres.
Espero ter lhe ajudado.
Depois você da uma olhada no conselho do Zerneo pois a ideia dele é boa.
Que Deus lhe Abençoe!
GOSTEI 0
Rafael Heise
28/10/2003
Então faça o seguinte
Função que apaga todas as palvras do fim de um texto até que encontre outra palavra:
só peço que deixe os comentários
Função que apaga todas as palvras do fim de um texto até que encontre outra palavra:
Function DeleteTextInEnd(aString,aWord; aCaseSensitive: boolean = False): string; // Create by Rafael M. Heise // in 29/10/2003 (dd/mm/yyyy) var cont: integer; temp: string; begin temp := ´´; aString := Trim(aString); if not aCaseSensitive then aWord := aWord; for cont := Length(aString) downto 1 do begin if aString[cont] <> ´ ´ then temp := temp + aString[cont]; if aString[cont] = ´ ´ then begin if not aCaseSensitive then temp := AnsiUpperCase(temp); if temp = aWord then begin Delete(aString,cont,Length(Temp)); aString := Trim(aString); end else Break; temp := ´´; end; end; Result := aString; end;
só peço que deixe os comentários
GOSTEI 0
Bclr
28/10/2003
Valeu Garoto de Programa.
O que eu precisava era simplesmente o comando:
Delete(w_sql, Length(w_sql) - 3, 3);
Resolvido.
Obrigado
O que eu precisava era simplesmente o comando:
Delete(w_sql, Length(w_sql) - 3, 3);
Resolvido.
Obrigado
GOSTEI 0