Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-04-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Identificar parte de un dato dentro de un campo

Hola a todos
A ver si me podéis dar una mano con esto.
Tengo una tabla en donde tengo un campo descripción.
En este campo hay por ejemplo varios productos por ejemplo:

LAMINA 187 X 305 BONE
LAMINA 187 X 305 BLANCO

Este campo lo capturo en un combobox en donde me salen todos los que cumplen con una condición (sql).

Lo que me gustaría es:
En el evento onchange del combobox poder identificar la ultima parte.
(BONE) o (BLANCO)

Se podrá.

Este es el codigo con el que lo capturo:
Código Delphi [-]
 QTemp.SQL.Text := 'SELECT Materiales.Descripcion FROM Materiales WHERE Materiales.Notas = "LAMINA"';
   QTemp.Active := True;
   While not QTemp.Eof do
   begin
      CBLamina.Items.Add(QTemp.Fields[0].Text);
      QTemp.Next;
   end;
   QTemp.Active := False;


Saludos

Última edición por Caral fecha: 08-04-2008 a las 03:40:59.
Responder Con Cita
  #2  
Antiguo 08-04-2008
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
Hola amigo,

Creo que hoy estoy cerrado, no entiendo lo que quieres hacer

Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #3  
Antiguo 08-04-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Cita:
Empezado por egostar Ver Mensaje
Hola amigo,

Creo que hoy estoy cerrado, no entiendo lo que quieres hacer

Salud OS
Pues ya somos dos.
Lo que quiero hacer es identificar parte del texto que contiene ese campo.

Si el campo tiene:
LAMINA 187 X 305 BONE

Tiene:
LAMINA
187
X
305
BONE

Quiero que al mostrar ese campo en el combobox me identifique la ultima parte del campo: BONE

Se podra?'

Estoy cada vez mas espeso, no capto nada.
Saludos
Responder Con Cita
  #4  
Antiguo 08-04-2008
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

No sé si será muy elegante, ni siquiera si acierto con lo que creo que quieres, pero, vamos, a ver qué tal parece esto:

Código Delphi [-]
function GetLaminaType(rawData: string): string;
var
  i: integer;
begin
  i := Length(rawData);
  while (i >= 0) do begin
    if (rawData[i] = ' ') then
      break;
    result := rawData[i] + result;
    Dec(i);
  end;
end;

// Ejemplo de uso
procedure TForm1.Button1Click(Sender: TObject);
begin

  // Muestra BONE
  ShowMessage(GetLaminaType('LAMINA 187 X 305 BONE'));

  // Muestra BLANCO
  ShowMessage(GetLaminaType('LAMINA 187 X 305 BLANCO'));

end;
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #5  
Antiguo 08-04-2008
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por Caral Ver Mensaje
Hola

Pues ya somos dos.
Lo que quiero hacer es identificar parte del texto que contiene ese campo.

Si el campo tiene:
LAMINA 187 X 305 BONE

Tiene:
LAMINA
187
X
305
BONE

Quiero que al mostrar ese campo en el combobox me identifique la ultima parte del campo: BONE

Se podra?'

Estoy cada vez mas espeso, no capto nada.
Saludos
Pues de poder se debe de poder , una pregunta, todos tus registros siguen ese formato?

LAMINA[espacio]187[espacio]X[espacio]305[espacio]BONE

Si es así puedes usar esta función que me encontre creo en Trucomanía.

Código Delphi [-]
function GetToken(Cadena,Separador:string;Token:integer):string;
var
  Posicion:integer;
begin
   while Token > 1 do begin
     Delete(Cadena,1,Pos(Separador,Cadena));
     Dec(Token);
   end;
   Posicion:=Pos(Separador,Cadena);
   if Posicion=0 then result:=cadena
   else Result:=Copy(Cadena,1,Posicion-Length(Separador));
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(GetToken('LAMINA 187 X 305 BONE',' ',5));
  ShowMessage(GetToken('LAMINA 187 X 305 BLANCO',' ',5));
end;

Salud OS

Edito: Vaya amigo Dec, me ganaste y me parece que tu función GetLaminaType() esta optimizada ....
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney

Última edición por egostar fecha: 08-04-2008 a las 04:19:18.
Responder Con Cita
  #6  
Antiguo 08-04-2008
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Yo sigo a lo mío... Creo que mi anterior función podría (y aun debería) quedar así, mejor o peor:

Código Delphi [-]
function GetLaminaType(rawData: string): string;
var
  i: integer;
begin
  result := '';
  i := Length(rawData);
  while (i >= 1) do begin
    if (rawData[i] = ' ') then
      break;
    result := rawData[i] + result;
    Dec(i);
  end;
end;

Nótese que ahora el bucle aguantaría mientras la variable "i" valiera igual o más que 1. ¿Por qué así ahora? Porque, si no recuerdo mal, las cadenas en Delphi son "Arrays" de caracteres cuyo índice comienza en uno, no en cero. Tal anteriormente la función de marras podría haber dado algún problema... ¡tal vez incluso ahora pueda darlos!

