yao_13 Master


Registrado: 29 Jul 2003Mensajes: 226
|
Publicado: Vie 10 Dic, 2004 9:00 pm Asunto: Problema al ejecutar Query |
|
|
Que ondas señores, resulta que estoy utilizando el codigo que anda por ahi para la importacion de Excel a Builder, lee la informacion perfectamente pero al momento de meterla en el query para insertarla en La base de Datos me manda este error:
| Cita: | Project Excel.exe raised excepcion class EDBEngineError with message 'General SQL Error Data type unknown.
Client SQL dialect1 does not support reference to 64-bit numeric datatype'.Process stopped. Use Step or Run to Continue.
|
No se por qué, es la primera vez que me sale, desde que comencé a trabaja con Builder, la informacion que saco de la hoja de Excel la pongo en Edit's para despues pasar esa información como parametros al Query.
El codigo del evento CLick del boton es el siguiente:
| Código: | void __fastcall TForm1::BimportarExcelClick(TObject *Sender)
{
BimportarExcel->Enabled=false;
//
// Empezamos con EXCEL
//
OpenDialog1->Title="Importar datos de";
if (OpenDialog1->Execute())
{
//Busco un fichero Excel y obtengo su nombre y ruta
Variant FileName = OpenDialog1->FileName.c_str();
EnombreFichero->Text=FileName;
try
{
Pabierto->Color=clYellow;
Pabierto->Caption=mensajeAlerta;
//Abro la aplicación Excel y la hago visible
aplicacionExcel=CreateOleObject("Excel.Application");
//aplicacionExcel.Exec(PropertySet("Visible")<<true);
// LIBROS
// Tomar el primer objeto libro de la colección
coleccionLibros=aplicacionExcel.Exec(PropertyGet("Workbooks"));
// abrirlo
coleccionLibros.Exec(Procedure("Open")<<OpenDialog1->FileName);
// (sin usar el OpenDialog)
// coleccionLibros.Exec(Procedure("Open") << "C:\\directorio\\fichero.xls");
}
catch (Exception &exception) // no llegó a abrirse
{
Application->MessageBox("Esta aplicación necesita Excel 97 o superior","Aviso...",MB_ICONSTOP);
BimportarExcel->Enabled=true;
return;
}
try
{
// LIBRO ACTIVO
// Tomar el primer libro de la aplicacion
libro = coleccionLibros.Exec(PropertyGet("Item") << 1);
// HOJAS
// Tomar la colección de hojas del libro activo
//coleccionHojas = aplicacionExcel.OlePropertyGet("Worksheets");
coleccionHojas = libro.Exec(PropertyGet("Worksheets"));
// HOJA ACTIVA
//
// Tomar la hoja activa de la colección de hojas
//hoja=aplicacionExcel.Exec(PropertyGet("ActiveSheet"));
hoja = coleccionHojas.Exec(PropertyGet("Item") << 1);
if (hoja.IsEmpty())
ShowMessage("No hay ninguna hoja activa");
else
{
// ver nombre a una hoja
EnombreHoja->Text=hoja.Exec(PropertyGet("Name"));
// CELDAS
//
int fila; // índice a la fila actual
int ultimaFila; // índice a la última fila que tiene datos (no la conozco inicialmente)
int columna;
int ultimaColumna;
Variant ultimaCelda; // contiene la última celda
String valor; // contiene valor de una celda (son de tipo String)
// indico la primera fila que tiene datos (se supone que lo se)
fila=1;
columna=1;
// Busca la última fila que tiene datos:
// Tomar la coleccion de celdas
celdas=hoja.Exec(PropertyGet("Cells"));
// Tomar la última celda con datos
ultimaCelda=celdas.Exec(Function("SpecialCells")<<11);
// fila de la ultima celda
ultimaFila=ultimaCelda.Exec(PropertyGet("Row"));
EnumFilas->Text=ultimaFila;
// Tomar la última columna ?
ultimaColumna=8;
Panel1->Color = clRed;
for (fila=1; fila<=ultimaFila;fila++)
for (columna=1; columna<=ultimaColumna;columna++)
{
Application->ProcessMessages();
// leo valor celda (fila =fila, columna = columna)
valor=hoja.Exec(PropertyGet("Cells")<<fila<<columna);
Efila->Text=fila;
Ecolumna->Text=columna;
// tratar como números
//*******************************************************
//*******************************************************
ShortDateFormat = "dd/mm/yyyy";
if(Ecolumna->Text == 1)
{
if(Efila->Text == "6")
Edit1->Text = valor;
if(Efila->Text == "8")
Edit2->Text = valor;
if(Efila->Text == "9")
Edit3->Text = valor;
}
if(StrToInt(Efila->Text) > 12)
{
if(Ecolumna->Text == "1")
Edit4->Text = valor;
if(Ecolumna->Text == "2")
Edit5->Text = valor;
if(Ecolumna->Text == "5")
Edit6->Text = valor;
if(Ecolumna->Text == "7")
Edit7->Text = valor;
if(Ecolumna->Text == "8")
Edit8->Text = valor;
if(Ecolumna->Text == "8")
{
Query1->ParamByName("desglose")->AsString = Edit1->Text.SubString(11,6);
Query1->ParamByName("f_pago")->AsDate = StrToDate(Edit2->Text.SubString(17,10));
Query1->ParamByName("bank")->AsString = Edit3->Text.SubString(8,10);
Query1->ParamByName("suc")->AsInteger = StrToInt(Edit4->Text);
Query1->ParamByName("fol")->AsInteger = StrToInt(Edit5->Text);
// Query1->ParamByName("impo_res")->AsFloat = StrToFloat(Edit6->Text);
// Query1->ParamByName("num")->AsInteger = StrToInt(Edit7->Text);
// Query1->ParamByName("impo_fac")->AsFloat = StrToFloat(Edit8->Text);
Query1->Close();
Query1->ExecSQL();
}
}
}
Panel1->Color = clGreen;
//
// CERRAR
//
cerrarExcel();
} // fin if hoja isEmpty
}
catch (Exception &exception)
{
BimportarExcel->Enabled=true;
cerrarExcel();
return;
}
} // fin if OPENDIALOG1 ...
BimportarExcel->Enabled=true;
}
Se que esta largo y a lo mejor les de flojera leer todo ese chorizo, pero por favor ayudenme.
Alguna Idea ????????????' |
_________________ Sin pena, ni gloria |
|