Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > DB2
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-12-2014
principiodual principiodual is offline
Miembro
 
Registrado: ago 2014
Posts: 26
Poder: 0
principiodual Va por buen camino
Db2. Problema de almacenamiento en tablas

Buenos Días a todos, el siguiente es para consultar lo siguiente.

yo tengo un aplicativo que desarrollé el cual se conecta con una base de datos en DB2 y todo bien, hace la conexión perfectamente, pero en una
de las tablas cuando voy a hacer un llenado con un archivo en excel de muchas filas de registros, este se cuelga y solo sube como poco mas de
100 filas, quedando la mayoría sin registrarse en la tabla en dicha base de datos de db2.

el error que me aparece es el siguiente:


Project PRUEBA.exe raised exception class EOleException with message '[IBM][CLI Driver]SQL0954C No
hay suficiente almacenamiento disponible en la pila de aplicación para procesar la sentencia. SQLSTATE=57011'.


Según he averiguado algo en la página principal de IBM tiene que ver con la memoria que uno asigna a la tabla, al parecer es poca, pero no estoy
seguro de si realmente es por ello o porque es mi método de lectura y subida de datos en excel. Quizás alguien me pueda ayudar en esto o le haya sucedido y sepa la razón de porque sucede esto.

NOTA: estoy aprendiendo a trabajar con el entorno en DB2 que se me hace algo complicado y no sabría como darle mas memoria a la tabla
para corroborar que ese sea el fallo, si alguien me puede guiar en ello o sugerirme alguna documentación directa,he leído varios foros pero no
explican directamente como asignar memoria y esas cosas a las tablas de la base de datos.

Esta es la explicación que encontre de parte de la página de IBM.

Cita:
SQL0954C
No hay suficiente almacenamiento disponible en la pila de aplicación para procesar la sentencia.
Explicación:
Se ha utilizado toda la memoria disponible para la aplicación.
No se puede procesar la sentencia.
Respuesta del Usuario:
Interrumpa la aplicación al recibir este mensaje. Aumente el parámetro de configuración de la base de datos ( applheapsz ) para que permita una pila de aplicación más grande.
sqlcode : -954
sqlstate : 57011
Este es mi método o procedimiento que he desarrollado a base de uno que me facilitaron en esta misma Web.

Código Delphi [-]
//----------------------------------------------------------------------------//
//----PROCEDIMIENTO PARA CARGAR EL EXCEL PARA LA OPCIÓN CUENTAS CONTABLES ----//
//--------------------------------Y CORPORATIVAS------------------------------//


procedure TForm6.Cargar_Excel2;
 var
   Excel, WrkS, WrkB : OLEVariant;
   Row, Col : Integer;
   Rows, Cols : Integer;
   variable,
   variable2,
   variable3,
   variable4:String;
   contador_fila,
   contador:Integer;

   i:Integer;

 begin
   contador_fila:=0;
   contador:=0;

   i:=0;

   Excel := CreateOleObject('Excel.Application');
   Excel.Workbooks.Open(Edit1.Text);

   WrkS := Excel.Worksheets[1];
   Cols := WrkS.UsedRange.Columns.Count;
   Rows := WrkS.UsedRange.Rows.Count;

  for Row:= 1 to StringGrid1.RowCount do
   StringGrid1.Rows[Row].Clear;

   StringGrid1.FixedRows := 1;
   StringGrid1.FixedCols := 1;
   StringGrid1.RowCount := Rows + 1;
   StringGrid1.ColCount := Cols + 1;

   for Row:= 1 to StringGrid1.RowCount do
     begin

      contador_fila:=contador_fila+1;

      for Col:= 1 to StringGrid1.ColCount  do
       begin
         StringGrid1.Cells[Col,Row]:= Excel.ActiveSheet.Cells[Row,Col].Value;

         if (StringGrid1.Cells[Col,Row] <> '') and (contador_fila > 1) then
         begin
          contador:=contador+1;

           if contador = 1 then
            begin
            variable:=StringGrid1.Cells[Col,Row];
            CODIGOCONTABLE:=variable;
            //ShowMessage(CODIGOCONTABLE);
            end
            else if contador = 2 then
            begin
             variable2:=StringGrid1.Cells[Col,Row];
             CENTRO_COSTO:=StrToInt(variable2);
             //ShowMessage(IntToStr(TIPOCUENTA));
            end
            else if contador = 3 then
            begin
             variable3:=StringGrid1.Cells[Col,Row];
             CUENTA_CORPORATIVA:=variable3;
             //ShowMessage(IntToStr(NATURALEZACUENTA));
            end
            else if contador = 4 then
            begin
              variable4:=StringGrid1.Cells[Col,Row];
              NOMBRE_CORPORATIVO:=variable4;
              //ShowMessage(CUENTA_CONTABLE_CORPORATIVA);
            end  else if contador = 5 then
            begin
              variable4:=StringGrid1.Cells[Col,Row];
              NATURALEZACUENTA:=variable4;
              //ShowMessage(CUENTA_CONTABLE_CORPORATIVA);
            end;




           end;                          // fin de la condición de que las celdas sean diferente de vacio
                     //y el contador de la fila en 1, es decir esté ya en la segunda fila.

      end;                              // Fin del recorrido por columnas...
          if (contador_fila > 1) AND (contador_fila < StringGrid1.RowCount)  then
           begin
            contador:=0;
            //ShowMessage(CODIGOCONTABLE);
            //ShowMessage(IntToStr(TIPOCUENTA));
            //ShowMessage(IntToStr(NATURALEZACUENTA));
            //ShowMessage(CUENTA_CONTABLE_CORPORATIVA);
            Almacenar_Excel2;
          end;
  end;
   OpenDialog1.Free;
   Excel.Quit;                                   //Fin del recorrido por fila...
   ShowMessage('Se ha almacenado todos los datos de las cuentas contables y corporativas  en la base de datos')

