Page 1 of 1

SQLADS - Que hago mal (Solucionado)

PostPosted: Mon May 06, 2013 2:55 pm
by MarioG
SQLADS me supera!
Tengo el siguiente código:
Code: Select all  Expand view
  if !"hConnect" IN h0
      AdsConnect(  ::oMG:hIni["CAMINOS"]["bdatos"]+"\local", ::oMG:hIni["ADS"]["srvtipo"] )
      h0:hConnect:= AdsConnection()
   else
      if Select( "SQLSele" ) > 0
         SQLSele->( DbCloseArea() )
      end
   end
   DBSelectArea( 0 )

   if !ADSCreateSQLStatement( "SQLSele", ADS_CDX, h0:hConnect )
      MsgStop( "Fallo en la conexión a Tablas [Error Nº: "+cValTochar( AdsGetLastError() ), "Reintente..." )
      return( nil )
   end

   if !ADSExecuteSQLDirect( "SELECT Count(*) FROM BDSGC36 WHERE FSele01=.T." )
      MsgStop( "Fallo en lectura de Tabla Adicional de Articulos", "Reintente..." )
      SQLSele->( DbCloseArea() )
   else
      if SQLSele->Expr == 0
         SQLSele->( DbCloseArea() )
         ADSCreateSQLStatement( "SQLSele", ADS_CDX )
         ADSExecuteSQLDirect( 'INSERT INTO BDSGC36 SELECT FArt02 FROM "'+(::oMG:hIni["CAMINOS"]["bdatos"])+'\BDSGC01"' )
      end
   end
 

El problema es que la sentencia:
'INSERT INTO BDSGC36 SELECT FArt02 FROM "'+(::oMG:hIni["CAMINOS"]["bdatos"])+'\BDSGC01"'

no se ejecuta. Y, probada desde ARC si se ejecuta
Que está mal en mi código?
muchas gracias

Re: SQLADS - Que hago mal

PostPosted: Mon May 06, 2013 7:06 pm
by RSalazarU
Hola Mario:

creo que tienes varios errores:

Code: Select all  Expand view
SELECT Count(*) FROM BDSGC36 WHERE FSele01=.T.


creo que deberia ser:
Code: Select all  Expand view

SELECT Count(*) FROM BDSGC36 WHERE FSele01=TRUE


y .. no se entiende que deberia hacer la siguiente instruccion:

Code: Select all  Expand view
'INSERT INTO BDSGC36 SELECT FArt02 FROM "'+(::oMG:hIni["CAMINOS"]["bdatos"])+'\BDSGC01"'


* despues del FROM solo deberia estar el nombre de la tabla.
* que es FArt02 ???
* Como estas insertando de una tabla a otra, la estructura de las dos deberia ser similar.
* creo que deberia ser algo asi como:

Code: Select all  Expand view

'INSERT INTO BDSGC36 SELECT * FROM BDSGC01'
 

Atentamente:

Rolando.
Cochabamba, Bolivia.

Re: SQLADS - Que hago mal

PostPosted: Tue May 07, 2013 12:10 pm
by MarioG
Rolando; gracias por tu tiempo
Respondo:
SELECT Count(*) FROM BDSGC36 WHERE FSele01=.T.

Esto es correcto para ADSSQL lo hago en ARC, ademas de en mi código y me devuelve lo esperado y, como bien dices, también lo hace con TRUE

luego,
'INSERT INTO BDSGC36 SELECT FArt02 FROM "'+(::oMG:hIni["CAMINOS"]["bdatos"])+'\BDSGC01"'

es lo mismo que hacer:
Code: Select all  Expand view
INSERT INTO BDSGC36 SELECT FArt02 FROM "d:\MiApp\bDatos\BDSGC01"

Fart02 es el campo que selecciono de BDSGC01 para insertar en BDSGC36
Esto también, al menos en ARC, funciona. Probablemente no en código, aunque no me devuelve ningún error

Re: SQLADS - Que hago mal

PostPosted: Tue May 07, 2013 2:06 pm
by Patricio Avalos Aguirre
Hola

Al parecer esta correcto, ahora habria que ver que error te esta dando ADS

coloca esta instruccion despues de AdsExecuteSqlDirect

Code: Select all  Expand view
MsgInfo("error AdsExecuteSqlDirect(cSql)" + CRLF + "Error:"+cValtochar( AdsGetLastError() ) )


y veamos que error esta lanzando

Re: SQLADS - Que hago mal

PostPosted: Tue May 07, 2013 3:17 pm
by MarioG
Patricio;
El numero de error es 7200

Re: SQLADS - Que hago mal

PostPosted: Wed May 08, 2013 1:40 pm
by Patricio Avalos Aguirre
Mario

el problema es la consulta segun el error
Problem: The problem might be caused by an SQL statement error or some other limitation in the way Advantage processes SQL statements.

lo que debieras hacer es ir paso a paso a ver que pasa

1.- hacer esta consulta a ver que retorna

Code: Select all  Expand view
cSql := "SELECT FArt02 FROM " +::oMG:hIni["CAMINOS"]["bdatos"] + "\BDSGC01"

if SqlEjecute( cSql )
  //error
endif

Re: SQLADS - Que hago mal

PostPosted: Wed May 08, 2013 2:54 pm
by MarioG
Patricio; gracias por tu tiempo
El aislar me ayudó a encontrar el error!

Estaba mal escrita la sentencia
'INSERT INTO BDSGC36 SELECT FArt02 FROM "'+(::oMG:hIni["CAMINOS"]["bdatos"])+'\BDSGC01"'

correcta:
Code: Select all  Expand view
'INSERT INTO Bdsgc36 (FArt01) SELECT FArt02 FROM "'+(::oMG:hIni["CAMINOS"]["bdatos"])+'\BDSGC01"'


Ahora, dos consultas mas:
AdsGetLastError() retorna 5018, que es?
Como se consigue la tabla de errores?. Tengo ADSERROR.hlp (aunque solo funciona en XP), pero interpreto que no se refiere a los errores SQLADS

gracias nuevamente

Re: SQLADS - Que hago mal

PostPosted: Wed May 08, 2013 10:25 pm
by Patricio Avalos Aguirre
Hola Mario

instala Advantage Data Architect, que es como el DBU

http://devzone.advantagedatabase.com/dz/content.aspx?key=20&Release=16

este te creara un grupo ahi busca Advantage Help File

en la ayuda busca Advantage Error Guide

Re: SQLADS - Que hago mal

PostPosted: Wed May 08, 2013 10:45 pm
by MarioG
Gracias Patricio
Sirmpre estuvo ahí!!! (nunca inspeccione la carpeta) :oops: