Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Una ayuda..... captura de algunos datos de una table que est

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Una ayuda..... captura de algunos datos de una table que est Responder citando

Hola a todos!!
Estoy comenzando con esto y tengo algunos problemas en la programación, ojala alguno de ustedes pueda ayudarme, aqui les cuento lo que sucede:
Estoy haciendo un programita el cual me muestra una pantalla con una tabla que contiene varios registros, esta pantalla cuenta con un botón "Añadir" que el usurio hara click despues de haber seleccionado el registro que desea, despues el usuario podra seleccionar otro registro y dar click en el botón y asi cuantos registros quiera que aparezcan en la otra pantalla, despues de esto el usuario con otro botón "Ir a " tendra otra pantalla donde observará en algunos datos de todos los registros que ordeno anteriormente. Mi pregunta es.... como hago para que se capture los datos del registro seleccionado en la tabla al hacer click en el botón "Añadir" y aparezcan algunos datos en otro form pero ya no en forma de tabla si no en Edits o DBEdits??? como podria hacerlo, saben algún código para esto?
Ojala y alguno de ustedes pueda ayudarme, espero haberme explicado bien.

Saludos cordiales!!!
Claudia

Volver arriba
Mensaje    Asunto: Una ayuda..... captura de algunos datos de una table que est Responder citando

Hola...

Debemos saber primero, van esos datos a una tabla distinta? o simplemente los seleccionas en un form, para luego editarlos en otro?

En el segundo caso es muy facil el dataset del primer y segundo formulario (de la grid y los edits) debe ser el mismo, asi cuando te muevas en la grid se mueven en los edits.

En el primero debes anexar el registro y traspasar los datos campo por campo, hay dos formas lo haces manualmente:

TableDestino->FieldByName("xxxx")->AsLoqueSea = TableOrigen->FieldByName("xxxx")->AsLoqueSea o si las estructuras son iguales:
for (int i = 0; i < TableOrigen->FieldDefs->Count; i++)
{
TFieldDef *fd = TableOrigen->FieldDefs->Items[i];
String Campo = fd->Name;
TableDestino->FieldByName(Campo)->AsString = TableOrigen->FieldByName(Campo)->AsString;

}

Volver arriba
Mensaje    Asunto: Una ayuda..... captura de algunos datos de una table que est Responder citando

Tengo una tabla en un form con 70 registros que a su vez contienen varios campos, por ejem: NOmbre, tipo, pais, cantidad, costo.. quiero que se seleccione uno de estos registros en la tabla y que al dar click en el botón "Añdir" lo guarde en memoria luego ahí mismo selecciono otro registro y otra vez doy click en"Añadir" despues que ya no quiero seleccionar mas registros doy click en "Ir a " que me muestra otra pantalla en la cual tengo una columna para Nombre, otra para pais y otra para tipo (estos son labels) bajo estos tengo DBEdit donde deben aparecer los datos que estaban en la tabla de cada registro que seleccione y añadi, como podria hacerlo....?? quizas no me explique bien al inicio espero que ahora este mas claro, gracias por la ayuda Alfredo pero si puedes seguirme ayudando o alguien mas que me de una mano, se los agradeceria.

Saludos nuevamente,
Claudia

Volver arriba
Mensaje    Asunto: Una ayuda..... captura de algunos datos de una table que est Responder citando

Entiendo el Usuario va a seleccionar multiples registros y quieres saber cuales son para un
uso posterior, nace una pregunta ¿vas a usarlos todos?, otra si es asi ¿Secuencialmente?
¿Tienes Suficientes Edits Y DBEdits Para Cubrir Cualquier Seleccion?
Puedes hacerlo asi:
//Caso secuencial
En Propiedades de laDBGrid abre Options y pon MultiSelect a true, esto permite manteniendo
la tecla Ctrl pulsada seleccionar los registros, luego podemos acceder a ellos por medio de la propiedad
SelectedRows

if (DBGrid1->SelectedRows->Count > 0)//Si hay lineas seleccionadas
{

for (int i=0; i < DBGrid1->SelectedRows->Count; i++)//recorremos las lineas seleccionadas
{
//Aqui hacemos lo que haya que hacer, accedemos asi.
DBGrid1->SelectedRows->Items[i]//Esto es un registro completo con todos sus campos,o mejor dicho COLUMNAS con su Nombre y Valores contenidos en las casillas de laDBGrid.
}
}

¿Puedes explicarme de otra forma lo que quieres hacer, es decir sin decirme como piensas
hacerlo? talvez haya otra forma de obtener el mismo resultado..Wink

Volver arriba
Mensaje    Asunto: Una ayuda..... captura de algunos datos de una table que est Responder citando

Lo que quiero hacer es que al seleccionar un registro de la tabla se capturen los datos dando click en el botón añdir y si deseo otro registro, seleccionarlo y darle click en el botón, despues de esto "Ir a" y ver en otro form los algunos campos de los registros que añadi pero no en forma de tabla.
Espero que me haya sabido explicar, gracias por tu ayuda
Claudia
Volver arriba
Mensaje    Asunto: Una ayuda..... captura de algunos datos de una table que est Responder citando

Eso lo entendi, en la forma que que te propuse el hacer click en la fila de la DBGrid es equivalente al boton añadir, cada vez que haces click sobre la misma fila esta cambia de color, este es azul cuando está seleccionada, si deseas añadir otra fila pues presionas el boton Ctrl mientras haces click, de esta forma puedes seleccionar las filas que desees sin limite en cantidad, teniendolas seleccionadas, es innecesario guardar en memoria esa seleccion a menos que cierres el formulario de la grid y este se destruya, o sea que en el evento del Button Ir A: puedes copiar la informacion que deseas al otro form o hacerlo desde este aunque el primero no sea visible.

Tratare de ponerte un ejemplo simple de como hacerlo.
Coloca un ListBox en el formulario donde tienes los Edits,para que veas como funciona, lugo estudiaremos la manera de poner la informacion en los edits, el caso es que puedes encontrarte con mas selecciones en la rejilla que edits en el form...

En el form de la grid, click en esta, en el inspector de objetos, propiedades,options,multiselect a true.
asumo Form1 el de la Grid y Form2 el de los edit y ListBox
el evento del button ir A:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if (DBGrid1->SelectedRows->Count > 0)
{
AnsiString s = "";
TDataSet *pDS = DBGrid1->DataSource->DataSet;
for (int i=0; i < DBGrid1->SelectedRows->Count; i++)
{
pDS->GotoBookmark((void *)DBGrid1->SelectedRows->Items[i].c_str());
for (int j = 0; j < pDS->FieldCount; j++)
{
if (j>0)
s = s+", ";

s = s + pDS->Fields->Fields[j]->AsString;
}
Form2->ListBox1->Items->Add(s);
s = "";
}
}
Para que te funcione debes incluir el header del form2 en el uno, esto se hace asi:
abre la unit1, File,Include Unit Hdr, selecciona Unit2, acepta, compila y ejecuta...
Cuentame luego Smile

}

Volver arriba
Mensaje    Asunto: Una ayuda..... captura de algunos datos de una table que est Responder citando

Ya hice lo que me dijiste y sale muy bien pero lo que quiero hacer es se vean solo algunos de los datos de la tabla y no todos en el otro form, por decir: NOmbre, tipo y pais como puedo hacerlo? y quisiera que esto salga en DBEdits o Edits (lo que sea mejor), es decir tener columnas de Nombre, otro de tipo y otro de pais y en cada columna poner los Edits o DBEdits como te digo y que en ellos se tengan los datos de los registros que se selecciono.

Creo que me enrede sola o me entendiste, cualquier cosa me avisa y gracias por la ayuda!

Claudia!

Volver arriba
Mensaje    Asunto: Una ayuda..... captura de algunos datos de una table que est Responder citando

Chevere, voy entendiendo, tu deseas seleccionar algunos Campos, no todos, de algunas columnas? o de una sola columna?

vamos a plantearlo asi: el usuario hace Dobleclick sobre la celda que le interesa y el dato es traspasado al Edit correspondiente al Nombre del campo, o sea si la tabla tiene un campo Ciudad, pues debe existir un Edit para ese campo, bueno pon varios edits en el form y modificales la propiedad name de manera que cada uno se llame como un campo de la tabla (atencion mayusculas/minusculas)

En la GRID abre el evento OnDblClick y escribe:

