Hola,
Tengo el siguiente detalle, corro un FOR que recorre un browse que contiene las tablas previamente cargada de una base de datos, pero cuando por algun motivo la tabla en turno tiene un error el cual intento manejar con un TRY...CACTH, la siguientes tablas que consulto ya no me marcan error pero no me regresa registros y si debería, ya que esta consulta es de la estructura de la tabla o sea sus campos, anexo el codigo que uso:
FOR I = 1 TO ::oDBBrowse1:KeyCount()
::oDBBrowse1:GoTo(I)
cId := Alltrim( Str(::oDBBrowse1:aCols[2]:Value) )
cNombreTabla := ::oDBBrowse1:aCols[3]:Value
WITH OBJECT oDataSetCampos := TSQLQuery():Create()
IF :lOpen
:Close()
ENDIF
:oDataSource := AppData:oDataSourceBDTrabajar
// Esta consulta es la que ya no me manda registros, pero si la ejecuta
:cSelect := "SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '" + cNombreTabla + "'"
:Open()
TRY
lCont := .t. // Esta es solo una bandera para indicar si realizo la consulta, de lo contrario hace la sigueinte interacción del FOR
:Gotop()
msgarray( {"ok", i, :cSelect, lCont, :RecCount() } )
CATCH
lCont := .F.
msgarray( {"fallo", i, :cSelect, lCont} )
END
IF lCont
// Registro la estructura de la tabla en turno
WHILE ! :Eof()
cNulo := IF( :IS_NULLABLE = 'YES', "1", "0" )
cLong := IF( Empty(:CHARACTER_MAXIMUM_LENGTH), "", Alltrim( Str( :CHARACTER_MAXIMUM_LENGTH ) ) )
cInsertar := "INSERT INTO ESTRUCTURA_TABLAS (ID_TABLA, CONSECUTIVO, CAMPO, LONGITUD, TIPO, NULO) VALUES "
cInsertar += "(" + cId + ","
cInsertar += Alltrim( Str(:ORDINAL_POSITION) ) + ","
cInsertar += "'" + :COLUMN_NAME + "',"
cInsertar += "'" + :DATA_TYPE + "',"
cInsertar += "'" + cLong + "','"
cInsertar += :IS_NULLABLE+ "')"
MsgInfo( cInsertar, "Insertar" )
AppData:oDataSourceDocu:Execute( cInsertar, "Error al agregar Registro: " + cInsertar )
:Skip(1)
END WHILE
END
...
NEXT
Alguien tendrá algun tip para que esto no suceda, sería de mucha ayuda?
Aclaro hasta antes de encontrar esta tabla que si marca error el proceso se ejecuta correctamente, o sea que la consulta :cSelect := "SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '" + cNombreTabla + "'", me regresa la consulta con los registros correctos.
Saludos,
Mario A. Dávalos
--
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.
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.
Resultado raro en Querys...
-
- Mensajes: 190
- Registrado: Mar Ago 19, 2008 12:38 am
-
- Mensajes: 558
- Registrado: Mar Feb 09, 2010 2:26 pm
Resultado raro en Querys...
Saludos:
Simplifiquemos un poco las cosas para saber en donde estamos en cada
momento por ejemplo
Procesamos el ::oDBBrowse1
WITH OBJECT ::oDBBrowse1
IF :KeyCount() > 0
:GoTop()
FOR i := 1 TO :KeyCount()
cId := Alltrim( Str(::oDBBrowse1:aCols[2]:Value) )
cNombreTabla := ::oDBBrowse1:aCols[3]:Value
::ProcesarDataset(cld, cNombeTabla) // Creamos un
método donde lo procesamos
IF i # :KeyCount()
:GoDown()
ENDIF
NEXT
ENDIF
END WITH
Mi consejo es que no utilices dos WiTH OBJECT anudados es mejor crear un
método nuevo que lo procese. Fijate que el :GoTop() dentro del TRY no
sabes a donde apunta ya que esa instrucción pertenece a los dos al
DataSet y al DBBBrowse
José Ramón Castro.
El 08/02/2010 16:28, Mario A. Dávalos escribió:
> Hola,
> Tengo el siguiente detalle, corro un FOR que recorre un browse que
> contiene las tablas previamente cargada de una base de datos, pero
> cuando por algun motivo la tabla en turno tiene un error el cual intento
> manejar con un TRY...CACTH, la siguientes tablas que consulto ya no me
> marcan error pero no me regresa registros y si debería, ya que esta
> consulta es de la estructura de la tabla o sea sus campos, anexo el
> codigo que uso:
> FOR I = 1 TO ::oDBBrowse1:KeyCount()
> ::oDBBrowse1:GoTo(I)
> cId := Alltrim( Str(::oDBBrowse1:aCols[2]:Value) )
> cNombreTabla := ::oDBBrowse1:aCols[3]:Value
> WITH OBJECT oDataSetCampos := TSQLQuery():Create()
> IF :lOpen
> :Close()
> ENDIF
> :oDataSource := AppData:oDataSourceBDTrabajar
> // Esta consulta es la que ya no me manda registros, pero si la ejecuta
> :cSelect := "SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME =
> '" + cNombreTabla + "'"
> :Open()
> TRY
> lCont := .t. // Esta es solo una bandera para indicar si realizo la
> consulta, de lo contrario hace la sigueinte interacción del FOR
> :Gotop()
> msgarray( {"ok", i, :cSelect, lCont, :RecCount() } )
> CATCH
>
> lCont := .F.
> msgarray( {"fallo", i, :cSelect, lCont} )
> END
> IF lCont
> // Registro la estructura de la tabla en turno
> WHILE ! :Eof()
> cNulo := IF( :IS_NULLABLE = 'YES', "1", "0" )
> cLong := IF( Empty(:CHARACTER_MAXIMUM_LENGTH), "", Alltrim( Str(
> :CHARACTER_MAXIMUM_LENGTH ) ) )
> cInsertar := "INSERT INTO ESTRUCTURA_TABLAS (ID_TABLA, CONSECUTIVO,
> CAMPO, LONGITUD, TIPO, NULO) VALUES "
> cInsertar += "(" + cId + ","
> cInsertar += Alltrim( Str(:ORDINAL_POSITION) ) + ","
> cInsertar += "'" + :COLUMN_NAME + "',"
> cInsertar += "'" + :DATA_TYPE + "',"
> cInsertar += "'" + cLong + "','"
> cInsertar += :IS_NULLABLE+ "')"
> MsgInfo( cInsertar, "Insertar" )
> AppData:oDataSourceDocu:Execute( cInsertar, "Error al agregar Registro:
> " + cInsertar )
> :Skip(1)
> END WHILE
> END
> ...
> NEXT
> Alguien tendrá algun tip para que esto no suceda, sería de mucha ayuda?
> Aclaro hasta antes de encontrar esta tabla que si marca error el proceso
> se ejecuta correctamente, o sea que la consulta :cSelect := "SELECT *
> FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '" + cNombreTabla +
> "'", me regresa la consulta con los registros correctos.
> Saludos,
> Mario A. Dávalos
Simplifiquemos un poco las cosas para saber en donde estamos en cada
momento por ejemplo
Procesamos el ::oDBBrowse1
WITH OBJECT ::oDBBrowse1
IF :KeyCount() > 0
:GoTop()
FOR i := 1 TO :KeyCount()
cId := Alltrim( Str(::oDBBrowse1:aCols[2]:Value) )
cNombreTabla := ::oDBBrowse1:aCols[3]:Value
::ProcesarDataset(cld, cNombeTabla) // Creamos un
método donde lo procesamos
IF i # :KeyCount()
:GoDown()
ENDIF
NEXT
ENDIF
END WITH
Mi consejo es que no utilices dos WiTH OBJECT anudados es mejor crear un
método nuevo que lo procese. Fijate que el :GoTop() dentro del TRY no
sabes a donde apunta ya que esa instrucción pertenece a los dos al
DataSet y al DBBBrowse
José Ramón Castro.
El 08/02/2010 16:28, Mario A. Dávalos escribió:
> Hola,
> Tengo el siguiente detalle, corro un FOR que recorre un browse que
> contiene las tablas previamente cargada de una base de datos, pero
> cuando por algun motivo la tabla en turno tiene un error el cual intento
> manejar con un TRY...CACTH, la siguientes tablas que consulto ya no me
> marcan error pero no me regresa registros y si debería, ya que esta
> consulta es de la estructura de la tabla o sea sus campos, anexo el
> codigo que uso:
> FOR I = 1 TO ::oDBBrowse1:KeyCount()
> ::oDBBrowse1:GoTo(I)
> cId := Alltrim( Str(::oDBBrowse1:aCols[2]:Value) )
> cNombreTabla := ::oDBBrowse1:aCols[3]:Value
> WITH OBJECT oDataSetCampos := TSQLQuery():Create()
> IF :lOpen
> :Close()
> ENDIF
> :oDataSource := AppData:oDataSourceBDTrabajar
> // Esta consulta es la que ya no me manda registros, pero si la ejecuta
> :cSelect := "SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME =
> '" + cNombreTabla + "'"
> :Open()
> TRY
> lCont := .t. // Esta es solo una bandera para indicar si realizo la
> consulta, de lo contrario hace la sigueinte interacción del FOR
> :Gotop()
> msgarray( {"ok", i, :cSelect, lCont, :RecCount() } )
> CATCH
>
> lCont := .F.
> msgarray( {"fallo", i, :cSelect, lCont} )
> END
> IF lCont
> // Registro la estructura de la tabla en turno
> WHILE ! :Eof()
> cNulo := IF( :IS_NULLABLE = 'YES', "1", "0" )
> cLong := IF( Empty(:CHARACTER_MAXIMUM_LENGTH), "", Alltrim( Str(
> :CHARACTER_MAXIMUM_LENGTH ) ) )
> cInsertar := "INSERT INTO ESTRUCTURA_TABLAS (ID_TABLA, CONSECUTIVO,
> CAMPO, LONGITUD, TIPO, NULO) VALUES "
> cInsertar += "(" + cId + ","
> cInsertar += Alltrim( Str(:ORDINAL_POSITION) ) + ","
> cInsertar += "'" + :COLUMN_NAME + "',"
> cInsertar += "'" + :DATA_TYPE + "',"
> cInsertar += "'" + cLong + "','"
> cInsertar += :IS_NULLABLE+ "')"
> MsgInfo( cInsertar, "Insertar" )
> AppData:oDataSourceDocu:Execute( cInsertar, "Error al agregar Registro:
> " + cInsertar )
> :Skip(1)
> END WHILE
> END
> ...
> NEXT
> Alguien tendrá algun tip para que esto no suceda, sería de mucha ayuda?
> Aclaro hasta antes de encontrar esta tabla que si marca error el proceso
> se ejecuta correctamente, o sea que la consulta :cSelect := "SELECT *
> FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '" + cNombreTabla +
> "'", me regresa la consulta con los registros correctos.
> Saludos,
> Mario A. Dávalos
-
- Mensajes: 558
- Registrado: Mar Feb 09, 2010 2:26 pm
Resultado raro en Querys...
Saludos:
Perdona pero creí ver dos interacciones WITH OBJECT así que lo que dije
bórralo, de todas formas probaría cambiando un poco lo que has mandado así:
::oDBBrowse1:GoTo()
FOR I = 1 TO ::oDBBrowse1:KeyCount()
cId := Alltrim( Str(::oDBBrowse1:aCols[2]:Value) )
cNombreTabla := ::oDBBrowse1:aCols[3]:Value
WITH OBJECT oDataSetCampos := TSQLQuery():Create()
IF :lOpen
:Close()
ENDIF
:oDataSource := AppData:oDataSourceBDTrabajar
// Esta consulta es la que ya no me manda registros, pero si
la ejecuta
:cSelect := "SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE
TABLE_NAME = '" + cNombreTabla + "'"
:Open()
TRY
lCont := .t. // Esta es solo una bandera para indicar si
realizo la consulta, de lo contrario hace la sigueinte interacción del FOR
:Gotop()
msgarray( {"ok", i, :cSelect, lCont, :RecCount() } )
CATCH
lCont := .F.
msgarray( {"fallo", i, :cSelect, lCont} )
END
IF lCont
// Registro la estructura de la tabla en turno
WHILE ! :Eof()
cNulo := IF( :IS_NULLABLE = 'YES', "1", "0" )
cLong := IF( Empty(:CHARACTER_MAXIMUM_LENGTH), "",
Alltrim( Str( :CHARACTER_MAXIMUM_LENGTH ) ) )
cInsertar := "INSERT INTO ESTRUCTURA_TABLAS (ID_TABLA,
CONSECUTIVO, CAMPO, LONGITUD, TIPO, NULO) VALUES "
cInsertar += "(" + cId + ","
cInsertar += Alltrim( Str(:ORDINAL_POSITION) ) + ","
cInsertar += "'" + :COLUMN_NAME + "',"
cInsertar += "'" + :DATA_TYPE + "',"
cInsertar += "'" + cLong + "','"
cInsertar += :IS_NULLABLE+ "')"
MsgInfo( cInsertar, "Insertar" )
AppData:oDataSourceDocu:Execute( cInsertar, "Error al
agregar Registro: " + cInsertar )
:Skip(1)
END WHILE
ENDIF
IF i # ::oDBBrowse1:KeyCount()
::oDBBrowse1:GoDown()
ENDIF...
NEXT
José Ramón Castro.
El 08/02/2010 20:17, José Ramón Castro Polinio escribió:
> Saludos:
>
> Simplifiquemos un poco las cosas para saber en donde estamos en cada
> momento por ejemplo
>
> Procesamos el ::oDBBrowse1
>
> WITH OBJECT ::oDBBrowse1
> IF :KeyCount() > 0
> :GoTop()
> FOR i := 1 TO :KeyCount()
> cId := Alltrim( Str(::oDBBrowse1:aCols[2]:Value) )
> cNombreTabla := ::oDBBrowse1:aCols[3]:Value
> ::ProcesarDataset(cld, cNombeTabla) // Creamos un método donde lo
> procesamos
> IF i # :KeyCount()
> :GoDown()
> ENDIF
> NEXT
> ENDIF
> END WITH
>
> Mi consejo es que no utilices dos WiTH OBJECT anudados es mejor crear un
> método nuevo que lo procese. Fijate que el :GoTop() dentro del TRY no
> sabes a donde apunta ya que esa instrucción pertenece a los dos al
> DataSet y al DBBBrowse
>
> José Ramón Castro.
>
> El 08/02/2010 16:28, Mario A. Dávalos escribió:
>> Hola,
>> Tengo el siguiente detalle, corro un FOR que recorre un browse que
>> contiene las tablas previamente cargada de una base de datos, pero
>> cuando por algun motivo la tabla en turno tiene un error el cual intento
>> manejar con un TRY...CACTH, la siguientes tablas que consulto ya no me
>> marcan error pero no me regresa registros y si debería, ya que esta
>> consulta es de la estructura de la tabla o sea sus campos, anexo el
>> codigo que uso:
>> FOR I = 1 TO ::oDBBrowse1:KeyCount()
>> ::oDBBrowse1:GoTo(I)
>> cId := Alltrim( Str(::oDBBrowse1:aCols[2]:Value) )
>> cNombreTabla := ::oDBBrowse1:aCols[3]:Value
>> WITH OBJECT oDataSetCampos := TSQLQuery():Create()
>> IF :lOpen
>> :Close()
>> ENDIF
>> :oDataSource := AppData:oDataSourceBDTrabajar
>> // Esta consulta es la que ya no me manda registros, pero si la ejecuta
>> :cSelect := "SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME =
>> '" + cNombreTabla + "'"
>> :Open()
>> TRY
>> lCont := .t. // Esta es solo una bandera para indicar si realizo la
>> consulta, de lo contrario hace la sigueinte interacción del FOR
>> :Gotop()
>> msgarray( {"ok", i, :cSelect, lCont, :RecCount() } )
>> CATCH
>>
>> lCont := .F.
>> msgarray( {"fallo", i, :cSelect, lCont} )
>> END
>> IF lCont
>> // Registro la estructura de la tabla en turno
>> WHILE ! :Eof()
>> cNulo := IF( :IS_NULLABLE = 'YES', "1", "0" )
>> cLong := IF( Empty(:CHARACTER_MAXIMUM_LENGTH), "", Alltrim( Str(
>> :CHARACTER_MAXIMUM_LENGTH ) ) )
>> cInsertar := "INSERT INTO ESTRUCTURA_TABLAS (ID_TABLA, CONSECUTIVO,
>> CAMPO, LONGITUD, TIPO, NULO) VALUES "
>> cInsertar += "(" + cId + ","
>> cInsertar += Alltrim( Str(:ORDINAL_POSITION) ) + ","
>> cInsertar += "'" + :COLUMN_NAME + "',"
>> cInsertar += "'" + :DATA_TYPE + "',"
>> cInsertar += "'" + cLong + "','"
>> cInsertar += :IS_NULLABLE+ "')"
>> MsgInfo( cInsertar, "Insertar" )
>> AppData:oDataSourceDocu:Execute( cInsertar, "Error al agregar Registro:
>> " + cInsertar )
>> :Skip(1)
>> END WHILE
>> END
>> ...
>> NEXT
>> Alguien tendrá algun tip para que esto no suceda, sería de mucha ayuda?
>> Aclaro hasta antes de encontrar esta tabla que si marca error el proceso
>> se ejecuta correctamente, o sea que la consulta :cSelect := "SELECT *
>> FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '" + cNombreTabla +
>> "'", me regresa la consulta con los registros correctos.
>> Saludos,
>> Mario A. Dávalos
Perdona pero creí ver dos interacciones WITH OBJECT así que lo que dije
bórralo, de todas formas probaría cambiando un poco lo que has mandado así:
::oDBBrowse1:GoTo()
FOR I = 1 TO ::oDBBrowse1:KeyCount()
cId := Alltrim( Str(::oDBBrowse1:aCols[2]:Value) )
cNombreTabla := ::oDBBrowse1:aCols[3]:Value
WITH OBJECT oDataSetCampos := TSQLQuery():Create()
IF :lOpen
:Close()
ENDIF
:oDataSource := AppData:oDataSourceBDTrabajar
// Esta consulta es la que ya no me manda registros, pero si
la ejecuta
:cSelect := "SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE
TABLE_NAME = '" + cNombreTabla + "'"
:Open()
TRY
lCont := .t. // Esta es solo una bandera para indicar si
realizo la consulta, de lo contrario hace la sigueinte interacción del FOR
:Gotop()
msgarray( {"ok", i, :cSelect, lCont, :RecCount() } )
CATCH
lCont := .F.
msgarray( {"fallo", i, :cSelect, lCont} )
END
IF lCont
// Registro la estructura de la tabla en turno
WHILE ! :Eof()
cNulo := IF( :IS_NULLABLE = 'YES', "1", "0" )
cLong := IF( Empty(:CHARACTER_MAXIMUM_LENGTH), "",
Alltrim( Str( :CHARACTER_MAXIMUM_LENGTH ) ) )
cInsertar := "INSERT INTO ESTRUCTURA_TABLAS (ID_TABLA,
CONSECUTIVO, CAMPO, LONGITUD, TIPO, NULO) VALUES "
cInsertar += "(" + cId + ","
cInsertar += Alltrim( Str(:ORDINAL_POSITION) ) + ","
cInsertar += "'" + :COLUMN_NAME + "',"
cInsertar += "'" + :DATA_TYPE + "',"
cInsertar += "'" + cLong + "','"
cInsertar += :IS_NULLABLE+ "')"
MsgInfo( cInsertar, "Insertar" )
AppData:oDataSourceDocu:Execute( cInsertar, "Error al
agregar Registro: " + cInsertar )
:Skip(1)
END WHILE
ENDIF
IF i # ::oDBBrowse1:KeyCount()
::oDBBrowse1:GoDown()
ENDIF...
NEXT
José Ramón Castro.
El 08/02/2010 20:17, José Ramón Castro Polinio escribió:
> Saludos:
>
> Simplifiquemos un poco las cosas para saber en donde estamos en cada
> momento por ejemplo
>
> Procesamos el ::oDBBrowse1
>
> WITH OBJECT ::oDBBrowse1
> IF :KeyCount() > 0
> :GoTop()
> FOR i := 1 TO :KeyCount()
> cId := Alltrim( Str(::oDBBrowse1:aCols[2]:Value) )
> cNombreTabla := ::oDBBrowse1:aCols[3]:Value
> ::ProcesarDataset(cld, cNombeTabla) // Creamos un método donde lo
> procesamos
> IF i # :KeyCount()
> :GoDown()
> ENDIF
> NEXT
> ENDIF
> END WITH
>
> Mi consejo es que no utilices dos WiTH OBJECT anudados es mejor crear un
> método nuevo que lo procese. Fijate que el :GoTop() dentro del TRY no
> sabes a donde apunta ya que esa instrucción pertenece a los dos al
> DataSet y al DBBBrowse
>
> José Ramón Castro.
>
> El 08/02/2010 16:28, Mario A. Dávalos escribió:
>> Hola,
>> Tengo el siguiente detalle, corro un FOR que recorre un browse que
>> contiene las tablas previamente cargada de una base de datos, pero
>> cuando por algun motivo la tabla en turno tiene un error el cual intento
>> manejar con un TRY...CACTH, la siguientes tablas que consulto ya no me
>> marcan error pero no me regresa registros y si debería, ya que esta
>> consulta es de la estructura de la tabla o sea sus campos, anexo el
>> codigo que uso:
>> FOR I = 1 TO ::oDBBrowse1:KeyCount()
>> ::oDBBrowse1:GoTo(I)
>> cId := Alltrim( Str(::oDBBrowse1:aCols[2]:Value) )
>> cNombreTabla := ::oDBBrowse1:aCols[3]:Value
>> WITH OBJECT oDataSetCampos := TSQLQuery():Create()
>> IF :lOpen
>> :Close()
>> ENDIF
>> :oDataSource := AppData:oDataSourceBDTrabajar
>> // Esta consulta es la que ya no me manda registros, pero si la ejecuta
>> :cSelect := "SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME =
>> '" + cNombreTabla + "'"
>> :Open()
>> TRY
>> lCont := .t. // Esta es solo una bandera para indicar si realizo la
>> consulta, de lo contrario hace la sigueinte interacción del FOR
>> :Gotop()
>> msgarray( {"ok", i, :cSelect, lCont, :RecCount() } )
>> CATCH
>>
>> lCont := .F.
>> msgarray( {"fallo", i, :cSelect, lCont} )
>> END
>> IF lCont
>> // Registro la estructura de la tabla en turno
>> WHILE ! :Eof()
>> cNulo := IF( :IS_NULLABLE = 'YES', "1", "0" )
>> cLong := IF( Empty(:CHARACTER_MAXIMUM_LENGTH), "", Alltrim( Str(
>> :CHARACTER_MAXIMUM_LENGTH ) ) )
>> cInsertar := "INSERT INTO ESTRUCTURA_TABLAS (ID_TABLA, CONSECUTIVO,
>> CAMPO, LONGITUD, TIPO, NULO) VALUES "
>> cInsertar += "(" + cId + ","
>> cInsertar += Alltrim( Str(:ORDINAL_POSITION) ) + ","
>> cInsertar += "'" + :COLUMN_NAME + "',"
>> cInsertar += "'" + :DATA_TYPE + "',"
>> cInsertar += "'" + cLong + "','"
>> cInsertar += :IS_NULLABLE+ "')"
>> MsgInfo( cInsertar, "Insertar" )
>> AppData:oDataSourceDocu:Execute( cInsertar, "Error al agregar Registro:
>> " + cInsertar )
>> :Skip(1)
>> END WHILE
>> END
>> ...
>> NEXT
>> Alguien tendrá algun tip para que esto no suceda, sería de mucha ayuda?
>> Aclaro hasta antes de encontrar esta tabla que si marca error el proceso
>> se ejecuta correctamente, o sea que la consulta :cSelect := "SELECT *
>> FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '" + cNombreTabla +
>> "'", me regresa la consulta con los registros correctos.
>> Saludos,
>> Mario A. Dávalos
-
- Mensajes: 190
- Registrado: Mar Ago 19, 2008 12:38 am
Resultado raro en Querys...
José, gracias por tu comentario, de hecho así lo tengo en la clausula FOR:
::oDBBrowse1:Gotop()
FOR I = 1 TO ::oDBBrowse1:KeyCount()
solo que lo simplique al momento que encuentra la Table con error.
Pero voy a intentar cambiar la estructura a ver si logro algo.
Saludos,
"José Ramón Castro Polinio" <jrcpoli-quitarpara_envio]"@terra.es> escribió
en el mensaje news:4b706ebc$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
> Saludos:
>
> Perdona pero creí ver dos interacciones WITH OBJECT así que lo que dije
> bórralo, de todas formas probaría cambiando un poco lo que has mandado
> así:
>
> ::oDBBrowse1:GoTo()
>
> FOR I = 1 TO ::oDBBrowse1:KeyCount()
>
> cId := Alltrim( Str(::oDBBrowse1:aCols[2]:Value) )
> cNombreTabla := ::oDBBrowse1:aCols[3]:Value
>
> WITH OBJECT oDataSetCampos := TSQLQuery():Create()
>
> IF :lOpen
> :Close()
> ENDIF
>
> :oDataSource := AppData:oDataSourceBDTrabajar
>
> // Esta consulta es la que ya no me manda registros, pero si la
> ejecuta
> :cSelect := "SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE
> TABLE_NAME = '" + cNombreTabla + "'"
> :Open()
>
> TRY
>
>
> lCont := .t. // Esta es solo una bandera para indicar si
> realizo la consulta, de lo contrario hace la sigueinte interacción del FOR
> :Gotop()
>
> msgarray( {"ok", i, :cSelect, lCont, :RecCount() } )
> CATCH
>
> lCont := .F.
> msgarray( {"fallo", i, :cSelect, lCont} )
>
> END
>
> IF lCont
>
> // Registro la estructura de la tabla en turno
>
> WHILE ! :Eof()
>
> cNulo := IF( :IS_NULLABLE = 'YES', "1", "0" )
> cLong := IF( Empty(:CHARACTER_MAXIMUM_LENGTH), "",
> Alltrim( Str( :CHARACTER_MAXIMUM_LENGTH ) ) )
>
> cInsertar := "INSERT INTO ESTRUCTURA_TABLAS (ID_TABLA,
> CONSECUTIVO, CAMPO, LONGITUD, TIPO, NULO) VALUES "
> cInsertar += "(" + cId + ","
> cInsertar += Alltrim( Str(:ORDINAL_POSITION) ) + ","
> cInsertar += "'" + :COLUMN_NAME + "',"
> cInsertar += "'" + :DATA_TYPE + "',"
> cInsertar += "'" + cLong + "','"
> cInsertar += :IS_NULLABLE+ "')"
>
> MsgInfo( cInsertar, "Insertar" )
>
> AppData:oDataSourceDocu:Execute( cInsertar, "Error al
> agregar Registro: " + cInsertar )
>
> :Skip(1)
>
> END WHILE
>
> ENDIF
>
> IF i # ::oDBBrowse1:KeyCount()
> ::oDBBrowse1:GoDown()
> ENDIF...
>
> NEXT
>
> José Ramón Castro.
>
> El 08/02/2010 20:17, José Ramón Castro Polinio escribió:
>> Saludos:
>>
>> Simplifiquemos un poco las cosas para saber en donde estamos en cada
>> momento por ejemplo
>>
>> Procesamos el ::oDBBrowse1
>>
>> WITH OBJECT ::oDBBrowse1
>> IF :KeyCount() > 0
>> :GoTop()
>> FOR i := 1 TO :KeyCount()
>> cId := Alltrim( Str(::oDBBrowse1:aCols[2]:Value) )
>> cNombreTabla := ::oDBBrowse1:aCols[3]:Value
>> ::ProcesarDataset(cld, cNombeTabla) // Creamos un método donde lo
>> procesamos
>> IF i # :KeyCount()
>> :GoDown()
>> ENDIF
>> NEXT
>> ENDIF
>> END WITH
>>
>> Mi consejo es que no utilices dos WiTH OBJECT anudados es mejor crear un
>> método nuevo que lo procese. Fijate que el :GoTop() dentro del TRY no
>> sabes a donde apunta ya que esa instrucción pertenece a los dos al
>> DataSet y al DBBBrowse
>>
>> José Ramón Castro.
>>
>> El 08/02/2010 16:28, Mario A. Dávalos escribió:
>>> Hola,
>>> Tengo el siguiente detalle, corro un FOR que recorre un browse que
>>> contiene las tablas previamente cargada de una base de datos, pero
>>> cuando por algun motivo la tabla en turno tiene un error el cual intento
>>> manejar con un TRY...CACTH, la siguientes tablas que consulto ya no me
>>> marcan error pero no me regresa registros y si debería, ya que esta
>>> consulta es de la estructura de la tabla o sea sus campos, anexo el
>>> codigo que uso:
>>> FOR I = 1 TO ::oDBBrowse1:KeyCount()
>>> ::oDBBrowse1:GoTo(I)
>>> cId := Alltrim( Str(::oDBBrowse1:aCols[2]:Value) )
>>> cNombreTabla := ::oDBBrowse1:aCols[3]:Value
>>> WITH OBJECT oDataSetCampos := TSQLQuery():Create()
>>> IF :lOpen
>>> :Close()
>>> ENDIF
>>> :oDataSource := AppData:oDataSourceBDTrabajar
>>> // Esta consulta es la que ya no me manda registros, pero si la ejecuta
>>> :cSelect := "SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME =
>>> '" + cNombreTabla + "'"
>>> :Open()
>>> TRY
>>> lCont := .t. // Esta es solo una bandera para indicar si realizo la
>>> consulta, de lo contrario hace la sigueinte interacción del FOR
>>> :Gotop()
>>> msgarray( {"ok", i, :cSelect, lCont, :RecCount() } )
>>> CATCH
>>>
>>> lCont := .F.
>>> msgarray( {"fallo", i, :cSelect, lCont} )
>>> END
>>> IF lCont
>>> // Registro la estructura de la tabla en turno
>>> WHILE ! :Eof()
>>> cNulo := IF( :IS_NULLABLE = 'YES', "1", "0" )
>>> cLong := IF( Empty(:CHARACTER_MAXIMUM_LENGTH), "", Alltrim( Str(
>>> :CHARACTER_MAXIMUM_LENGTH ) ) )
>>> cInsertar := "INSERT INTO ESTRUCTURA_TABLAS (ID_TABLA, CONSECUTIVO,
>>> CAMPO, LONGITUD, TIPO, NULO) VALUES "
>>> cInsertar += "(" + cId + ","
>>> cInsertar += Alltrim( Str(:ORDINAL_POSITION) ) + ","
>>> cInsertar += "'" + :COLUMN_NAME + "',"
>>> cInsertar += "'" + :DATA_TYPE + "',"
>>> cInsertar += "'" + cLong + "','"
>>> cInsertar += :IS_NULLABLE+ "')"
>>> MsgInfo( cInsertar, "Insertar" )
>>> AppData:oDataSourceDocu:Execute( cInsertar, "Error al agregar Registro:
>>> " + cInsertar )
>>> :Skip(1)
>>> END WHILE
>>> END
>>> ...
>>> NEXT
>>> Alguien tendrá algun tip para que esto no suceda, sería de mucha ayuda?
>>> Aclaro hasta antes de encontrar esta tabla que si marca error el proceso
>>> se ejecuta correctamente, o sea que la consulta :cSelect := "SELECT *
>>> FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '" + cNombreTabla +
>>> "'", me regresa la consulta con los registros correctos.
>>> Saludos,
>>> Mario A. Dávalos
::oDBBrowse1:Gotop()
FOR I = 1 TO ::oDBBrowse1:KeyCount()
solo que lo simplique al momento que encuentra la Table con error.
Pero voy a intentar cambiar la estructura a ver si logro algo.
Saludos,
"José Ramón Castro Polinio" <jrcpoli-quitarpara_envio]"@terra.es> escribió
en el mensaje news:4b706ebc$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
> Saludos:
>
> Perdona pero creí ver dos interacciones WITH OBJECT así que lo que dije
> bórralo, de todas formas probaría cambiando un poco lo que has mandado
> así:
>
> ::oDBBrowse1:GoTo()
>
> FOR I = 1 TO ::oDBBrowse1:KeyCount()
>
> cId := Alltrim( Str(::oDBBrowse1:aCols[2]:Value) )
> cNombreTabla := ::oDBBrowse1:aCols[3]:Value
>
> WITH OBJECT oDataSetCampos := TSQLQuery():Create()
>
> IF :lOpen
> :Close()
> ENDIF
>
> :oDataSource := AppData:oDataSourceBDTrabajar
>
> // Esta consulta es la que ya no me manda registros, pero si la
> ejecuta
> :cSelect := "SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE
> TABLE_NAME = '" + cNombreTabla + "'"
> :Open()
>
> TRY
>
>
> lCont := .t. // Esta es solo una bandera para indicar si
> realizo la consulta, de lo contrario hace la sigueinte interacción del FOR
> :Gotop()
>
> msgarray( {"ok", i, :cSelect, lCont, :RecCount() } )
> CATCH
>
> lCont := .F.
> msgarray( {"fallo", i, :cSelect, lCont} )
>
> END
>
> IF lCont
>
> // Registro la estructura de la tabla en turno
>
> WHILE ! :Eof()
>
> cNulo := IF( :IS_NULLABLE = 'YES', "1", "0" )
> cLong := IF( Empty(:CHARACTER_MAXIMUM_LENGTH), "",
> Alltrim( Str( :CHARACTER_MAXIMUM_LENGTH ) ) )
>
> cInsertar := "INSERT INTO ESTRUCTURA_TABLAS (ID_TABLA,
> CONSECUTIVO, CAMPO, LONGITUD, TIPO, NULO) VALUES "
> cInsertar += "(" + cId + ","
> cInsertar += Alltrim( Str(:ORDINAL_POSITION) ) + ","
> cInsertar += "'" + :COLUMN_NAME + "',"
> cInsertar += "'" + :DATA_TYPE + "',"
> cInsertar += "'" + cLong + "','"
> cInsertar += :IS_NULLABLE+ "')"
>
> MsgInfo( cInsertar, "Insertar" )
>
> AppData:oDataSourceDocu:Execute( cInsertar, "Error al
> agregar Registro: " + cInsertar )
>
> :Skip(1)
>
> END WHILE
>
> ENDIF
>
> IF i # ::oDBBrowse1:KeyCount()
> ::oDBBrowse1:GoDown()
> ENDIF...
>
> NEXT
>
> José Ramón Castro.
>
> El 08/02/2010 20:17, José Ramón Castro Polinio escribió:
>> Saludos:
>>
>> Simplifiquemos un poco las cosas para saber en donde estamos en cada
>> momento por ejemplo
>>
>> Procesamos el ::oDBBrowse1
>>
>> WITH OBJECT ::oDBBrowse1
>> IF :KeyCount() > 0
>> :GoTop()
>> FOR i := 1 TO :KeyCount()
>> cId := Alltrim( Str(::oDBBrowse1:aCols[2]:Value) )
>> cNombreTabla := ::oDBBrowse1:aCols[3]:Value
>> ::ProcesarDataset(cld, cNombeTabla) // Creamos un método donde lo
>> procesamos
>> IF i # :KeyCount()
>> :GoDown()
>> ENDIF
>> NEXT
>> ENDIF
>> END WITH
>>
>> Mi consejo es que no utilices dos WiTH OBJECT anudados es mejor crear un
>> método nuevo que lo procese. Fijate que el :GoTop() dentro del TRY no
>> sabes a donde apunta ya que esa instrucción pertenece a los dos al
>> DataSet y al DBBBrowse
>>
>> José Ramón Castro.
>>
>> El 08/02/2010 16:28, Mario A. Dávalos escribió:
>>> Hola,
>>> Tengo el siguiente detalle, corro un FOR que recorre un browse que
>>> contiene las tablas previamente cargada de una base de datos, pero
>>> cuando por algun motivo la tabla en turno tiene un error el cual intento
>>> manejar con un TRY...CACTH, la siguientes tablas que consulto ya no me
>>> marcan error pero no me regresa registros y si debería, ya que esta
>>> consulta es de la estructura de la tabla o sea sus campos, anexo el
>>> codigo que uso:
>>> FOR I = 1 TO ::oDBBrowse1:KeyCount()
>>> ::oDBBrowse1:GoTo(I)
>>> cId := Alltrim( Str(::oDBBrowse1:aCols[2]:Value) )
>>> cNombreTabla := ::oDBBrowse1:aCols[3]:Value
>>> WITH OBJECT oDataSetCampos := TSQLQuery():Create()
>>> IF :lOpen
>>> :Close()
>>> ENDIF
>>> :oDataSource := AppData:oDataSourceBDTrabajar
>>> // Esta consulta es la que ya no me manda registros, pero si la ejecuta
>>> :cSelect := "SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME =
>>> '" + cNombreTabla + "'"
>>> :Open()
>>> TRY
>>> lCont := .t. // Esta es solo una bandera para indicar si realizo la
>>> consulta, de lo contrario hace la sigueinte interacción del FOR
>>> :Gotop()
>>> msgarray( {"ok", i, :cSelect, lCont, :RecCount() } )
>>> CATCH
>>>
>>> lCont := .F.
>>> msgarray( {"fallo", i, :cSelect, lCont} )
>>> END
>>> IF lCont
>>> // Registro la estructura de la tabla en turno
>>> WHILE ! :Eof()
>>> cNulo := IF( :IS_NULLABLE = 'YES', "1", "0" )
>>> cLong := IF( Empty(:CHARACTER_MAXIMUM_LENGTH), "", Alltrim( Str(
>>> :CHARACTER_MAXIMUM_LENGTH ) ) )
>>> cInsertar := "INSERT INTO ESTRUCTURA_TABLAS (ID_TABLA, CONSECUTIVO,
>>> CAMPO, LONGITUD, TIPO, NULO) VALUES "
>>> cInsertar += "(" + cId + ","
>>> cInsertar += Alltrim( Str(:ORDINAL_POSITION) ) + ","
>>> cInsertar += "'" + :COLUMN_NAME + "',"
>>> cInsertar += "'" + :DATA_TYPE + "',"
>>> cInsertar += "'" + cLong + "','"
>>> cInsertar += :IS_NULLABLE+ "')"
>>> MsgInfo( cInsertar, "Insertar" )
>>> AppData:oDataSourceDocu:Execute( cInsertar, "Error al agregar Registro:
>>> " + cInsertar )
>>> :Skip(1)
>>> END WHILE
>>> END
>>> ...
>>> NEXT
>>> Alguien tendrá algun tip para que esto no suceda, sería de mucha ayuda?
>>> Aclaro hasta antes de encontrar esta tabla que si marca error el proceso
>>> se ejecuta correctamente, o sea que la consulta :cSelect := "SELECT *
>>> FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '" + cNombreTabla +
>>> "'", me regresa la consulta con los registros correctos.
>>> Saludos,
>>> Mario A. Dávalos