Jump to content
Fórum Script Brasil
  • 0

Usando Substring Para Copiar Parte Da Descrição


Guest Amarildo
 Share

Question

Guest Amarildo

Ola, pessoal, alguém poderia estar me orientando, estou usando Paradox, e numa select necessito copiar apenas parte do nome do cliente, no maximo preciso copiar 10 caracteres do nome do cliente e imprimir. Tentei por varios meios, ocorre varios erros, caso alguém tenha a tecnica de me orientar, agradeço

Link to comment
Share on other sites

8 answers to this question

Recommended Posts

  • 0

opa

usa Copy

vamos supor

var

szCliente: String;

begin

szCliente := Copy(Table1.NomeCLiente.Value, 1, 10);

onde Copy(String, Index, número de caracteres a serem copiados);

então no exemplo ele copia do caracter 1 ao 10, sendo 10 caracteres

Link to comment
Share on other sites

  • 0

Amarildo, já que você utiliza paradox e um select, outra alternativa é obter o substring direto na instrução SQL.

Ex.: Obter uma fração de 10 caracteres (no máximo) do campo NOM_CLIENTE, sendo que o nome da coluna retornada será chamada NOM_CLIENTE10 (este fica a seu critério, só não deve ser duplicado)

SELECT SUBSTRING(NOM_CLIENTE from 1 for 10) AS NOM_CLIENTE10

FROM CLIENTE.db

[]s

Link to comment
Share on other sites

  • 0
Guest Visitante

A todos voces que opinarão em meu auxilio, vou tentar todas as opções descritas, fico grato pelo atenção e auxilio, valeu pessoal, um forte abraço a todos, felicidades

Link to comment
Share on other sites

  • 0
Guest Visitante

Ola Pessoal, estou tendo dificuldades ainda com relação a substring na select estou usando paradox como base de dados encontra-se abaixo minha select para que possam estar ajudando-me numa solução pratica a favoravel a minha situação,. agradeço a todos que postarem aqui em meu auxilio, no aguardo, obrg

SELECT SUBSTRING (CADCLI.CLI_NOME FROM 1 FOR 10) AS NOMEX,

Sum(RECEBER.REC_VALORDUPLICATA) as Total

From CADCLI,RECEBER

Where RECEBER.REC_CLIENTE = CADCLI.CLI_CPFGC AND

RECEBER.REC_DATAVENCIMENTO Between :VarDataI and :VarDataF

Group By 1

Obs.: Mesmo descrevendo estes procedimentos na select ainda ocorre erro: CAPACIBILITY NOT SUPPORTED

Link to comment
Share on other sites

  • 0

Amarildo, parece que esse seu problema é bem antigo não?! (ForumWeb -2004)

O uso da instrução SUBSTRING no Paradox (ForumWeb - Hoje) só pode ser desta forma: SUBSTRING(nome_campo from inicio for num_caracteres).

O outro formato não é utilizado pelo paradox. O SQLServer, por exemplo utiliza na outra forma citada, já no Oracle, IBM DB2 a função tem o nome SUBSTR. No Interbase ou Firebird, o primeiro formato é utilizado, porém se instalada uma UDF, você terá o segundo formato, sendo que o nome da função é SUBSTR.

O problema está associado a cláusula GROUP BY. Só para você confirmar, escreva a instrução SQL desta forma:

SELECT CADCLI.CLI_NOME, Sum(RECEBER.REC_VALORDUPLICATA) as Total
FROM CADCLI,RECEBER
WHERE RECEBER.REC_CLIENTE = CADCLI.CLI_CPFGC 
  AND RECEBER.REC_DATAVENCIMENTO BETWEEN :VarDataI AND :VarDataF
GROUP BY CADCLI.CLI_NOME

No PARADOX, a cláusula ORDER BY não aceita que você coloque a função SUBSTRING ou indicação da posição do campo (1) - para esses a mensagem é 'Capability not supported'. Se colocar o ALIAS (NOMEX) a mensagem será 'Invalid field name'. Então, não tem jeito.

