Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Pasar datos de una tabla a un memo (https://www.clubdelphi.com/foros/showthread.php?t=22078)

Cosgaya 05-06-2005 02:24:37

Pasar datos de una tabla a un memo
 
bueno, ahi va otra vez mi pregunta, mejor explicada
yo tengo una tabla de productos con su descripcion (paradox), y quiero, que al apretar a un boton, el campo descripcion de todos los producotos, se pase a varios memo, edit o lo que se necesite, y que cuando se llene el memo (max.200 caracteres por memo) pase al siguiente.

nota: es imprescindible varios memos

si alguien me la prodia resolver gracias
disculpen por no haber sabido expresarme en mi anterior pregunta

roman 05-06-2005 04:38:29

¿Y cuál es el problema?

Recorres la tabla con un ciclo. En cada iteración tomas el nombre del producto con FieldByName y lo agregas al Memo en turno. Cuando éste se agote (Memo.Lines.Count te lo indicará) comienzas con el siguiente.

// Saludos

Cosgaya 06-06-2005 11:37:44

Continua con el mismo tema...
 
hola roman gracias por lo del otro dia (pasar la informacion de una tabla a un memo y cuando acabe con el primer memo seguir con el otro, cuando cada memo tenia un max. 200 caracteres), pero no consigo hacer para que cuando acaba con el primer memo siga con el siguiente no se como insertarlo
si pudieras ayudarme
muchas gracias
:rolleyes: :rolleyes: :rolleyes:
procedure TForm3.Button1Click(Sender: TObject);

begin
with form2.table1 do
begin

First;
Repeat
memo1.lines.add (FieldByName('Anuncio').AsString + ('-------'));
Next
Until (FieldByName('Anuncio').AsString = ' ')

or EOF
end;

Neftali [Germán.Estévez] 06-06-2005 13:40:28

Antes de nada, por favor, no abras hilos nuevos, para continuar con un tema ya expuexto y abierto.
(1) Usuarios que lo lean no sabrán de qué hablas (y deberán buscar el post anterior).
(2) Alguien que posteriormente busque lo mismo que tú has expuesto no encontrará una solución satisfactoria en el post (ya que está repartida en varios de ellos...)

Para saber la longitud del memo puedes utilizar Memo.Lines.Text, eso te devuelve el texto del memo en una cadena. A eso le puedes aplicar la función Lenght, para calcular la longitud.

Para utilizar varios memos, numéralos (por ejemplo) como memo1, memo2, memo3,... Dentro del bucle utiliza un contador (i, por ejemplo) para "saber" con qué memo estás trabajando. Con FindComponent('Memo'+IntToStr(i)) puedes selecconar el que necesitas en cada momento.

Cosgaya 06-06-2005 14:40:38

duda con findcomponent
 
gracias por la respuesta y disculpa
otra cosa no se como meter el findcomponent en mi codigo

Neftali [Germán.Estévez] 06-06-2005 15:47:05

Código Delphi [-]
   form1.FindComponet(Nombre);

Te buscará un componente con ese Nombre dentro del form1.

Cosgaya 06-06-2005 20:06:59

no lo consigo
 
neftali sigo sin averiguar en que parte o de que forma debo introducier el findcomponent para cuando se acabe el un memo (max.200 caracteres) empiece con el otro. el codigo en que lo tengo que metere esta un poco mas arriba.
gracias

Neftali [Germán.Estévez] 07-06-2005 10:53:33

Échale un vistazo a éste código:

Código Delphi [-]
 procedure TForm1.BitBtn1Click(Sender: TObject);
 const
   LOG_MAX_MEMO = 200;
 var
   i:Integer;  // nos servirá para ver qué memo utilizamos
   mm:TMemo;
   comp:TComponent;
 begin
 
   // Inicializar la i
   i := 1;
   // Abrir la tabla
   Self.table1.Open;
   // Acceder al primer memo
   mm := TMemo(Self.FindComponent('memo' + IntToStr(i)));
 
   with Self.table1 do begin
     First;
     repeat
       mm.lines.add(FieldByName('Codigo').AsString + ('-------'));
       Next;
 
       // Comprobar si ha llegado a la longitud máxima
       if (Length(mm.Lines.Text) > LOG_MAX_MEMO) then begin
         i := i + 1;
         // Accder al siguiente
         comp := Self.FindComponent('memo' + IntToStr(i));
         // existe?
         if Assigned(comp) then begin
           mm := TMemo(comp);
         end
         else begin
           MessageDlg('Se han acabado los memos...', mtError, [mbOK], 0);
           Self.Table1.Last;
         end;
       end;
 
     until (FieldByName('Codigo').AsString = '') or EOF
   end;
 end;

Éstá generado a partir del tuyo...

Cosgaya 07-06-2005 21:47:55

no me funciona el codigo
 
hola neftali: gracias por el codigo
pero no funciona bien, porque la condicion no la cumple haste que le vuelve a apretar al boton. no tengo muxa idea pero cre que puede ser... porque pasa los datos de la base de datos al memo antes de que termine de contar los caracteres osea, que es mas rapido el que pase los datos al memo que el contar los caracteres por eso no devuelve el valor a tiempo...
soy nuevo en delphi... esta es la conclusion a la que he llegado no se si sera una barbaridad lo que acabo de decir, si es asi... perdonen:p :p :p

Neftali [Germán.Estévez] 08-06-2005 09:39:38

A mi me funciona perfectamente. ¿Puedes explicar un poco mejor el error , no acabo de enterderlo?

Cosgaya 08-06-2005 21:01:28

problema
 
que cuando doy al boton con el cogigo ese en vez de pasar la informacion al segundo memo cuando en el primero ya hay mas de 200 caracteres, lo escribe todo en el primero, y es en la segunda vez que pulsas el boton cuando cumple la condicion de los caracteres y pasa los datos al segundo memo....

Neftali [Germán.Estévez] 09-06-2005 09:26:02

¿Seguro que ya tienes los 200 caracteres?
¿Tienes los memos bien numerados?

Sigo sin entenderlo muy bien, pero prueba pasando éstas líneas después del if (justo antes del Until):

Código Delphi [-]
   mm.lines.add(FieldByName('Codigo').AsString + ('-------'));
  Next;

maxzama 28-03-2012 20:46:14

ayudaaaaaa
 
saliendo del tema DE USTEDES(NECESITO AYUDA ): ESTOY HACIENDO UN PROGRAMA QUE HACE ESTO:

__ALMACENO DEL EDIT ALMEMO

__TAMBIEN LO GUARDO A LA BASE DE DATO

___Y ELIMINA

PERO LO QUE NECESITO ES Q QUIERO PASAR LA INFORMACION DEL MEMO AL EDIT NUEVAMENTE.DANDOLE CLICK CON EL RATON.

PORFAVOR LO NECESITO ME QUEDA POCO TIEMPO PARA ENTREGARLO Y HECHO DE TODO.
ESTE ES MI CORREO:enonano_1@hotmail.com

ecfisa 28-03-2012 21:47:01

Hola maxzama y bienvenido a Club Delphi :)

