Pregunta para el amigo Daniel

User avatar
ruben Dario
Posts: 986
Joined: Thu Sep 27, 2007 3:47 pm
Location: Colombia

Pregunta para el amigo Daniel

Post by ruben Dario »

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

       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

      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
Daniel Garcia-Gil
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita
Contact:

Re: Pregunta para el amigo Daniel

Post by Daniel Garcia-Gil »

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
our best documentation is the source code
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
User avatar
ruben Dario
Posts: 986
Joined: Thu Sep 27, 2007 3:47 pm
Location: Colombia

Re: Pregunta para el amigo Daniel

Post by ruben Dario »

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


  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
Daniel Garcia-Gil
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita
Contact:

Re: Pregunta para el amigo Daniel

Post by Daniel Garcia-Gil »

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
our best documentation is the source code
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
User avatar
ruben Dario
Posts: 986
Joined: Thu Sep 27, 2007 3:47 pm
Location: Colombia

Re: Pregunta para el amigo Daniel

Post by ruben Dario »

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
Daniel Garcia-Gil
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita
Contact:

Re: Pregunta para el amigo Daniel

Post by Daniel Garcia-Gil »

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?
our best documentation is the source code
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
Miguel Salas
Posts: 132
Joined: Sun Oct 23, 2005 4:09 pm
Location: Pánuco,Ver. México

Re: Pregunta para el amigo Daniel

Post by Miguel Salas »

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
User avatar
ruben Dario
Posts: 986
Joined: Thu Sep 27, 2007 3:47 pm
Location: Colombia

Re: Pregunta para el amigo Daniel

Post by ruben Dario »

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: 986
Joined: Thu Sep 27, 2007 3:47 pm
Location: Colombia

Re: Pregunta para el amigo Daniel

Post by ruben Dario »

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
Daniel Garcia-Gil
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita
Contact:

Re: Pregunta para el amigo Daniel

Post by Daniel Garcia-Gil »

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
our best documentation is the source code
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
User avatar
wmormar
Posts: 1050
Joined: Fri Oct 07, 2005 10:41 pm
Location: México
Contact:

Re: Pregunta para el amigo Daniel

Post by wmormar »

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
Miguel Salas
Posts: 132
Joined: Sun Oct 23, 2005 4:09 pm
Location: Pánuco,Ver. México

Re: Pregunta para el amigo Daniel

Post by Miguel Salas »

Ruben tienes la contraseña del prototipo?
User avatar
ruben Dario
Posts: 986
Joined: Thu Sep 27, 2007 3:47 pm
Location: Colombia

Re: Pregunta para el amigo Daniel

Post by ruben Dario »

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
Miguel Salas
Posts: 132
Joined: Sun Oct 23, 2005 4:09 pm
Location: Pánuco,Ver. México

Re: Pregunta para el amigo Daniel

Post by Miguel Salas »

Estoy atorado, tengo el ejemplo tdolphin rterraz de Daniel

me da "sintax error at 'oserver' ", que me falta agregar
User avatar
Daniel Garcia-Gil
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita
Contact:

Re: Pregunta para el amigo Daniel

Post by Daniel Garcia-Gil »

Hola

no recuerdo cual es ese ejemplo... podrias colocar el fuente aqui .... gracias
our best documentation is the source code
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
Post Reply