Pela sua consulta, não parece-me problemático que você deixe de utilizar SUBSTRING. Se você está falando em totalizar valor de duplicata, parece-me que devem ser totalizados apenas de um cliente específico e não por nome, não é?!

Por exemplo, havendo homônimos ou nomes similares pode ocorrer a totalização indevida. Assim, ADERBAL DA SILVA, ADERBAL DA FONSECA, ADERBAL DA PIEDADE, ficariam todos agrupados em ADERBAL DA. Mas acho que não é o correto.

Então se o problema é apenas reduzir o comprimento do texto para utilizá-lo num gráfico, como sugere no 1º post do ForumWeb, você pode selecionar o campo CLI_NOME normalmente e, então, criar um campo calculado para conter apenas o substring no tamanho desejado e utilizá-lo onde precisar.

Link to comment
Share on other sites

  • 0
Guest Visitante

Ola Micheus, na verdade isso realmente tenho tido dificuldades a um bom tempo, ate o presente momento meu cliente estava satisfeito com a situação de gerar na tela aquele nome enorme do cliente. Por motivos da apresentação dos dados na tela, estou retornando ao forum para solicitar ajuda em saber qual a melhor opção junto ao pessoal em tentar sanar esse problema, já tentei por varias formas e nada de concreto, caso voce tenha alguma ideia pratica e flexivel para estar me orientando no que realmente devo fazer, agradeceria, quanto ao campo calculado em que sugeriu gostaria da sua orientação de como criar. Uma outra opção que, creio que vou acabar fazendo caso não tenha, e fazer gerar um arquivo .cds usando copy no campo e gravando essas informações e enviar para o grafico, mas não gostaria de entrar nessa situação pois irá envolver mais um arquivo. Mesmos assim agradeço pela sua atenção a minha pessoa, fico no aguardo por maiores orientações, obrg

Link to comment
Share on other sites

  • 0
... caso voce tenha alguma ideia pratica e flexivel para estar me orientando no que realmente devo fazer, agradeceria, quanto ao campo calculado em que sugeriu gostaria da sua orientação de como criar.
Amarildo, para utilizar este recurso, como mensionei antes, você manteria o string inteiro em seu comando SQL. Imagino que você tenha adicionado os campos (fields) no seu dataset, certo?! Se não isto facilitaria as coisas.

Para adicionar um campo calculado ao seu dataset (acredito que seja um TQuery), você acessa o editor de campos (duplo click sobre o componente), clicando o botão direito do mouse você selecina no menu pop-up New field. Vamos digitar NOMEX em name, em Type selecionamos String e em Field type selecionameos Calculated e clicamos em OK. Pronto, temos nosso campo calculado.

Agora, para atribuí-lo um valor, utilizamos o evento OnCalcFields do dataset.

neste evento escrevemos o seguinte:

procedure TForm1.Query1CalcFields(DataSet: TDataSet);
begin
  Query1NAMEX.Value := Copy(Query1CLI_NOME.Value, 1, 10);
end;

você tem que ajustar o nome do form e dataset conforme seu caso, mas é basicamente só isto. Daí em seu gráfico você utiliza o campo NAMEX e não CLI_NOME.

Uma outra opção que, creio que vou acabar fazendo caso não tenha, e fazer gerar um arquivo .cds usando copy no campo e gravando essas informações e enviar para o grafico, mas não gostaria de entrar nessa situação pois irá envolver mais um arquivo.
Mas se a utilização do campo calculado não resolver, acho que essa será sua última alternativa.

Abraços

Link to comment
Share on other sites

  • 0
Guest Visitante

Ao garoto, MICHEUS, venho lhe agradecer pelo carinho a minha pessoa, em estar orientando e ajudando-me no que realmente eu estava precisando, agradeço a Deus pela sua vida, garoto, obrg um forte abraço, sucesso e saude, neste NOVO ANO. OBRIGADO

Obs. Problema resolvido

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share



  • Forum Statistics

    • Total Topics
      151k
    • Total Posts
      649.1k
×
×
  • Create New...