| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
agipsy Cdt

Registrado: 01 Sep 2006Mensajes: 15Ubicación: MONTERIA - COLOMBIA
|
Publicado: Dom 08 Oct, 2006 3:10 am Asunto: Componente ADO |
|
|
Buenas Noches
Espero que alguien pueda colaborarme con lo sgte:
Al presionar un boton, cargo una tabla de mi Base de datos desde un archivo en excel que contiene 2 hojas de calculo (una que contiene datos de estudiantes y la otra contiene la de docentes) utilizando ADOConnection y 2 ADOTables . Cada ADOTABLE apunta a una hoja de calculo. El problema esta en que me aparece un mensaje de error que dice aunq si carga la tabla:
Project SOFTGER.EXE raised exception class EVariantTypeCastError with message 'Could not convert variant of type (null) into type (String). Process stopped.
Este es el codigo con el que cargo :
void __fastcall TActDat::BitBtn3Click(TObject *Sender)
{
if (OpenDialog1->FileName=="")
ShowMessage("Primero debe seleccionar un archivo para cargar.");
else {
StatusBar1->SimpleText="";
StatusBar1->SimpleText=("Actualizando Base de datos local");
AnsiString id,nombre,facultad="";
DBMod->ADOTable2->First();
while( !DBMod->ADOTable2->Eof )
{
id=DBMod->ADOTable2->Fields->FieldByName("Id")->AsString;
nombre=DBMod->ADOTable2->Fields->FieldByName("Nombres completos")->AsString;
facultad=DBMod->ADOTable2->Fields->FieldByName("Estudiante Programa 1")->AsString;
DBMod->IBStoredProc1->StoredProcName="AGR_EST";
DBMod->IBStoredProc1->ParamByName("ID")->AsString=id;
DBMod->IBStoredProc1->ParamByName("NOMBRE")->AsString=nombre;
DBMod->IBStoredProc1->ParamByName("FACULTAD")->AsString=facultad;
DBMod->IBStoredProc1->Prepare();
DBMod->IBStoredProc1->ExecProc();
DBMod->IBQuery1->SQL->Clear();
DBMod->IBQuery1->SQL->Add("COMMIT;");
DBMod->IBQuery1->ExecSQL();
id=""; nombre=""; facultad="";
DBMod->ADOTable2->Next();
}
DBMod->ADOTable1->First();
while( !DBMod->ADOTable1->Eof )
{
id=DBMod->ADOTable1->Fields->FieldByName("CEDULA")->AsString.TrimLeft();
nombre=DBMod->ADOTable1->Fields->FieldByName("NOMBRE DEL EMPLEADO")->AsString;
DBMod->IBStoredProc1->StoredProcName="AGR_DOC";
DBMod->IBStoredProc1->ParamByName("CED")->AsString=id;
DBMod->IBStoredProc1->ParamByName("NOMBRE")->AsString=nombre.UpperCase();
DBMod->IBStoredProc1->Prepare();
DBMod->IBStoredProc1->ExecProc();
DBMod->IBQuery1->SQL->Clear();
DBMod->IBQuery1->SQL->Add("COMMIT;");
DBMod->IBQuery1->ExecSQL();
id=""; nombre="";
DBMod->ADOTable1->Next();
}
StatusBar1->SimpleText="";
StatusBar1->SimpleText=("Base de datos actualizada");
}
Espero su pronta respuesta. Gracias[/img][/code] |
|
| Volver arriba |
|
 |
Buildero Master


Registrado: 23 Dic 2003Mensajes: 523Ubicación: Puebla, México
|
Publicado: Lun 09 Oct, 2006 3:55 pm Asunto: |
|
|
El mensaje es muy claro... no puede covertir un valor NULO en cadena. Lo más probable es que alguno de los datos estén en blanco. Es decir que contengan una cadena vacia. En todo caso podrias implemnetar una verificación antes de realizar la asignación de datos.
Saludos. _________________ Quien hace una pregunta teme parecer un ignorante durante cinco minutos, quien no pregunta se mantiene ignorante toda la vida. |
|
| Volver arriba |
|
 |
agipsy Cdt

Registrado: 01 Sep 2006Mensajes: 15Ubicación: MONTERIA - COLOMBIA
|
Publicado: Lun 09 Oct, 2006 4:38 pm Asunto: Respuesta a Buildero |
|
|
Hola Buildero
Yo Revice el archivo porque pense lo mismo que usted y no hay celdas vacias, las celdas que tenia vacias las llene con un valor. |
|
| Volver arriba |
|
 |
Buildero Master


Registrado: 23 Dic 2003Mensajes: 523Ubicación: Puebla, México
|
Publicado: Lun 09 Oct, 2006 5:19 pm Asunto: |
|
|
Bueno, pues lo unico que se me ocurre por el momento es utilizar puntos de ruptura, y averiguar en que iteración de el/los cilclo(s) se encuentra la falla.
Saludos _________________ Quien hace una pregunta teme parecer un ignorante durante cinco minutos, quien no pregunta se mantiene ignorante toda la vida. |
|
| Volver arriba |
|
 |
|