PD. Probándolo de nuevo no parece haber problema con el "cero", pero, el "uno" me sigue pareciendo más oportuno. Además he añadido el "result" del principio, por principio.
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 08-04-2008 a las 04:23:46.
Responder Con Cita
  #7  
Antiguo 08-04-2008
keyboy keyboy is offline
Miembro
 
Registrado: oct 2004
Posts: 367
Poder: 20
keyboy Va por buen camino
Yo propongo esta:

Código Delphi [-]
function DameElTipo(Dato: String): String;
var
  Espacio: Integer;

begin
  Espacio := Pos(' ', ReverseString(Dato));
  Result := Copy(Dato, Length(Dato) - Espacio + 2, Length(Dato));
end;

Bye
Responder Con Cita
  #8  
Antiguo 08-04-2008
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Cita:
Empezado por egostar
Vaya amigo Dec, me ganaste y me parece que tu función GetLaminaType() esta optimizada ....
Huy... no sé qué te diga... bueno, sí: que la tuya me parece curiosa.

Y, respecto de la del compañero keyboy, chico, yo probé con el "Reverse" pero me hice un lío...

Por cierto, creo que la de keyboy se muestra favorita, ahora, eso sí, le falta algo:

Código Delphi [-]
uses
  StrUtils;

__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 08-04-2008 a las 04:29:47.
Responder Con Cita
  #9  
Antiguo 08-04-2008
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por dec Ver Mensaje
Huy... no sé qué te diga... bueno, sí: que la tuya me parece curiosa.
, de que hablas amigo Dec

Cita:
Empezado por dec Ver Mensaje
Y, respecto de la del compañero keyboy, chico, yo probé con el "Reverse" pero me hice un lío...

Por cierto, creo que la de keyboy se muestra favorita, ahora, eso sí, le falta algo:
mmmm, Yo ni siquiera he podido ver como funciona ese ReverseString(), no existe en mi rudimentario Delphi4 , bueno, ya vere mañana en mi TurboDelphi

Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #10  
Antiguo 08-04-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Jeje... me ganaron... yo ya estaba preparando una función... pero bueno... mejor no intento.

Total, cuando vengan por aquí Domingo y Javier veremos como queda la cosa.

Mientras tanto veo como ganarles en ASM.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #11  
Antiguo 08-04-2008
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Cita:
Empezado por egostar
mmmm, Yo ni siquiera he podido ver como funciona ese ReverseString(), no existe en mi rudimentario Delphi4
Aquí Zarko Gajic implementa una función "ReverseString()", e informa de que existe desde Delphi 6.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #12  
Antiguo 08-04-2008
keyboy keyboy is offline
Miembro
 
Registrado: oct 2004
Posts: 367
Poder: 20
keyboy Va por buen camino
En realidad lo de ReverseString está muy jalado pues al final termina haciendo el recorrido inverso. Mucho mejor la de dec que creo se puede simplificar un poco:

Código Delphi [-]
function DameloYa(Dato: String): String;
var
  I: Integer;

begin
  for I := Length(Dato) downto 1 do
    if Dato[i] = ' ' then
      break;

  Result := Copy(Dato, I + 1, Length(Dato));
end;

Bye
Responder Con Cita
  #13  
Antiguo 08-04-2008
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por dec Ver Mensaje
Aquí Zarko Gajic implementa una función "ReverseString()", e informa de que existe desde Delphi 6.
Eso mismo pensé

Cita:
Empezado por keyboy Ver Mensaje
En realidad lo de ReverseString está muy jalado pues al final termina haciendo el recorrido inverso. Mucho mejor la de dec que creo se puede simplificar un poco:
Y bueno, como lo dije, ya he probado la función ReverseString() en mi TurboDelphi y puede ser que no sea tan "jalado" en ciertas circunstancias.

De cualquier forma esto me hace auto-enviarme a RTFM

Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #14  
Antiguo 08-04-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Sois unos maestros, pero casualmente aveces no os dais cuenta de quien pregunta (el Novato).
Esto de las funciones me mata.
Alguien me lo traduce.
Recordad, tengo un combobox, de ahi parto, la información entra en el.
Como uso la función para llamar al dato que contiene el combobox.
Ya se, nunca aprenderé, pero de que lo intento, lo intento.
Saludos
Responder Con Cita
  #15  
Antiguo 08-04-2008
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por Caral Ver Mensaje
Hola
Sois unos maestros, pero casualmente aveces no os dais cuenta de quien pregunta (el Novato).
Esto de las funciones me mata.
Alguien me lo traduce.
Recordad, tengo un combobox, de ahi parto, la información entra en el.
Como uso la función para llamar al dato que contiene el combobox.
Ya se, nunca aprenderé, pero de que lo intento, lo intento.
Saludos
Hola amigo "NOVATO" , lo que pasa es que no entiendo que es lo que quieres hacer, la parte de obtener el color ya está resuelta, ahora hay que resolver lo que tu mente quiere hacer