Por favor, lee nuestra [guía de estilo], en especial los puntos [1], [2] y [9]

Saludos y gracias por tu colaboración.

maxzama 29-03-2012 22:13:59

bueno disculpa si me exprese mal o mi forma de mi vocabulario.mejorare en eso.
____________________________________________________

1)Necesito ayuda. mi problema es q tengo que hacer es pasar de un leguaje culaquiera a delphi(como si fuera un traductor).
este programa tengo q hacerlo en delphi.

2)y el otro programa es: de almacernar un codigo,nombre,precio a un Memo y si uno quiere editar la informacion entonces q uno le de click con el raton a una de las linias almacenada en el memo y buelva otrabes
la informacion a los edit.

Ya yo pude almacenar informacion al memo pero no pude hacer lo contrario(del memo a los Edit).

utilizando estas herramientas:
3 Edit
1 memo.

si pueden ayudarme se lo agradeceria.
(si no igualmente gracias por leer esta informacion)

ecfisa 29-03-2012 22:31:50

Hola maxzama.

Este código enviará la línea actual al Edit correspondiente:
Código Delphi [-]
procedure TForm1.Memo1Click(Sender: TObject);
var
  Linea: Integer;
begin
  Linea:= Memo1.Perform(EM_LINEFROMCHAR, Memo1.SelStart, 0);
  case Linea of
    0: Edit1.Text:= Memo1.Lines[Linea]; // codigo
    1: Edit2.Text:= Memo1.Lines[Linea]; // nombre
    2: Edit3.Text:= Memo1.Lines[Linea]; // precio
  end;
