| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Rilo Ens

Registrado: 03 Jun 2003Mensajes: 40Ubicación: Ávila
|
Publicado: Mie 08 Oct, 2003 7:53 pm Asunto: Base de datos y excell |
|
|
Hola a todos:
Tengo un problemilla y no he encontrado ningún mensaje con la solución. Mi problema es el siguiente.
En una hoja de excell tengo unas referencias que necesito ir cogiendo y guardando en una base de datos. La cantidad de referencias son variables, es decir hoy tengo 1200 y mañana puede que tenga 35. Todas las referencias están en la columna A.
La cuestión es:
¿Cómo puedo hacer esto?
Muchas gracias por anticipado a todos.
Rilo _________________ Ávila, ciudad patrimonio de la humanidad. Visítala. |
|
| Volver arriba |
|
 |
Mónica Cmdr

Registrado: 27 Sep 2002Mensajes: 136Ubicación: Pontevedra (España)
|
Publicado: Jue 09 Oct, 2003 7:31 am Asunto: |
|
|
Te pongo el código que estoy utilizando yo, que por cierto me lo pasaron aquí:
int contador=0; //cuenta el número de registros añadidos a la BD
//El usuario selecciona la tabla de la que quiere importar los datos:
OpenDialog1->Title="Importar datos de";
if (OpenDialog1->Execute()) {
xlApp=CreateOleObject("Excel.Application");
xlApp.Exec(PropertySet("Visible")<<true);
xlLibro=xlApp.Exec(PropertyGet("Workbooks"));
xlLibro.Exec(Procedure("Open")<<OpenDialog1->FileName);
Variant xlApp, xlHoja, xlCelda, UltimaCelda;
xlHoja=xlApp.Exec(PropertyGet("ActiveSheet"));
if (xlHoja.IsEmpty()) {
ShowMessage("No hay ninguna hoja activa");
return;
}
int Fila=2; //es la primera fila en la que hay datos, ya que en mi caso la Fila 1 tiene los títulos de las columnas
//Busca la última fila que tiene datos:
xlCelda=xlHoja.Exec(PropertyGet("Cells"));
UltimaCelda=xlCelda.Exec(Function("SpecialCells")<<11);
int UltimaFila=UltimaCelda.Exec(PropertyGet("Row"));
while (Fila<=UltimaFila) {
Application->ProcessMessages();
String Valor=xlHoja.Exec(PropertyGet("Cells")<<Fila<<2);
//Primero reviso si en la BD hay algún registro igual:
Query1->Active=false;
Query1->SQL->Clear();
Query1->SQL->Add("SELECT * FROM "+Tabla);
Query1->SQL->Add("WHERE "+campo+"='"+Valor+"'");
Query1->Open();
//Si ya existe un registro igual, no lo guardo en la BD
if (Query1->Eof==false)
Fila++;
//Si no está repetido, sí lo guardo:
else {
Query1->Active=false;
Query1->SQL->Clear();
Query1->SQL->Add("INSERT INTO "+Tabla+" ("+campo+") ");
Query1->SQL->Add("VALUES (:0) ");
Query1->Params->Items[0]->AsString=Valor;
Query1->ExecSQL();
contador++;
Query1->Close();
Fila++;
}
}
//Cierro excel:
xlApp.Exec(PropertySet("Visible")<<false);
xlApp.Exec(Procedure("Quit"));
xlApp.Clear();
Table1->Close();
Table1->Open();
ShowMessage(AnsiString(contador)+" registros añadidos");
}
Espero haberte sido de ayuda.
Saludos! |
|
| Volver arriba |
|
 |
Rilo Ens

Registrado: 03 Jun 2003Mensajes: 40Ubicación: Ávila
|
Publicado: Jue 09 Oct, 2003 10:27 pm Asunto: |
|
|
Voy a probarlo, pero si esto no me sirve de ayuda, cuelgo el teclado. Muchísimas gracias _________________ Ávila, ciudad patrimonio de la humanidad. Visítala. |
|
| Volver arriba |
|
 |
|