 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Alexeu Lt JG

Registrado: 12 Abr 2007Mensajes: 62
|
Publicado: Mar 15 May, 2007 8:44 am Asunto: Ideas sobre un programita |
|
|
Hola a todos, deseo hacer un programa de introduccion de datos de personas, ya sea el nombre, apellidos, etc... Todo esto lo meto en una base de datos MYSQL.
Lo que no se me ocurre es el método de hacer fichas, es decir insertarlas bien, pero luego no se como recuperar los datos y que se inserten en sus cajas de texto correspondientes.
Alguna sugerencia?.
Muchas gracias. |
|
| Volver arriba |
|
 |
rayder Master

Registrado: 03 Mar 2004Mensajes: 207
|
Publicado: Mar 15 May, 2007 9:15 am Asunto: |
|
|
Que tal Alexeu.
Te comento, antes de empezar a escribir una sola línea de código, lo primero que tienes que tener claro es lo que quieres que haga tu programa, de esa forma, sabiendo lo que va ha hacer tu programa, puedes crear la base de datos, independientemente de la base de datos que uses, ya que esto te proporciona las unidades de información a utilizar en la BD.
Ahora bien, si lo que buscas es como recuperar esta info, pues lo puedes hacer de varias formas, desde cajas de texto, etiquetas, etc, hasta campos de texto enlazados a la base de datos.
Un ejemplo sería, suponiendo que tenemos un datamodule que contiene un Ttable con varios campos de texto:
| Código: |
Nombre->Text = DataModule->Ttable->FieldByName("Nombre")->Value;
Apellido1->Text = DataModule->Ttable->FieldByName("Apellido1")->Value;
Apellido2->Text = DataModule->Ttable->FieldByName("Apellido2")->Value; |
Esto recupera la información de la tabla y la coloca en sendos TEdit, para usar etiquetas (Labels), cambia los "Text" por "Caption".
Lógicamente, deberás tener habilitada la conexión con tu BD.
Si necesitas algo más especifico comentalo _________________ Un saludo
Rayder |
|
| Volver arriba |
|
 |
Alexeu Lt JG