end;
Y si queres pasar la tres líneas de una sola vez:
Código Delphi [-]
procedure TForm1.btnPasarLas3Click(Sender: TObject);
begin
  Edit1.Text:= Memo1.Lines[0]; // codigo
  Edit2.Text:= Memo1.Lines[1]; // nombre
  Edit3.Text:= Memo1.Lines[2]; // precio
end;

Saludos.

maxzama 29-03-2012 23:20:29

Bueno me esplicado mal el codigo que me mandaste ya lo tengo.

lo que quiero es pasar lo q:

es del codigo lo pase al edit de codigo

lo q

es del nombre lo pase al edit de nombre


[al darle click al memo.]
______________________________

Gracias por responderme.

ecfisa 29-03-2012 23:39:03

Cita:

Empezado por maxzama (Mensaje 428816)
Bueno me esplicado mal el codigo que me mandaste ya lo tengo.

lo que quiero es pasar lo q:

es del codigo lo pase al edit de codigo

lo q

es del nombre lo pase al edit de nombre


[al darle click al memo.]
______________________________

Gracias por responderme.

Hola.

Eso es lo que hace precisamente el primer código de los dos que te puse: Al hacer click sobre el Memo, obtiene la línea que está actualmente seleccionada y de acuerdo a la posición obtenida la pasa al Edit correspondiente...

Saludos.

maxzama 30-03-2012 00:09:16

el codigo que me pasaste ase que al darle click a la linia 1 del memo pasa toda esa informacion completa al edit1.Y asi con los otros edit al presionar las otras lineas del memo.
__________________________________________________________________
lo que quiero es esto:

cuando almaceno el codigo(001) y el nombre(er) y el precio (2000), al memo.

estos mismo valores que introduje lo muestre en los edit de nuevo al darle click a la linia del memo.
_____________
es decir:
al darle click a la linia del memo

q el (001) regrese al edit que dice codigo

q el (er) regrese al edit que dice nombre

q el (2000)regrese al edit q dice precio

Espero tu respuesta Gracias de nuevo.

ecfisa 30-03-2012 00:52:03

A ver... el problema es que no has explicado algo muy importante: Como están ubicados los datos en el memo.

Encolumnados, de esta forma:
Código:

codigo
nombre
precio

caso en que funciona el código de mi mensaje anterior, o tabulados de esta otra:
Código:

codigo nombre precio
para lo cuál tendrías que hacer:
Código Delphi [-]
procedure TForm1.Memo1Click(Sender: TObject);
var
  TS: TStrings;
begin
  TS:= TStringList.Create;
  try
    TS.DelimitedText:= Memo1.Lines[Memo1.Perform(EM_LINEFROMCHAR, Memo1.SelStart, 0)];
    TS.Delimiter:= ' '; // separador de datos
    Edit1.Text:= TS[0];
    Edit2.Text:= TS[1];
    Edit3.Text:= TS[2];
  finally
    TS.Free;
  end;
end;

Saludos.


La franja horaria es GMT +2. Ahora son las 20:47:39.

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