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)
-   -   Trapicheando con tablas ;) (https://www.clubdelphi.com/foros/showthread.php?t=9983)

acrophet 07-05-2004 10:56:29

Trapicheando con tablas ;)
 
Hola a todos, me ha surgido el siguiente problema:
Tengo una tabla, con un campo con el numero de cliente y los campos de nombre y apellidos.
Pues tengo que meter en otra tabla temporal un registro con el campo del numero de cliente y tantos campos como registros con ese mismo numero haya en la tabla original.
No se si me he expicado bien, pondre un ejemplo.
Tenemos en la tabla 5 clientes con el numero de cliente 20. Pues necesito meter en la tabla temporal en un registro el campo del numero y tantos como clientes, osea en este caso 5 campos con los nombres. Y esto puede variar claro, segun los clientes que tengan el mismo numero.
El problema? que no tengo mu claro como hacerlo :confused:
Alguna idea?

LLevo un rato intentando montarme la pelicula y me he encontrado con un pequeño problema extra; ¿como puedo crear un campo en la tabla temporal en tiempo de ejecucion?
La verdad es que ahora mismo siento una especie de impotencia extraña, se lo que tengo que hacer mas o menos, pero no se como llevarlo a cabo :confused: :confused: :confused:


Un saludo y gracias anticipadas.

guillotmarc 07-05-2004 12:32:49

Hola.

Yo no te he entendido demasiado bien, no sé los compañeros. ¿ Puedes volver a explicarlo ? ¿ Quizá con un ejemplo ?.

Seguramente deberías también decir con que base de datos trabajas, puesto que las tablas temporales se gestionan distinto en cada motor.

NOTA: Para añadir un campo a una tabla (sea temporal o no), tienes la instrucción del ALTER TABLE ... ADD FIELD .... (consulta la documentación de tu base de datos).

Saludos.

acrophet 07-05-2004 13:21:47

vale, dare mas detalles.
Pues utilizo interbase,y la tabla temporal la creo con un rxmemorydata.
Todo eso de alter table y tal ya lo conozco, pero¿como lo hago en una tabla temporal?

Gydba 07-05-2004 13:37:23

Yo tampoco entendí muy bien, sin embargo no sé porque no utilizás un query y luego se lo asignas al rxmemorydata, de esta manera todo se resume a un simple SELECT.

acrophet 07-05-2004 16:31:41

A ver, os lo expondre "asciimente" :D
Tenemos esta tabla:

numero nombre apellidos
-----------------------------------
30 pepe diaz
30 manolo sanchez
35 juan lopez
35 sandra perez


pues la temporal debe quedar tal que asi:

numero nombre1 nombre2 .....
-----------------------------------------------
30 pepe diaz manolo sanchez
35 juan lopez sandra perez


Osea que necesito crear tantos campos como clientes con ese mismo numero tenga.
Supongo que ahora habra quedado un poco mas claro lo que quiero. Sorry por no saber explicarlo bien.

PD. ahora que lo he visto posteado, no ha quedado como lo habia escrito(los espacios de separacion que habia puesto, se han reducido a uno solo), pero vamos se entiende lo que quiero hacer, no?

Un saludo.

jachguate 07-05-2004 16:44:57

Hola.

Necesitas estos datos a nivel de base de datos, o solamente a nivel de aplicación??

Si haces un pequeño stored procedure que te vaya SubNumerando a los clientes, es fácil hacerlo con un DecisionCube...

Hago la pregunta/sugerencia porque me parece que estas mezclando el concepto de "tabla temporal" (que es un objeto a nivel de base de datos en motores como SQL Server) con una vista especial de los datos a nivel de la aplicación cliente..

Hasta luego.

;)

pd. por cierto, para evitar el efecto (normal) de perdida de espacios, podes valerte de la etiqueta [ code ] (vínculo al manual en mi firma)

acrophet 07-05-2004 16:54:09

Ante todo, gracias por la rapida respuesta :)
Yo creo que necesito eso a nivel de base de datos (creo).
Lo que intento es imprimir unas etiquetas, pero en cada etiqueta debe ir lo que en mi "tabla temporal" expongo.
Si listara las etiquetas tal cual tengo la tabla ahora, pues me saldria una para cada registro, y no es lo que yo pretendo. Yo quiero que los que coincidan en el numero, pues salgan en la misma.
Si me aclaras a que nivel tengo que referirme, mejor ;)

Y nuevamente gracias por perder el tiempo con un pobre desvalido :D

jachguate 07-05-2004 17:05:26

No quisiera criticar tu diseño... pero creo que tenes un serio problema en la base de datos. No me imagino porque varios clientes podrian tener el mismo código... y mucho menos para que imprimirlos en una misma etiqueta?? :confused:

Además... si es para imprimir etiquetas, tampoco veo porque el "invento" este tenga que estar a nivel de base de datos?? mas :confused: todavia!!!

acrophet 07-05-2004 17:09:09

Vale, igual no he expresado bien mi situacion.
El numero no es es un numero relacionado con el cliente realmente, sino con una tarjeta.
Todos los que tienen el mismo numero deben ir en la misma tarjeta(Titular-beneficiario).
No tengo problemas de diseño, quiza no explique bien el caso ;)

kinobi 07-05-2004 17:24:01

Cita:

