 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Mónica Cmdr

Registrado: 27 Sep 2002Mensajes: 136Ubicación: Pontevedra (España)
|
Publicado: Mar 30 Sep, 2003 11:08 am Asunto: Importar datos de Excel a una base de datos SQL |
|
|
Hola a tod@s, vereis, necesito importar datos de una hoja excel a una tabla de una base de datos SQL. Los datos que quiero importar están en una sola columna de la hoja excel y el campo de la BD es VARCHAR.
He estado buscando en el foro, por lo visto hay algo aquí:
[url]
http://208.164.29.42/ubb/Forum1/HTML/000605.html
[/url]
pero a mí me aparece la página en blanco.
¿Alguien me puede ayudar?
Gracias! |
|
| Volver arriba |
|
 |
Snake + + Lt


Registrado: 31 Oct 2002Mensajes: 83Ubicación: Zacatecas, Zac. Mexico
|
Publicado: Mar 30 Sep, 2003 8:02 pm Asunto: |
|
|
Monica.
Sabes, lo que se me ocurre es lo siguiente:
Si el archivo esta en unma columna y seguido, busca una forma de separarlo, por ejemplo que los primeros datos ean el nombre, despues direccion etc.
O otra, puedes usar los componentes que trae el Builder 6.0 para el Office y checa las funciones que trae para las hojas de Exel. _________________ I.S.C. Joel Salinas Alvarado
Linux User:454009
the human knowledge belong to the world
"Hoy el Universo Debian es mas GRANDE"
Zacatecas, Mexico. |
|
| Volver arriba |
|
 |
Invitado
|
Publicado: Mie 01 Oct, 2003 7:26 am Asunto: |
|
|
Muchas gracias por tu respuesta Snake, pero creo que no me he explicado bien. Así que lo voy a volver a intentar:
La tabla de mi base de datos tiene 2 campos: NumeroSerie y Estado. Ambos son de tipo VARCHAR.
En la tabla excel lo único que tengo es una lista de números de serie, que están todos en una columna de la hoja excel.
Lo que no sé hacer es importar directamente los números de serie de la hoja excel al campo NumeroSerie de la tabla de la base de datos.
¿Me he explicado ahora?
Gracias! |
|
| Volver arriba |
|
 |
Mónica Cmdr

Registrado: 27 Sep 2002Mensajes: 136Ubicación: Pontevedra (España)
|
Publicado: Mie 01 Oct, 2003 7:43 am Asunto: |
|
|
| Perdón, el "Invitado" soy yo. |
|
| Volver arriba |
|
 |
Eduardo Cdt