Registrado: 12 Abr 2007Mensajes: 62
|
Publicado: Mar 15 May, 2007 10:21 am Asunto: |
|
|
Gracias Ryder, utilizo la conexion ADO,con MYSQL,El programa lo tengo ya empezado y como tu has explicado, quiero recuperar los datos de una tabla y ponerlos en la ficha correspondiente de la persona.
Soy novato y no entiendo mucho, si hay otra forma de hacerlo sin acceder a base de datos por favor exponerla.
A parte, quiero incluir imagenes, he estado buscando por el foro, pero no me aclaro mucho con las explicaciones.
Muchas gracias. |
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Mar 15 May, 2007 12:47 pm Asunto: |
|
|
Por si te vale te pongo aquí un código que uso yo. Es dinámico; quiero decir: que no importa que el formulario tenga más o menos elementos. Sólo tiene una limitación: Cada elemento tiene llamarse como el campo de la base de datos.
| Código: | {
TComponent *Source;
oBuscar.Clear();
VerCar->Items->Clear();
HisDom->Items->Clear();
for (nItem = 0; nItem <fPersonas>ComponentCount; nItem ++)
{
Source = fPersonas->Components[nItem];
if (Source->ClassNameIs("TLMDStaticText"))
{
TLMDStaticText* Text = static_cast<TLMDStaticText>(Source);
Text->Caption = " ";
}
if (Source->ClassNameIs("TLMDEdit"))
{
TLMDEdit* Edit = static_cast<TLMDEdit>(Source);
Edit->Text = "";
}
if (Source->ClassNameIs("TLMDMaskEdit"))
{
TLMDMaskEdit* Edit = static_cast<TLMDMaskEdit>(Source);
Edit->Text = "";
}
if (Source->ClassNameIs("TLMDRadioGroup"))
{
TLMDRadioGroup* Radio = static_cast<TLMDRadioGroup>(Source);
Radio->ItemIndex = -1;
}
}
GroupBox1->Tag = nRegistro;
Query->Close();
Query->UnPrepare();
Query->SQL->Text = "SELECT A.Apellidos, A.Nombre, A.Nif, A.F_nacim, A.Sexo, A.Correo, A.Domicilio, A.Cpostal, A.Municipio||'&'||B.Poblacion Municipio, A.Profesion||'&'||C.Nombre Profesion, A.Tlf_part, A.Tlf_prof, A.Tlf_movil, A.Provincia||'&'||D.Nombre Provincia, A.C_electronico, A.F_pago, A.Periodo, A.C_refer, A.Cuota, A.Entidad, A.Sucursal, A.Digitos, A.Numero, A.Situacion, A.N_afiliado, A.Afiliacion||'&'||E.Nombre Afiliacion, A.JLocal||'&'||F.Nombre JLocal, A.F_alta, A.F_baja, A.M_baja FROM Personas A, Poblaciones B, Tablas C, Tablas D, Tablas E, Tablas F WHERE A.Registro = " + FormatFloat("0", nRegistro) + " AND A.Municipio = B.Codigo AND A.Profesion = C.Codigo AND C.Tabla = 'PR' AND A.Provincia = D.Codigo AND D.Tabla = 'PV' AND A.Afiliacion = E.Codigo AND E.Tabla = 'AF' AND A.JLocal = F.Codigo AND F.Tabla = 'PB'";
Query->Prepare();
Query->Open();
GroupBox1->Caption = " Registro núm. " + FormatFloat("###,##0' '", nRegistro);
for (nItem = 0; nItem <Query>FieldDefs->Count; nItem ++)
{
if (Query->FieldByName(Query->FieldDefs->Items[nItem]->Name)->Value.IsNull() ||
Trim(Query->FieldByName(Query->FieldDefs->Items[nItem]->Name)->Value).IsEmpty())
continue;
Source = fPersonas->FindComponent(Query->FieldDefs->Items[nItem]->Name);
if (Source->ClassNameIs("TLMDEdit"))
{
TLMDEdit* Edit = static_cast<TLMDEdit>(Source);
Edit->Text = Query->FieldByName(Query->FieldDefs->Items[nItem]->Name)->AsString;
if (Edit->Text.Pos("&") != 0)
{
Edit->Tag = StrToInt(Edit->Text.SubString(1, Edit->Text.Pos("&") - 1));
Edit->Text = Edit->Text.SubString(Edit->Text.Pos("&") + 1, Edit->Text.Length());
}
if (Source->Name == "Nif" && isdigit(Edit->Text.SubString(1, 1).c_str()[0]))
LetraNif->Caption = "TRWAGMYFPDXBNJZSQVHLCKEO"[StrToInt(Trim(Edit->Text)) % 23];
}
if (Source->ClassNameIs("TLMDMaskEdit"))
{
TLMDMaskEdit* Edit = static_cast<TLMDMaskEdit>(Source);
try
{
switch (Query->FieldDefs->Items[nItem]->DataType)
{
case ftDate:
case ftDateTime:
Edit->Text = Query->FieldByName(Query->FieldDefs->Items[nItem]->Name)->AsDateTime.FormatString("dd/mm/yyyy");
break;
case ftBCD:
Edit->Text = FormatFloat("#,##0", Query->FieldByName(Query->FieldDefs->Items[nItem]->Name)->AsFloat);
break;
case ftString:
Edit->Text = FormatFloat("#", StrToFloat(Query->FieldByName(Query->FieldDefs->Items[nItem]->Name)->AsString));
break;
}
}
catch(...)
{
Edit->Text = NULL;
}
}
if (Source->ClassNameIs("TLMDRadioGroup"))
{
TLMDRadioGroup* Radio = static_cast<TLMDRadioGroup>(Source);
if (Source->Name != "Situacion")
{
for (int nRb = 0; nRb <Radio>Items->Count; nRb ++)
if (Radio->Items->Strings[nRb].SubString(1, 1) == Query->FieldByName(Query->FieldDefs->Items[nItem]->Name)->AsString)
{
Radio->ItemIndex = nRb;
break;
}
}
else
{
if (Query->FieldByName("Situacion")->AsString == "*")
Radio->ItemIndex = Radio->Items->Count - 1;
else
for (int nRb = 1; nRb <cSituacion>FieldByName(Query->FieldDefs->Items[nItem]->Name)->AsString)
{
Radio->ItemIndex = nRb - 1;
break;
}
}
}
}
Query->Close();
Query->UnPrepare();
Query->SQL->Text = "SELECT FIRST 1 A.Fecha, A.Situacion, B.Literal FROM Recibos A, Mensajes B WHERE A.C_refer = '" + Trim(C_refer->Text) + "' AND A.Situacion = B.Codigo ORDER BY Fecha DESC";
Query->Prepare();
Query->Open();
if (!Query->IsEmpty())
{
U_recibo->Font->Color = clBlue;
Estado->Font->Color = clBlue;
if (Query->FieldByName("Situacion")->AsString == "D" || Query->FieldByName("Literal")->AsString == "E")
{
U_recibo->Font->Color = clRed;
Estado->Font->Color = clRed;
}
U_recibo->Caption = Query->FieldByName("Fecha")->AsDateTime.FormatString("dd/mm/yyyy");
Estado->Caption = " " + Query->FieldByName("Literal")->AsString;
Pendientes->Caption = "";
Query->Close();
Query->UnPrepare();
Query->SQL->Text = "SELECT COUNT(*) Recibo, SUM(Importe) Importe FROM Recibos WHERE "
"C_refer = '" + Trim(C_refer->Text) + "' AND Situacion IN ('DMD', 'DME')";
Query->Prepare();
Query->Open();
if (Query->FieldByName("Recibo")->AsInteger > 0)
Pendientes->Caption = FormatFloat(" ##0", Query->FieldByName("Recibo")->AsInteger) +
" por un importe de " + FormatFloat("##,##0.00€", Query->FieldByName("Importe")->AsFloat);
Query->Close();
Query->UnPrepare();
Query->SQL->Text = "SELECT Fecha, Cuenta, Texto, Importe, Situacion FROM Recibos WHERE "
"C_refer = '" + Trim(C_refer->Text) + "' ORDER BY Fecha DESC";
Query->Prepare();
Query->Open();
while (!Query->Eof)
{
pItem = HisDom->Items->Add();
pItem->Caption = Query->FieldByName("Fecha")->AsDateTime.FormatString("dd/mm/yyyy");
pItem->SubItems->Add(Query->FieldByName("Cuenta")->AsString.SubString(1, 4) + " " +
Query->FieldByName("Cuenta")->AsString.SubString(5, 4) + " " +
Query->FieldByName("Cuenta")->AsString.SubString(9, 2) + " " +
Query->FieldByName("Cuenta")->AsString.SubString(11, 10));
pItem->SubItems->Add(Trim(Query->FieldByName("Texto")->AsString));
pItem->SubItems->Add(FormatFloat("#,##0.00", Query->FieldByName("Importe")->AsFloat));
pItem->SubItems->Add(Query->FieldByName("Situacion")->AsString.SubString(3, 1));
Query->Next();
}
}
Query->Close();
Query->UnPrepare();
Query->SQL->Text = "SELECT A.Nombre FROM Tablas A, Electos B WHERE A.Codigo = B.Cargo AND "
"A.Tabla = 'CA' AND B.C_refer = '" + Trim(C_refer->Text) + "' ORDER BY Nombre";
Query->Prepare();
Query->Open();
while (!Query->Eof)
{
pItem = VerCar->Items->Add();
pItem->Caption = Query->FieldByName("Nombre")->AsString;
Query->Next();
}
} |
Como ves hay de todo: Edit, RadioGroup, ComboBox... Hasta ListView. Estoy usando componentes LMDTools, pero puedes usar los normales de Builder.
Lo primero que hago es limpiar todos los elementos del formulario y luego los voy cargando con los valores recuperados de la tabla. Yo lo hago con un query SQL, pero puedes hacerlo igual a partir de las tablas. La ventaja del query es que me deja combinar varias tablas, como el ejemplo que he puesto. _________________ Un saludo
Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Ultima edición por Angel el Vie 02 May, 2008 7:14 am, editado 3 veces |
|
| Volver arriba |
|
 |
jacko Master


Registrado: 03 Sep 2005Mensajes: 287Ubicación: Colombia
|
Publicado: Mar 15 May, 2007 4:27 pm Asunto: |
|
|
WOW Angel dinamico!!!
Haberlo sabido antes!!!
Cuantas lineas de codigo me hubiera ahorrado.... pero bueno, lo pondré en practica para una nueva version de mi programa, porque ya lo saqué en venta y no puedo ponerme a retrasarlo ahora.
Super!!! dinamico!!! WOW  _________________ Dios es real... a menos que se declare entero! |
|
| Volver arriba |
|
 |
Alexeu Lt JG

Registrado: 12 Abr 2007Mensajes: 62
|
Publicado: Mar 15 May, 2007 5:17 pm Asunto: |
|
|
| Muchas gracias, me pondre en ello en cuanto pueda. |
|
| Volver arriba |
|
 |
|
|
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
|
© 2002–2026 Club Builder · Funciona con phpBB.
|