Empezado por acrophet
No tengo problemas de diseño, quiza no explique bien el caso ;)

Puede ser que no tengas problemas de diseño, pero sí parece que esa base de datos sí tiene problemas de normalización, al menos por los comentarios de tu último mensaje.

Saludos.

kinobi 07-05-2004 17:28:11

Olvida mi mensaje anterior.
He vuelto a leer todo el hilo y yo estaba equivocado, ahora sí he conseguido entenderlo.

Disculpas y saludos.

acrophet 07-05-2004 17:31:31

Bueno, al fin alguien ha entendido lo que quiero!!! jajaja
En fin, espero que alguien me pueda dar unas indicaciones de como hacer lo que me propongo.

Un saludo y gracias a todos por la colaboracion.

jachguate 07-05-2004 17:31:51

habia publicado una respuesta en este espacio, pero envista de tu mensaje anterior, prefiero eliminarla. Si te llegó por correo, pos tenes suerte de verla. Que lamentable expresión de exigencia!

Mejor lee la guia de estilo.

hasta luego.

;)

sanxpue 07-05-2004 19:29:05

Si que te..
 
Si que te metiste en un lio je je je

En realidad no es tan dificil.. por que no piensas que el mundo tiene 3 dimensiones y que la computadora la vemos de dos... weno pues usemos la segunda dimension de la compu.. osease a lo ancho.. je je je (ya se recibire criticas por el comentario, pero ahi va la idea..)

Primero no debes de crear tantos campos como nombres alla...por que puede tronar, puede tronar.. creo que su limite es de 255 campos..(si estoy mal ahi me avizan)

Por que no mejor creas un campo Blob...

Ordenas primero tu tabla x Numero de tarjeta y nombre para que salgan ordenaditos

despues con un simple While... hagamoslo..
pones un TListBox

Código:

Procedure....
Var
  Tar : Integer;
Begin
  Tar := 0;
  ListBox1.Items.Clear;
  While Not Tabla.EoF Do
  Begin
    //aqui supongo que tu nombre del campo es NumTar ahi lo cambias
    If Tabla.FieldByname('NumTar').AsInteger <> Tar Then
    Begin
        //Primero metemos
        If Tar <> 0 Then //por que luego luego va a querer meter y no podemos
                              //dejar eso por que esta vacio
        Begin
          //metemos a tu base
          TablaTemp.Insert;
          TablaTemp.fieldByName('NumTar').AsInteger := Tar;
          TablaTem.FieldByName('Nombres').Assign(ListBox1.Items);
          TablaTem.Post;
          ListBox1.Items.Clear;
          Tar := Tabla.FieldByname('NumTar').AsInteger;
        End
        Else
          Tar := Tabla.FieldByname('NumTar').AsInteger;
        ListBox1.Items.Add(Tabla.FieldByname('Nombre_Cliente').AsString); 
    End;
    Tabla.Next;
  End;
  //Ahora aqui volvemos a meter por los sobrantes...
  TablaTemp.Insert;
  TablaTemp.fieldByName('NumTar').AsInteger := Tar;
  TablaTem.FieldByName('Nombres').Assign(ListBox1.Items);
  TablaTem.Post;
End;

Ya obtenemos lo que quisiste.. ahora que le quieres hacer...
Tus datos ahora los veras asi...
Código:

Campo Nombres
30      Juan Charrasqueado
        Chuchita la Bolsearon
        Juana
        Perengana
        Sultana (Como iba a faltar la famosisima)
35      Petra
        Chana
        El Peyote Asesino
.
.
.



Nada mas faltaria que les quieras hacer esos campos....pero ya puedes hacerles los que quieras :D

acrophet 10-05-2004 10:59:20

Cita:

Empezado por jachguate
habia publicado una respuesta en este espacio, pero envista de tu mensaje anterior, prefiero eliminarla. Si te llegó por correo, pos tenes suerte de verla. Que lamentable expresión de exigencia!

Mejor lee la guia de estilo.

hasta luego.

;)

Oye, no se por que dices eso de lo de que lamentable expresion de exigencia, no era esa mi intencion para nada, si lo has entendido asi, lo siento. Yo siempre procuro dar las gracias por la ayuda recibida, porque se que se pierde tiempo en responder y ayudar. En ningun momento pretendo exigir nada.
No creo que me haya comportado mal con nadie, asi como nadie se ha comportado mal conmigo. De todas formas si te has sentido molestado, pido discultas.

Un saludo, y de nuevo gracias por la ayuda prestada.

sanxpue 10-05-2004 18:28:40

pero weno..
 
compañero acrophet... te sirvio la idea o que pasion je :D

acrophet 10-05-2004 18:48:25

Perdona tio, olvide responder a tu post :rolleyes:
Pues la verdad es que con ese codigo que me pusiste, no sale lo que yo queria, pero vamos, tampoco esperaba eso. Te puedo decir que me ha ayudado muchisimo ya que gracias a tu explicacion y codigo, estoy afinando cada vez mas y estoy cerca de conseguir lo que busco.
Mil gracias compañero!!!!

Un saludo.

sanxpue 10-05-2004 18:52:35

Y que es ¡¡
 
Y que es lo que te falta...

si ya tienes las cadenas que quieres..weno si quieres cuentame que es lo que te falta... :confused:


La franja horaria es GMT +2. Ahora son las 23:43:30.

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