end;


//-------PROCEDIMIENTO PARA ALMACENAR CUENTAS CONTABLES Y CORPORATIVAS--------//


procedure TForm6.Almacenar_Excel2;
 var
c: integer;
StrSQL3,
StrSQL4:String;

FILTRO_CONTABLE:Boolean;
begin
FILTRO_CONTABLE:=False;
c:= 0; // Índice de la columna donde se almacena TagId
 //Define los Objetos ADO

  if CENTINELA_MAESTRO = 1 Then
  BEGIN

  Cn003    := TADOConnection.Create(nil);
  Rs003    := TADOQuery.Create(nil);

  Conectado3:=Open_DB(Cn003 , 5 , ServerDB, NameDB2, '', PasswordDB, '' );
 (*
  Rs002.Open;
  Rs002.Edit;
  Rs002.Insert;   *)

  StrSQL3:= 'SELECT * FROM GEINVZLA_TB_MAPPING_CUENTAS';

  StrSQL4:='INSERT INTO GEINVZLA_TB_MAPPING_CUENTAS(CODIGOCONTABLE,CENTRO_COSTO,CUENTA_CORPORATIVA,NOMBRE_CORPORATIVO,NATURA  LEZACUENTA)'
         +'VALUES('+chr(39)+(CODIGOCONTABLE)+chr(39)+','
                   +IntToStr(CENTRO_COSTO)+','
                   +chr(39)+(CUENTA_CORPORATIVA)+chr(39)+','
                   +chr(39)+NOMBRE_CORPORATIVO+chr(39)+','
                   +chr(39)+NATURALEZACUENTA+chr(39)+');';


     if Conectado3 then
  Begin

    //Se Abre el DataSet de la factura
    Conectado3:= Open_ADO_Qry(Cn003, Rs003,StrSQL3,false);
    //Conectado3:=DB_Function(Cn003,StrSQL3,4);
     with Rs003 do
       begin

            while not Eof do
            begin

    if (FieldByName('CODIGOCONTABLE').AsString = CODIGOCONTABLE) or (FieldByName('CENTRO_COSTO').AsInteger = CENTRO_COSTO) and (FieldByName('CUENTA_CORPORATIVA').AsString = 
                         CUENTA_CORPORATIVA) and (FieldByName('NOMBRE_CORPORATIVO').AsString = NOMBRE_CORPORATIVO) and (FieldByName('NATURALEZACUENTA').AsString = NATURALEZACUENTA) then
               Begin
               //ShowMessage(intToStr(EJERCICIO));
               FILTRO_CONTABLE:=True;
               End;

             Next;
             End;
        end;

    //Conectado2:= Open_ADO_Qry(Cn002,Rs002,StrSQL,false);
    //Conectado2:=DB_Function(Cn002,StrSQL,4);
   end;


   if FILTRO_CONTABLE = False then
    begin

          Cn004    := TADOConnection.Create(nil);
          Rs004    := TADOQuery.Create(nil);

          Conectado4:=Open_DB(Cn004 , 5 , ServerDB, NameDB2, '', PasswordDB, '' );
         (*
          Rs003.Open;
          Rs003.Edit;
          Rs003.Insert; *)

              if Conectado4 then
                Begin
                  Conectado4:=DB_Function(Cn004,StrSQL4,4);
                end;

     end;  // fin de la condición si el filtro es falso, es decir no existe ya la columna
           // en la base de datos.

  (*
   rs003.Close;
   rs003.Free;
   CloseConnection  (cn004, rs004);   *)
  END

  ELSE
  ShowMessage('Compruebe la conexión a la base de datos y los datos necesarios');

end;


Si alguien me puede ayudar o dar una idea, seguiré averiguando por mi parte como puedo darle mas memoria o modificar la capacidad de
la tabla para poder realizar la operación, espero no sea por mi método de Excel porque sería mas laborioso. Muchas gracias y espero este
sea el lugar para publicar este tema.

Última edición por Casimiro Notevi fecha: 05-12-2014 a las 18:26:45.
Responder Con Cita
  #2  
Antiguo 05-12-2014
orodriguezca orodriguezca is offline
Miembro
 
Registrado: ene 2009
Posts: 154
Poder: 9
orodriguezca Va por buen camino
Algo que veo "erroneo" es que por cada iteracción se están creando dos objetos de conexión y nunca se liberan los objetos ni se cierra la conexión.
Responder Con Cita
  #3  
Antiguo 05-12-2014
principiodual principiodual is offline
Miembro
 
Registrado: ago 2014
Posts: 26
Poder: 0
principiodual Va por buen camino
muchas gracias por la información, el código es muy extenso y debo limpiarlo, tengo también algunas variables demás, pero ya tengo todo identificado y voy a cerrar los objetos que uso para la conexión, de todas maneras el problema es otro, ¿no se si me pueda ayudar?
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Capacidad de Almacenamiento GDB chopin_fev Firebird e Interbase 7 13-03-2013 14:25:23
Problema con almacenamiento en String Moises22 Varios 5 29-09-2005 15:58:09
TMemoryStream almacenamiento en archivo federicoboga Varios 2 14-06-2005 23:57:46
Almacenamiento consultas juanma072 SQL 1 20-10-2004 18:59:36
almacenamiento de objetos seduerey OOP 2 25-09-2004 22:44:07


La franja horaria es GMT +2. Ahora son las 11:18:47.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi