Como excluir caracteres no fim da string

Delphi

28/10/2003

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


Bclr

Bclr

Curtidas 0

Respostas

Rafael Heise

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...


GOSTEI 0
Bclr

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


GOSTEI 0
Garoto Programa

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!


GOSTEI 0
Rafael Heise

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:

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

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


GOSTEI 0
POSTAR