FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Pregunta para el amigo Daniel
Posts: 1078
Joined: Thu Sep 27, 2007 03:47 PM
Pregunta para el amigo Daniel
Posted: Thu Feb 09, 2012 03: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 (fw): Select all Collapse
       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 (fw): Select all Collapse
      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
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 PM
Re: Pregunta para el amigo Daniel
Posted: Thu Feb 09, 2012 05: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

Posts: 1078
Joined: Thu Sep 27, 2007 03:47 PM
Re: Pregunta para el amigo Daniel
Posted: Thu Feb 09, 2012 07: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 (fw): Select all Collapse
  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
*--
Ruben Dario Gonzalez
Cali-Colombia
rubendariogd@hotmail.com - rubendariogd@gmail.com
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 PM
Re: Pregunta para el amigo Daniel
Posted: 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: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
Posts: 1078
Joined: Thu Sep 27, 2007 03:47 PM
Re: Pregunta para el amigo Daniel
Posted: 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
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 PM
Re: Pregunta para el amigo Daniel
Posted: 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?

Posts: 132
Joined: Sun Oct 23, 2005 04:09 PM
Re: Pregunta para el amigo Daniel
Posted: 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

Posts: 1078
Joined: Thu Sep 27, 2007 03:47 PM
Re: Pregunta para el amigo Daniel
Posted: Fri Feb 10, 2012 02: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&quot; de la tabla 3
             Sim Tabla 3&quot; de la tabla 3

2 Dato 2
.....

Ruben Dario Gonzalez
Cali-Colombia
rubendariogd@hotmail.com - rubendariogd@gmail.com
Posts: 1078
Joined: Thu Sep 27, 2007 03:47 PM
Re: Pregunta para el amigo Daniel
Posted: Fri Feb 10, 2012 02: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
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 PM
Re: Pregunta para el amigo Daniel
Posted: Fri Feb 10, 2012 02: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

Posts: 1076
Joined: Fri Oct 07, 2005 10:41 PM
Re: Pregunta para el amigo Daniel
Posted: Fri Feb 10, 2012 04: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
Posts: 132
Joined: Sun Oct 23, 2005 04:09 PM
Re: Pregunta para el amigo Daniel
Posted: Sat Feb 11, 2012 04:24 AM

Ruben tienes la contraseña del prototipo?

Posts: 1078
Joined: Thu Sep 27, 2007 03:47 PM
Re: Pregunta para el amigo Daniel
Posted: Sat Feb 11, 2012 03: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
Posts: 132
Joined: Sun Oct 23, 2005 04:09 PM
Re: Pregunta para el amigo Daniel
Posted: Wed Feb 22, 2012 06:45 PM

Estoy atorado, tengo el ejemplo tdolphin rterraz de Daniel

me da "sintax error at 'oserver' ", que me falta agregar

Posts: 2365
Joined: Wed Nov 02, 2005 11:46 PM
Re: Pregunta para el amigo Daniel
Posted: Wed Feb 22, 2012 07:48 PM

Hola

no recuerdo cual es ese ejemplo... podrias colocar el fuente aqui .... gracias