Será que nos expliques un poco mas a detalle que es lo que intentas?

Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #16  
Antiguo 08-04-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Que poca paciencia me tienes, te esta volviendo viejo amigo.
Vamos otra vez.
Tengo un campo. (text)
Recojo el dato en un combobox.
Ahora con la función que hicisteis quiero saber la ultima parte de ese dato.
No lo capto, seguro es facil y vosotros lo veis, pero yo no.
Anda, que no te cuesta nada explicárselo al Novato.
Saludos
Responder Con Cita
  #17  
Antiguo 08-04-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Amigo! Me extraña!

Creo el Alz te ha visitado
Bueno creo que a lo que te refieres es a esto:

Código Delphi [-]
VariableOPriedad := NombreDeLaFuncion(VariablesOPropiedadesOConstantes);

Por ejemplo:

Código Delphi [-]
UnColor := DameloYa(ComboBox1.Text);


Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #18  
Antiguo 08-04-2008
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por Caral Ver Mensaje
Hola
Que poca paciencia me tienes, te esta volviendo viejo amigo.
Vamos otra vez.
Tengo un campo. (text)
Recojo el dato en un combobox.
Ahora con la función que hicisteis quiero saber la ultima parte de ese dato.
No lo capto, seguro es facil y vosotros lo veis, pero yo no.
Anda, que no te cuesta nada explicárselo al Novato.
Saludos
Código Delphi [-]
function DameloYa(Dato: String): String;
var
  I: Integer;

begin
  for I := Length(Dato) downto 1 do
    if Dato[i] = ' ' then
      break;
  Result := Copy(Dato, I + 1, Length(Dato));
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   Edit1.Text := DameloYa(ComboBox1.Text);
end;

Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #19  
Antiguo 08-04-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Veis, no dolió, ahora si lo capte, era solo de tomarme la pastilla del Altz y ya.
Algún día entenderé esto de las funciones.
Gracias, ya esta resulto, la próxima vez pregunto mejor.
Para que veáis como quedo, (Use la función de Dec.):
Código Delphi [-]
procedure TFOrdenProdAcrilico.CBLaminaChange(Sender: TObject);
var
color: string;
begin
 Color:= GetLaminaType(CBLamina.Text);
 showmessage(color);
   QTemp.Close;
   QTemp.SQL.Text := 'SELECT Materiales.Disponible FROM Materiales WHERE Materiales.Descripcion = isp';
   QTemp.Parameters[0].Value:= CBLamina.Text;
   QTemp.Active := True;
   Dispon.Text:= QTemp.Fields[0].Text;
end;

Saludos
Responder Con Cita
  #20  
Antiguo 08-04-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Bueno, aqui sigo molestando, otro asunto:
Ya consegui que me mostrara el color con la funcion, esto esta bien.
Ahora lo que necesito es que una vez que consiga el color del combo, me carge en otro combo los datos de otros productos que tienen tambien esa condicion.
Para que os deis cuenta.
1- paso:
Cargo de combobox ( LAMINA 187 X 305 BONE )
Genero la funcion y me da el color.
Esto va bien.

2- paso:
Una vez cargado el dato del color quiero que se me genere una consulta
Y que me carge en otro combobox el dato que tenga tambien la condicion de Color.
El dato es este:
IBIZA TERMOFORMADO BONE

Lo que tengo:
Código Delphi [-]
procedure TFOrdenProdAcrilico.CBLaminaChange(Sender: TObject);
var
ColorL: string;
begin
   ColorL:= GetLaminaType(CBLamina.Text);
   EColor.Text:= ColorL;
   QTemp.Close;
   QTemp.SQL.Text := 'SELECT Materiales.Disponible FROM Materiales WHERE Materiales.Descripcion = isp';
   QTemp.Parameters[0].Value:= CBLamina.Text;
   QTemp.Active := True;
   Dispon.Text:= QTemp.Fields[0].Text;

// aqui es donde lo necesito

   QTemp.SQL.Text := 'SELECT Materiales.Descripcion FROM Materiales WHERE Materiales.Notas ="TERM" ORDER BY Materiales.Descripcion';
   QTemp.Active := True;
   While not QTemp.Eof do
   begin
      CBPieza.Items.Add(QTemp.Fields[0].Text);
      QTemp.Next;
   end;
   QTemp.Active := False;
end;
Ojala me entendáis.
Saludos
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Obtener la parte decimal de un campo money mbelda MS SQL Server 4 08-02-2008 16:10:21
extraer un parte de un campo fecha de interbase!!! antonio peña SQL 2 04-10-2006 01:11:47
Identificar el tipo de dato kayetano MySQL 1 28-07-2004 19:43:54
como buscar dentro de una consulta un texto que sea parte de la descripcion viajero2015 Conexión con bases de datos 1 15-11-2003 05:18:09
eliminar parte de los datos de un campo acrophet Conexión con bases de datos 1 16-10-2003 13:07:51


La franja horaria es GMT +2. Ahora son las 18:22:47.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi