Pregunta para el amigo Daniel

Pregunta para el amigo Daniel

Postby ruben Dario » Thu Feb 09, 2012 3:25 pm

Saludos

Estoy haciendo un reporte con fastrepor y Tdolhin

tengo cuatro Querin , me genera un error al hacer un filtro

No se que error tengo este es el trozo de codigo para Tdolhin.

El Error que da es
Mysql/1052 Column 'planta' in where clusula in ambiguos
Te anexo el Codigo de Ado que me funciona , como seria para Tdolhin en donde estoy cometiendo el error

Code: Select all  Expand view

       If ! oQry:Eof()
          cFiltro := " planta = '"+alltrim(oQry:planta)+"' "
          cFiltro += " AND codprod = '"+alltrim(oQry:codprod)+"' "
          cFiltro += " AND verprod = "+alltrim(str(oQry:verprod))
         If ! oQry1:Eof()  > 0
            oQry1:SetWhere( cFiltro, .T. )
         Endif
         If ! oQry2:Eof()  > 0
            oQry2:SetWhere( cFiltro, .T. )
         Endif
         If ! oQry3:Eof()  > 0
            oQry3:SetWhere( cFiltro, .T. )
         Endif
      Else
       Endif

 



Con Ado es asi y me funciona

Code: Select all  Expand view

      If ! oQry:Eof()
         cFiltro := " planta = '"+alltrim(oQry:Fields("planta"):Value)+"' "
         cFiltro += " AND codprod = '"+alltrim(oQry:Fields("codprod"):Value)+"' "
         cFiltro += " AND verprod = "+alltrim(str(oQry:Fields("verprod"):Value))
        If oQry1:RecordCount() > 0 //! oQry1:Eof()
          oQry1:Filter := 0
          oQry1:MoveFirst()
          oQry1:Filter := ( cFiltro )
        Endif
        If oQry2:RecordCount() > 0 //! oQry2:Eof()
           oQry2:Filter := 0
           oQry2:MoveFirst()
           oQry2:Filter := ( cFiltro )
        Endif
        If oQry3:RecordCount() > 0 //! oQry3:Eof()
           oQry3:Filter := 0
           oQry3:MoveFirst()
           oQry3:Filter := ( cFiltro )
        Endif
     Else
     Endif

 
Ruben Dario Gonzalez
Cali-Colombia
rubendariogd@hotmail.com - rubendariogd@gmail.com
User avatar
ruben Dario
 
Posts: 1061
Joined: Thu Sep 27, 2007 3:47 pm
Location: Colombia

Re: Pregunta para el amigo Daniel

Postby Daniel Garcia-Gil » Thu Feb 09, 2012 5:50 pm

Hola

puedes copiar aqui el query original que quieres tratar de cambiar, si es un query complejo, es decir, que involucra mas de una tabla, hay una tecnica diferente y bastante facil de usar
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Re: Pregunta para el amigo Daniel

Postby ruben Dario » Thu Feb 09, 2012 7:07 pm

Gracias Daniel

Te copio todo el codigo para fastreport , este mismo me funciona con ADO , el problema que tengo con la relacion de tablas uso cuatro. en PROCEDURE DETE_PROD es donde tengo el problema

La relacion entre tablas sewria oQry:planta , oQry:codprod , oQry:verprod este es el problema que tengo


Te cuento ya pase todo mi proyecto a Tdolphin genial su clase.


Code: Select all  Expand view


  cSelect := "SELECT A1.codcia,A1.tipdoc,A1.codprov,A1.codprod,A1.verprod,A1.consec,A1.simbolo,A1.referencia "+;
"  FROM product AS A1 ORDER BY A1.codprov ASC, A1.codprod ASC, A1.verprod ASC "

oDbf := oApp:oServer:Query(cSelect)

cSelect := "SELECT A1.codcia,A1.planta,A1.codprod,A1.verprod,A1.tippro,A1.hor_cor,A1.hor_ali,A1.mts_min  "+;
"  FROM prodtiem AS A1 ORDER BY A1.planta ASC,A1.codprod ASC,A1.verprod ASC, A1.tippro ASC "

oDbf01:= oApp:oServer:Query(cSelect)