void __fastcall TForm1::DBGrid1DblClick(TObject *Sender)
{
String Campo = DBGrid1->SelectedField->FieldName;
String Valor = Table1->FieldByName(Campo)->AsString;
AnsiString nameString("TEdit");//Nombre de clase
TEdit * Edit;//puntero
for(int i=0; i < Form2->ComponentCount; i++)//Recorremos los controles
{
if (Form1->Components[i]->ClassNameIs(nameString))//Si el control es un Edit
{
Edit = (TEdit *)Form1->Components[i];//asignamos
if(Edit->Name == Campo)//Miramos su nombre
Edit->Text = Valor;// si coinciden lo escribimos
}
}
}
Prueba y Comentame ~Wink

Volver arriba
Mensaje    Asunto: Una ayuda..... captura de algunos datos de una table que est Responder citando

Hola!
Creo que no me estoy explicando bien Sad tratare de hacerlo mejor, cualquier cosa me preguntas, lo que me dijiste de la selección multiple en el DBGrid me sirvio bastante, quiero que el usuario seleccione cualquier registro en la tabla y se seleccionen todos sus campo pero que cada que seleccione un registro de click en un botón luego busque otro registro y de click, asi cuantos registros quiera pero en el Form2 solo se mostraran en DBEdits algunos campos, es decir si se selecciono en el form1 4 registros debo contar en el form2 con los campos que se dese, en este caso, pais, nombre y tipo y para cada uno de ellos debe haber 4 Edits o DBEdits que corresponden a los registros seleccionados, quizas ahora este mas claro (eso espero!!!)

Gracias por la ayuda y si deseas me podrias seguir ayudando?
Saludos
Claudia!

Volver arriba
Mensaje    Asunto: Una ayuda..... captura de algunos datos de una table que est Responder citando

Hola, Te seguire ayudando todo lo que pueda, me agrada hacerlo.

La Primera pregunta que hay que hacerse cuando se intenta resolver un problema
es: ¿Cual es la Pregunta? pero tendemos a preguntarnos en su lugar ¿Cual es la
Respuesta?

Tenemos por ahora lo siguente:
1.- El usuario puede elegir entre 70 o tal vez mas registros
uno o varios de ellos simultaneamente.
2.-Cada registro contiene varios campos, tu dices que solo se seleccionan algunos,
se impone la siguente Pregunta ¿Quien elige estos campos? ¿Tu como programadora?
o ¿El usuario? Esto es importante ya que en el primer caso sabemos positivamente que
campos tendremos en cuenta, en el segundo debemos averiguar cuales selecciono el
usuario y actuar en consecuencia.
3.-Al ser la posibilidad abierta a seleccionar uno o todos los registros se nos presenta
la siguente situacion: debemos proveer tantos Edits como campos multiplicados por el
numero de columnas, es decir si el usuario selecciona los 70 registros y nos interesan
tres campos, necesitamos 210 edits, esta es la situacion mas simple, cuando tu decides
que solo son tres los campos interesantes y solo 70 los registyros, si lo decide el usuario
hay que considerar numero de registros multiplicado por todos los campos. Como puedes
ver son muchos Edits, tendrias que crearlos al vuelo, es decir en tiempo de ejecucion,
esto es posible y te puedo enseñar a hacerlo pero me parece un mal enfoque para lo que
pretendes hacer, pues como te comente antes probablente hay mejores maneras de
realizar lo mismo.
Si me indicas cual es el resultado que esperas obtener en la manera en que te voy a
plantear un ejemplo:

Situacion: el usuario realiza una consulta sobre la tabla Facturas, se le presenta el
resultado en una DBGrid, no se de antemano cuales campos saldran ya que es el
usuario quien lo decide, algunos campos seran numericos y otros no, yo deseo darle
la opcion al usuario de solicitar un sumario sobre los campos numericos que el elija,
con las siguentes posibilidades, Suma, minimo,maximo y promedio aritmetico.

Este es el enunciado, ves que en ningun momento planteo como hacerlo, dame pues
el enunciado de tu caso y asi podre mejor ayudarte.

Volver arriba
Mensaje    Asunto: Una ayuda..... captura de algunos datos de una table que est Responder citando