Registrado: 15 Jul 2003Mensajes: 19
|
Publicado: Mie 01 Oct, 2003 7:58 pm Asunto: |
|
|
Variant e,s ;
e=GetActiveOleObject("Excel.Application");
//seleccionar hoja activa
s=e.Exec(PropertyGet("ActiveSheet"));
if(s.IsEmpty())
{
ShowMessage("No hay ninguna hoja activa");
return;
}
int Fila=5;
int i=5+StrToInt(s.Exec(PropertyGet("Cells")<<500<<1));
while(Fila<i)
{
String Value=s.Exec(PropertyGet("Cells")<<Fila<<1);
Query2->Active=false;
Query2->SQL->Clear();
Query2->SQL->Add("INSERT INTO PAGO_"+FormatDateTime("yyyy",Now())+"(placa, costo_tasa, forma_pago, ipc_1, multas_1, total_1, fec_pago_1, pagado_1, ipc_2, multas_2, total_2, pagado_2)");
Query2->SQL->Add(" VALUES( 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, :x10, :x11)");
Query2->Params->Items[0]->AsString=s.Exec(PropertyGet ("Cells")<<Fila<<1);
Query2->Params->Items[1]->AsInteger=s.Exec(PropertyGet("Cells")<<Fila<<2);
Query2->Params->Items[2]->AsString=s.Exec(PropertyGet("Cells")<<Fila<<3);
Query2->Params->Items[3]->AsInteger=s.Exec(PropertyGet("Cells")<<Fila<<4);
Query2->Params->Items[4]->AsInteger=s.Exec(PropertyGet("Cells")<<Fila<<5);
Query2->Params->Items[5]->AsInteger=s.Exec(PropertyGet("Cells")<<Fila<<6);
Query2->Params->Items[6]->AsDateTime=s.Exec(PropertyGet("Cells")<<Fila<<7);
Query2->Params->Items[7]->AsString=s.Exec(PropertyGet("Cells")<<Fila<< ;
Query2->Params->Items[8]->AsInteger=s.Exec(PropertyGet("Cells")<<Fila<<9);
Query2->Params->Items[9]->AsInteger=s.Exec(PropertyGet("Cells")<<Fila<<10);
Query2->Params->Items[10]->AsInteger=s.Exec(PropertyGet("Cells")<<Fila<<11);
Query2->Params->Items[11]->AsString=s.Exec(PropertyGet("Cells")<<Fila<<13);
} |
|
| Volver arriba |
|
 |
Mónica Cmdr

Registrado: 27 Sep 2002Mensajes: 136Ubicación: Pontevedra (España)
|
Publicado: Jue 02 Oct, 2003 7:56 am Asunto: |
|
|
| Muchas gracias Eduardo, lo voy a probar ahora mismo y te cuento. |
|
| Volver arriba |
|
 |
rockfavc Cmdr


Registrado: 23 Ago 2002Mensajes: 138Ubicación: Colombia (Medellín)
|
Publicado: Jue 30 Oct, 2003 6:00 pm Asunto: |
|
|
Hola Foristas, estoy necesitando leer daots desde un archivo excel y estoy probando la solucion planteada por Eduardo, pero tengo una duda:
como incluyo la unidad ComObj ya que es necesaria para utilizar GetActiveOleObject.
Muchas gracias |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Jue 30 Oct, 2003 6:25 pm Asunto: |
|
|
Es un enlace del servidor anterior donde estaba el foro, para convertirla al nuevo solo tienes que usar el número final sin los 0, o sea, ese mismo enlace ahora quedaría así:
https://cppbuilder.es/viewtopic.php?t=605
| Cita: | | como incluyo la unidad ComObj ya que es necesaria para utilizar GetActiveOleObject |
Solo tienes que añadir: #include<ComObj.hpp>
Si necesitas mas detalles pon la palabra "Excel" en el enlace de búsqueda del foro donde se explica esto entre otras cosas. |
|
| Volver arriba |
|
 |
rockfavc Cmdr


Registrado: 23 Ago 2002Mensajes: 138Ubicación: Colombia (Medellín)
|
Publicado: Vie 31 Oct, 2003 3:05 pm Asunto: |
|
|
Hola Leo! muchas gracias por tu respuesta, encontre lo que buscaba.
Ahora pregunto si existe otra forma de hacerlo, no se si se puede trabajar con DDE?.
Lo que necesito hacer es leer algo que otra aplicaion escribe en la hoja excel y lo hace via DDE, ahora si, existe otra forma de hacerlo?
De nuevo Muchas gracias |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Sab 01 Nov, 2003 10:14 pm Asunto: |
|
|
| Cita: | Lo que necesito hacer es leer algo que otra aplicaion escribe en la hoja excel y lo hace via DDE, ahora si, existe otra forma de hacerlo?
|
No entiendo bien lo que preguntas, ya que da igual que método use la otra aplicación para que tú puedas leerlo, al fin y al cabo tú con quien necesitas comunicarte es con Excel y no con la otra aplicación no ?
Aunque si, puedes usar DDE, pero dudo que así tengas más control. Se usaba mucho en versiones anteriores de Office, aunque sigue funcionando en las actuales.
Un ejemplo muy básico. Necesitaremos tener Excel abierto y una hoja activa con el nombre 'Hoja1'. Solo tienes que añadir el código siguiente en el OnClick de un botón:
// Añadimos: #include<memory> e #include<ddeman.hpp>
std::auto_ptr<TDdeClientConv> dde(new TDdeClientConv(0));
// Enlazamos con Excel
dde->SetLink("Excel", "Hoja1");
// Escribimos en la Fila 1 Columna 1
dde->PokeData("F1C1", "prueba");
// Leemos la Fila 1 Columna 1
String valor = dde->RequestData("F1C1");
Uno de los problemas principales es que según en que idioma este Excel tendremos que enviarle los comandos para ese idioma. Por ejemplo, lo anterior cambiaria un poco si fuese para la versión en ingles:
//...
dde->SetLink("Excel", "Sheet1");
dde->PokeData("R1C1", "prueba");
String valor = dde->RequestData("R1C1"); |
|
| Volver arriba |
|
 |
Invitado
|
Publicado: Mar 04 Nov, 2003 3:09 am Asunto: |
|
|
Leo! muchas gracias por tu respuesta, creo que me quedo con la primera opcion, tienes razon el DDE trae desventajas (que no conocia) y lo unico que necesito es comunicarme con excel.
Felicidades y Tema Cerrado (ups! eso creo)
Saludos |
|
| 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.
|