In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

Preguntas sobre errores de adquisición y ejecución de datos

Foro público de Xailer en español
ricardo
Mensajes: 41
Registrado: Vie Jun 19, 2009 7:25 pm

Preguntas sobre errores de adquisición y ejecución de datos

Mensaje por ricardo »

Hola a todos,

En el siguiente fragmento de código, estoy recuperando datos de una tabla en mi base de datos MariaDB. Dado que los datos pueden ser bastante grandes, los estoy recuperando 50 filas a la vez.
¿Cómo puedo almacenar estas filas en un TDataSet de forma más directa, sin tener que pasar los datos a un array y luego insertarlos todos a la vez en un TMenDataSet?
Y otra pregunta: Cuando ocurre un error en la instrucción Select, ¿por qué no se ejecuta la instrucción Try...Catch?

Gracias de antemano por su atención.

Código: Seleccionar todo

METHOD GeraArqAuxiliar( ) CLASS TfrmRelNotasFiscaisRecebidas
Local bResp            := .T.,;
      Cont             := 0,;
      intQtdeRegistros := 0,;
      vetData          := {},;
      aryData          := {},;
      aryFieldNames    := {}

  Try

    // Verifica a quantidade de registro será retornada
    intQtdeRegistros := AppData:oMariaDB:QueryValue( 'Select Count(*) from dfe ' +;
                        ' where CAlmoDfe = ' + Alltrim(Str(::aCodAlmoxarifado[ ::oCbxAlmoxarifado:nIndex ])) + ' and ' + ;
                        ' dhEmiDfe between "' + HB_TSToStr(::oEdtDtInicial:Value) + '" and "' + HB_TSToStr(::oEdtDtFinal:Value + HB_DToT(CToD('') , 86399)) + '" ', 0)

    ::oPgBrExportacao:nMax     := intQtdeRegistros

    aryData := {}

    For Cont := 0 To intQtdeRegistros Step 50

       ::oDataSetReport := AppData:oMariaDB:QueryReport( 'Select CAlmoDfe, CodForDfe, CPFCNPJDfe, NEmitenteDfe, dhEmiDFe, NumNontaDfe, ' +;
                          ' SerieDfe, ValorNFDfe, SituacaoNFDfe, ChaveDfe ' +;
                          ' from dfe ' +;
                          ' where CAlmoDfe = ' + Alltrim(Str(::aCodAlmoxarifado[ ::oCbxAlmoxarifado:nIndex ])) + ' and ' + ;
                          ' dhEmiDfe between "' + HB_TSToStr(::oEdtDtInicial:Value) + '" and "' + HB_TSToStr(::oEdtDtFinal:Value + HB_DToT(CToD('') , 86399)) + '" ' +;
                          ' order by dhEmiDFe limit 50 offset ' + AllTrim(Str(Cont)))

      ::oDataSetReport:Open()

      For Each vetData in ::oDataSetReport:GetRows()

        AAdd(aryData, vetData)

      Next

      aryFieldNames := ::oDataSetReport:FieldNames()

      ::oDataSetReport:Close()

    Next Cont

    ::oMemDataSet:Open(aryData, aryFieldNames)

  Catch

    bResp := .F.

  End  // Begin Sequence

RETURN( bResp )
Responder