A ver si se me entiende:
Situación: se quiere hacer un pequeño programa que muestre al usuario una tabla (DBGrid) con 100 registros, esta tabla tiene los campos:Nombre del alimento, Cantidad, Costo, tipo, País de origen, digestibilidad, Materia seca, Energia. el usuario debe seleccionar uno o mas registros de esta tabla(como máximo debe seleccionar 10 registros), cada que seleccione un registro debe dar click en el botón "Alimento seleccionado", despues de seleccionados los registros el ususario debe precionar el botón "Datos" e ir a otro form donde se le presentaran los registros que selecciono pero con 3 campos: Nombre del alimento, Tipo y país (debe haber 10 Edits o DBEdits para cada campo)para realizar otras operaciones en este form. Como hago esto???

Ojala puedas ayudarme.
Cluadia

Volver arriba
Mensaje    Asunto: Una ayuda..... captura de algunos datos de una table que est Responder citando

HOLA:

Perdon por entrometerme en tan animada charla, pero al leer solo la ultima respuesta, me surgen dos dudas para que cualquiera pueda contestar, 1º esos datos que quieres exportar, se van a modificar a posteriori, o son solo aclarativos, de todas formas mi solucion seria muy similar a la de alfredo, solo que en vez de utilizar un TList utilizaria un TStringGrid y se lo pasaria al segundo formulario.

By.

Volver arriba
Mensaje    Asunto: Una ayuda..... captura de algunos datos de una table que est Responder citando

Claudia:
Ahora que le pones limites ya es mas facil decirte como: si usas el Button
"Alimento Seleccionado" no requieres de la Propiedad MultiSelect del grid,
es mas no es conveniente, el evento de este button seria:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
//recorremos el otro formulario buscando los Edits que no hayan sido utilizados
//debemos hacerlo 3 veces una para cada campo
AnsiString nameString("TEdit");
TEdit * Edit;
for(int i=0; i < Form2->ComponentCount; i++)//Recorremos los controles
{
if (Form1->Components[i]->ClassNameIs(nameString))//Si el control es un Edit
{
Edit = (TEdit *)Form1->Components[i];//asignamos
if(Edit->Text == "")//Miramos si esta vacio
Edit->Text = Table1->FieldByName("NombreAlimento")->AsString;// si coinciden lo escribimos
}
}
for(int i=0; i < Form2->ComponentCount; i++)//Recorremos los controles
{
if (Form1->Components[i]->ClassNameIs(nameString))//Si el control es un Edit
{
Edit = (TEdit *)Form1->Components[i];//asignamos
if(Edit->Text == "")//Miramos si esta vacio
Edit->Text = Table1->FieldByName("TipoAlimento")->AsString;// si coinciden lo escribimos
}
}
for(int i=0; i < Form2->ComponentCount; i++)//Recorremos los controles
{
if (Form1->Components[i]->ClassNameIs(nameString))//Si el control es un Edit
{
Edit = (TEdit *)Form1->Components[i];//asignamos
if(Edit->Text == "")//Miramos si esta vacio
Edit->Text = Table1->FieldByName("Pais")->AsString;// si coinciden lo escribimos
}
}

}
Es conveniente que dispongas de un Boton que limpie los Edits y su codigo sera:
for(int i=0; i < Form2->ComponentCount; i++)//Recorremos los controles
{
if (Form1->Components[i]->ClassNameIs(nameString))//Si el control es un Edit
{
Edit = (TEdit *)Form1->Components[i];//asignamos

Edit->Text = "";// Borramos
}
}
Debes tanbien invocar este evento al inicio de la seleccion, se hace asi desde
cualquier punto: Form1->Button1Click(this);

Este codigo solo te pondra las diez primeras selecciones, las adicionales las
ignora.
El codigo del Botob "Datos" sera:
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Form1->Show();
y si quieres ocultar la grid Form2->Close();
}

Toño: No es ninguna intromision, para eso son los foros, nos interesaria tu
punto de vista por que este lenguaje y entorno es tan rico que siempre hay
multiples formas de conseguir los mismos resultados y los programadores debemos
ser de mente muy abierta para mantenernos al dia en un medio tan dinamico como
este..

Saludos a los dos y al resto de "Amigos Invisibles"...

Volver arriba
Mensaje    Asunto: Una ayuda..... captura de algunos datos de una table que est Responder citando

Hola a todos...!!
Muchas gracias Toño y Alfredo por su interes, voy a probar lo que me dicen, ah! quisiera que me dijeran para mi problema que es mejor usar Edits o DBEDits??
Saludos,
Claudia
Volver arriba
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.