cSelect := "SELECT A1.codcia,A1.tipdoc,A1.planta,A1.codprov,A1.codprod,A1.verprod,A2.tippro,A2.mezc,A2.codmat,A2.tipo "+;
"FROM product AS A1  ORDER BY A1.planta ASC,A1.codprod ASC,A2.mezc ASC "
oDbf02 := oApp:oServer:Query(cSelect)

cSelect:= "SELECT A1.codcia,A1.tipdoc,A1.planta,A1.numorden,A1.codprod,A1.verprod,A1.codprov,A1.consec,A1.ordcom,"+;
"A21.nombre AS nombre_tipped,A22.nombre AS nombre_gmat1,A23.nombre AS nombre_mat1,A23.nombre1 AS nombre_mat2c "+;
"FROM pedidos AS A1 "+;

oDbf03 := oApp:oServer:Query(cSelect)


oFrP := frReportManager():new()

aBlock := {|| DETE_PROD( oDbf, oDbf01, oDbf02, oDbf03 ) }

MAKEDATASET( oFrP, "Productos", oDbf,aBlock )
MAKEDATASET( oFrP, "Materiales", oDbf01) //, bBlock
MAKEDATASET( oFrP, "Tiempos", oDbf02 )
MAKEDATASET( oFrP, "Historia", oDbf03)

def_Varfastr(oFrP,::DGRUPO,"rep_pxp050_1a")

def_Desigfasr(oFrP)


*-------

Static Function def_Varfastr(oFrP,DGRUPO,LMOD)
with object oFrP
:LoadLangRes( "Spanish.xml" )
:SetIcon(9001)
:AddVariable( "EMPRESA", "NOMBRE", "'"+oApp:x_NOMEMP+"'" )
:AddVariable( "EMPRESA", "SINONIMO", "'"+oApp:x_SIGLA+"'" )
:AddVariable( "EMPRESA", "DIRECCION", "'"+oApp:x_DIREMP+"'" )
:AddVariable( "EMPRESA", "CIUDAD", "'"+oApp:x_CIUEMP+"'" )
:AddVariable( "EMPRESA", "DEPTO", "'"+oApp:x_DEPEMP+"'" )

End


Return Nil

//--------------------------------------------//
function mysqlfield1( oQry ) // coloca las colunas separada por ; Eje codprov;nombre,ciud
Local clField := ""
local nLen, x

nLen := oQry:FCount()
for x := 1 to oQry:FCount()
cLfield := cLfield + oQry:FieldName( x ) + iif( x < nLen ,";","" )
Next
Return cLfield


//--------------------------------------------------------------------------/

PROCEDURE MAKEDATASET( oFr, cAlias, oQry, bRelation )
*--
LOCAL nHeader
LOCAL cHeader := ''
*--
DEFAULT bRelation := { || NIL }
*--
cHeader := mysqlfield1( oQry )

oFr:SetUserDataSet(cAlias, cHeader,;
{||oQry:Skip(), EVAL( bRelation ) },;
{||oQry:Skip(-1), EVAL( bRelation ) }, ;
{||oQry:GoTop(), EVAL( bRelation ) }, ;
{||oQry:EOF() },;
{| cField | bs_mostda12(oQry,cField," "," ") } )

*--


RETURN



******************************************************************************************


STATIC PROCEDURE DETE_PROD( oQry, oQry1, oQry2, oQry3 ) // aVar )
*--
LOCAL cFiltro,cSele12
If ! oQry:Eof()
cFiltro := " planta = '"+alltrim(oQry:planta)+"' "
cFiltro += " AND codprod = '"+alltrim(oQry:codprod)+"' "
cFiltro += " AND verprod = "+alltrim(str(oQry:verprod))
If ! oQry1:Eof() > 0
oQry1:SetWhere( cFiltro, .T. )
Endif
If ! oQry2:Eof() > 0
oQry2:SetWhere( cFiltro, .T. )
Endif
If ! oQry3:Eof() > 0
oQry3:SetWhere( cFiltro, .T. )
Endif
Else
Endif


RETURN
*--

 
Last edited by ruben Dario on Thu Feb 09, 2012 10:38 pm, edited 1 time in total.
Ruben Dario Gonzalez
Cali-Colombia
rubendariogd@hotmail.com - rubendariogd@gmail.com
User avatar
ruben Dario
 
Posts: 1061
Joined: Thu Sep 27, 2007 3:47 pm
Location: Colombia

Re: Pregunta para el amigo Daniel

Postby Daniel Garcia-Gil » Thu Feb 09, 2012 10:17 pm

Hola

es mucha informacion que asimilar, mas facil es explicarte la tecnica

ya que construyes la sentencia en una variable y despues lanzas el query oDbf := oApp:oServer:Query(cSelect)
puedes crear la sentencia de esta forma

cSelect = "SELECT * FROM table WHERE [WHERE]"
despues sustituimos [WHERE] por lo que queramos.. ejemplo

cSelect = StrTran( cSelect, "[WHERE]", "table.id=1" )

creo que este simple ejemplo muestra perfectamente la tecnica, espero te sirva
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Re: Pregunta para el amigo Daniel

Postby ruben Dario » Thu Feb 09, 2012 10:46 pm

Daniel Coloque el codigo mas corto tienes razon es muy largo. para ver si la cojo.

Lo Query los ejecuta bien, el problema es para que relacione con el Fastreport

Mi preguna el VALOR del WHERE que tu dices lo hago una vez , pero en el reporte cuando cambia de codigo me dele enlazar los registro correspondientes a dicho codigo.

Algo similar como hago con ADO Filter
cFiltro := " planta = '"+alltrim(oQry:planta)+"' "
cFiltro += " AND codprod = '"+alltrim(oQry:codprod)+"' "
cFiltro += " AND verprod = "+alltrim(str(oQry:verprod))

aQry:Filter := ( cFiltro)
Ruben Dario Gonzalez
Cali-Colombia
rubendariogd@hotmail.com - rubendariogd@gmail.com
User avatar
ruben Dario
 
Posts: 1061
Joined: Thu Sep 27, 2007 3:47 pm
Location: Colombia

Re: Pregunta para el amigo Daniel

Postby Daniel Garcia-Gil » Thu Feb 09, 2012 10:57 pm

Disculpa, no entiendo lo que dices

el post es en relacion a cambiar un nuevo filtro del where? o es para asignar el recordser al fast report?
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Re: Pregunta para el amigo Daniel

Postby Miguel Salas » Thu Feb 09, 2012 11:19 pm

Hola Daniel y Ruben

Aprovecho este post para inmiscuirme, apenas voy a empezar con tdolphin podrian hacerme llegar algun ejemplo basico para principiante, les comento que ya he manejado querys SQl y he leido y usado mysql y sql server en otros lenguajes. Mas no he hecho nada aun con FW-Mysql por ello estoy declinando por usar tDolphin.

os Agradeceré bastante.
atte Miguel Salas
Saludos
Miguel Salas
 
Posts: 132
Joined: Sun Oct 23, 2005 4:09 pm
Location: Pánuco,Ver. México

Re: Pregunta para el amigo Daniel

Postby ruben Dario » Fri Feb 10, 2012 2:32 pm

Saludos

Daniel es para el Fastreport
Es como un reporte Maestro Detalle (Si no que manejo 4 Query)

ya las sentencias SQL no tengo problemas.

En principo con ADO Hago Las sentencisa SQl y hago Filtros para seleccionar
oQry1:Filter := ( planta = "01" and codprov ="0001" ) Ejemplo
El filter en Ado , es que selecciona una serie de registro que cumplna la condicion
En Tdholhin cuan seria el Equivalente (Veo que tiene oQry1:Find , oQry1:Seek , oQry1:Locate)
en fin que me recomendario como deberia hacerlo.

Tengo Mi base datos la idea seria esta

Tabla 1
Codprod Simbolo
1 "Datos 1"
2 "Datos 1"
3 "Datos 1"
4 "Datos 1"
5 "Datos 1"



Tabla 2
Codprod Simbolo1
1 "Simbolo a 1"
1 "Simbolo b 1"
2 "Simbolo 2"
3 "Simbolo 3"
4 "Simbolo 4"

Tabla 3
Codprod Simbolo3
1 "Sim Tabla 3"
1 "Sim Tabla 3"
2 "Sim Tabla 3"
3 "Sim Tabla 3"
4 "Sim Tabla 3"


Cuando genero mi Reporte me lee cada registro de la tabla1 y muestre a continuacion los registro esta en la tabla 2 y asi sucesivamente.

Reporte.

CodProd Simbolo
1 Dato 1
Simbolo a 1" de la tabla 2
Simbolo b 1" de la tabla 2

Sim Tabla 3" de la tabla 3
Sim Tabla 3" de la tabla 3
2 Dato 2
.....
Last edited by ruben Dario on Fri Feb 10, 2012 2:38 pm, edited 1 time in total.
Ruben Dario Gonzalez
Cali-Colombia
rubendariogd@hotmail.com - rubendariogd@gmail.com
User avatar
ruben Dario
 
Posts: 1061
Joined: Thu Sep 27, 2007 3:47 pm
Location: Colombia

Re: Pregunta para el amigo Daniel

Postby ruben Dario » Fri Feb 10, 2012 2:34 pm

Miguel

Mira Este Link Hay ejemplo con Tdolphin

[http://www.4shared.com/file/X5D8CfKl/Prototipo.html
Ruben Dario Gonzalez
Cali-Colombia
rubendariogd@hotmail.com - rubendariogd@gmail.com
User avatar
ruben Dario
 
Posts: 1061
Joined: Thu Sep 27, 2007 3:47 pm
Location: Colombia

Re: Pregunta para el amigo Daniel

Postby Daniel Garcia-Gil » Fri Feb 10, 2012 2:53 pm

Ruben...

Dolphin no maneja filtros internos ( no seria mala idea tratar de implementarlos, trabajare en ello ), debes regenarar la consulta con el nuevo filtro (WHERE), puedes usar la tecnica que te expuse anteriormenete
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Re: Pregunta para el amigo Daniel

Postby wmormar » Fri Feb 10, 2012 4:20 pm

Ruben,

Para que funcione la parte del where como lo estas comentando, seria de la siguiente manera:


cFiltro := " a1.planta = '"+alltrim(oQry:planta)+"' "
cFiltro += " AND a1.codprod = '"+alltrim(oQry:codprod)+"' "
cFiltro += " AND a1.verprod = "+alltrim(str(oQry:verprod))

considerando que planta, codprod y verprod pertenecen a "a1", sino antepones a que tabla pertenecen nunca funcionará, pues tu Query usa la referencia (algo asi como un alias) de las tablas.
William, Morales
Saludos

méxico.sureste
User avatar
wmormar
 
Posts: 1073
Joined: Fri Oct 07, 2005 10:41 pm
Location: México

Re: Pregunta para el amigo Daniel

Postby Miguel Salas » Sat Feb 11, 2012 4:24 am

Ruben tienes la contraseña del prototipo?
Miguel Salas
 
Posts: 132
Joined: Sun Oct 23, 2005 4:09 pm
Location: Pánuco,Ver. México

Re: Pregunta para el amigo Daniel

Postby ruben Dario » Sat Feb 11, 2012 3:08 pm

Miguel
Te pide contrasena creo que no tiene, deme su correo te lo mando.
Ruben Dario Gonzalez
Cali-Colombia
rubendariogd@hotmail.com - rubendariogd@gmail.com
User avatar
ruben Dario
 
Posts: 1061
Joined: Thu Sep 27, 2007 3:47 pm
Location: Colombia

Re: Pregunta para el amigo Daniel

Postby Miguel Salas » Wed Feb 22, 2012 6:45 pm

Estoy atorado, tengo el ejemplo tdolphin rterraz de Daniel

me da "sintax error at 'oserver' ", que me falta agregar
Miguel Salas
 
Posts: 132
Joined: Sun Oct 23, 2005 4:09 pm
Location: Pánuco,Ver. México

Re: Pregunta para el amigo Daniel

Postby Daniel Garcia-Gil » Wed Feb 22, 2012 7:48 pm

Hola

no recuerdo cual es ese ejemplo... podrias colocar el fuente aqui .... gracias
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Next

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 87 guests