[GUFA] CursorAdapter

2012-07-26 Por tema Rafael Copquin

Hola, te respondo las preguntas:

1) los links estaban en español originalmente y fueron luego traducidos 
al inglés y al portugués. Pero desde hace varios años, el dueño de la 
revista solamente dejó disponibles las versiones en inglés


2) podés hacer cursor adapters de varias tablas en la sentencia select 
sql. Pero lo mejor es actualizar una sola tabla, aunque la consulta sea 
de varias tablas. Los campos de la tabla que vas a actualizar los 
definís en las propiedades updatefieldlist, updatenamelist y 
keyfieldlist (en todas ellas tenés que incluir la clave primaria de la 
tabla, porque si no, no te va a funcionar) También tenés que poner la 
propiedad sendupdates en true.


3) En cuanto a TierAdapter, preguntales a los autores Rubén Rovira y 
Martín Salías


Saludos

Rafael Copquin



El 25/07/2012 07:50 p.m., pablo.oviedo escribió:

Gracias, empece con cursoradapter y me trabe. Se pueden usar un
cursoadapter que incluya columnas de distintas tablas? me tira error
cuando quiero refrescar algunos campos del cursor luego de una inserción.

También estoy viendo TierAdapter. Los link que me pasaron, es posible que
esta información este en español?

Existe alguna documentación sobre TierAdapter que describa todas las
clases, metodos y propiedades del frameworks a parte del diagrama de UML
que esta en el sitio de Martin?

saludos


-Original Message-
From: Rafael Copquin rcopq...@fibertel.com.ar
To: GUFA List Member  GUFA@mug.org.ar
Date: Tue, 24 Jul 2012 16:32:07 -0300
Subject: [GUFA] CursorAdapter


Te paso un ejemplo bien completo de cómo lo hago yo:

** creacion de las tablas en sqlserver
** en la vida real tienen más campos, pero estos son los mínimos que
deberían tener

CREATE TABLE [dbo].[DETALLE](
  [FECHA] [date] NOT NULL,
  [TIPODOC] [char](3) NOT NULL,
  [DOCNUM] [char](8) NOT NULL,
  [CODIGO] [char](30) NOT NULL,
  [CANTIDAD] [int] NOT NULL,
  [PRECIO] [numeric](10, 4) NOT NULL,
  [DT] [datetime] NOT NULL,
  [IDETALLE] [int] IDENTITY(1,1) NOT NULL,
  [IDCABECERA] [int] NOT NULL,
   CONSTRAINT [PK_DETALLE] PRIMARY KEY CLUSTERED
(
  [IDDETALLE] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY
=
OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY],
   CONSTRAINT [CN_IDDETALLE] UNIQUE NONCLUSTERED
(
  [IDDETALLE] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY
=
OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

CREATE TABLE [dbo].[CABECERA](
  [FECHA] [date] NOT NULL,
  [CUENTA] [char](4) NOT NULL,
  [TIPODOC] [char](3) NOT NULL,
  [DOCNUM] [char](8) NOT NULL,
  [IVA] [numeric](10, 2) NOT NULL,
  [TOTAL] [numeric](10, 2) NOT NULL,
  [IDCABECERA] [int] IDENTITY(1,1) NOT NULL,
  [DT] [datetime] NOT NULL,
   CONSTRAINT [PK_IDCABECERA] PRIMARY KEY CLUSTERED
(
  [IDCABECERA] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY
=
OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]


** lo siguiente se hace en Visual FoxPro

** generación de un cursor adapter para la tabla CABECERA

Local cCmd,cSch,cUFL,cUNL,lOK

Text to cCmd noshow pretext 15
SELECT
  FECHA ,
  CUENTA ,
  TIPODOC ,
  DOCNUM ,
  IVA ,
  TOTAL ,
  IDCABECERA ,
  DT
   FROM CABECERA WHERE 1=0
EndText

Text to cSch noshow pretext 15
  FECHA D,
  CUENTA C(4),
  TIPODOC C(3),
  DOCNUM C(8),
  IVA N(10,2),
  TOTAL N(10,2),
  IDCABECERA I,
  DT T
EndText


Text to cUFL noshow pretext 15
  FECHA ,
  CUENTA ,
  TIPODOC ,
  DOCNUM ,
  IVA ,
  TOTAL ,
  IDCABECERA ,
  DT
EndText

Text to cUNL noshow pretext 15
  FECHACABECERA.FECHA,
  CUENTA   CABECERA.CUENTA,
  TIPODOC  CABECERA.TIPODOC,
  DOCNUM   CABECERA.DOCNUM,
  IVA  CABECERA.IVA,
  TOTALCABECERA.TOTAL,
  IDCABECERA   CABECERA.IDCABECERA,
  DT   CABECERA.DT
EndText

cUFL= Chrtran( cUFL, Chr(13) + Chr(10),   )
cUNL   = Chrtran( cUNL, Chr(13) + Chr(10),   )
cSch= Chrtran( cSch, Chr(13) + Chr(10),   )
cCmd  = Chrtran( cCmd, Chr(13) + Chr(10),   )

Use in Select()

lOK = .t.

If !PemStatus(thisform,'oCA',5)
 thisform.AddProperty('oCA')
EndIf

Try

  Thisform.oCA = Createobject(CursorAdapter)

  lOK = .t.

Catch to oErrores

  MessageBox(No se pudo generar el objeto CursorAdapter+;
  Chr(13)+oErrores.message,16,Atención,2000)

  lOK = .f.

Finally
EndTry


If lOK = .t.
 try
 With thisform.oCA
  .DataSourceType = ODBC
  .DataSource = thisform.nHandle
  .alias = curCabecera
  .tables = cabecera
  .BufferModeOverride = 5
  .keyfieldlist= idcabecera
  .sendupdates = .T.
  .usetransactions= 

[GUFA] error en HTTPservice

2012-07-26 Por tema Pablo Pioli
loHTTPServiceDeberias intentar registrar nuevamente la libreria. Que 
version tenes?


Pablo Pioli

El 25/07/2012 02:41 p.m., eduardo rohr escribió:


Hola a todos

Tengo este codigo, en el cual se instancia un objeto del tipo HTTPService

loHTTPService = Thisform.ObtenerHTTPService()

If IsNull(loHTTPService)

VentanaError( No se pudo registrar la librería iFox.dll y es 
necesaria para esta operación. + Chr(13);
+ Para solucionar este problema ejecute la opción al menos una vez 
con un usuario + Windows que tenga permisos de Administrador., 
Thisform.Caption)


MostrarEstado()

Return .F.

EndIf

lcFechaDesde = Dtos( lcFechaDesde )

lcFechaHasta = Dtos( lcFechaHasta )

cServer = dfe.ec.gba.gov.ar http://dfe.ec.gba.gov.ar

cURL = 
/DomicilioElectronico/SeguridadCliente/dfeServicioDescargaPadron.do


*!* Para bajar Padron Completo

Text to XMLConsulta NOSHOW TEXT PRETEXT 7

DESCARGA-PADRON

fechaDesdelcFechaDesde/fechaDesde

fechaHastalcFechaHasta/fechaHasta

/DESCARGA-PADRON

EndText

cCodigoHash = loManejadorCodigoHash.Encriptar( XMLConsulta )

cFileName = DFEServicioDescargaPadron_ + cCodigoHash + .XML

loHTTPService.AddPostField( user, cUserCUIT )

loHTTPService.AddPostField( password, cPassWord )

loHTTPService.AddPostFieldasFile( file, XMLConsulta, cFileName )

Try

loHTTPService.IgnoreSSLErrors = .T.
cRespuesta = loHTTPService.Post( cServer, cURL, , , 443 )

Catch To loEx

VentanaError( Error en metodo HTTPService. Motivo:  + loEx.Message, 
Thisform.Caption )


MostrarEstado()

llEjecutaMetodoHTTPService = .F.
EndTry

el objeto lo instancia correctamente ( loHTTPService es distinto de 
NULL )


el problema lo tengo en la linea siguiente :
loHTTPService.IgnoreSSLErrors = .T.
el error que sale es :
Codigo de error OLE 0X80020006: Nombre desconocido

La pc donde se ejecuta este codigo tiene windows xp instalado.
quisiera por favor que me ayude el que pueda paar saber la causa de 
dicho error . gracias


PD: Lo raro es que al editar la dll , veo que la propiedad 
IgnoreSSLErrors existe







[GUFA] CursorAdapter

2012-07-26 Por tema Alejandro Paciotti Iacchelli
Nunca he utilizado un framework de tercero, quizá esto haya perjudicado mis
tiempos de desarrollo, algo que no podré evaluar nunca (que hubiera pasado
si).

Lo que sí puedo afirmar es que los sistemas que realizo los hago todos
contra SQL SERVER definiendo CLASES que acceden a los datos y actualizan y
borran sin necesidad de ningún framework.

Pablo Oviedo, tu pregunta original era:

Hola, necesito hacer una aplicación vfox 9 + sqlserver. 

Pensé usar cursoradapter. No se como hacer un abm maestro-detalle usando
cursor adapter, sí pude armar un abm para tablas simples usando
cursorAdapter builder.

Me puede dar algun ejemplo o algun link para ver?

Como seria el manejo de transacciones con CA?

saludos, muchas gracias.

Seguís necesitando un ejemplo, algo podría pasarte.

Saludos.

-Mensaje original-
De: GUFA@mug.org.ar [mailto:GUFA@mug.org.ar] En nombre de pablo.oviedo
Enviado el: miércoles, 25 de julio de 2012 07:50 p.m.
Para: GUFA List Member
Asunto: [GUFA] CursorAdapter

Gracias, empece con cursoradapter y me trabe. Se pueden usar un cursoadapter
que incluya columnas de distintas tablas? me tira error cuando quiero
refrescar algunos campos del cursor luego de una inserción.

También estoy viendo TierAdapter. Los link que me pasaron, es posible que
esta información este en español?

Existe alguna documentación sobre TierAdapter que describa todas las clases,
metodos y propiedades del frameworks a parte del diagrama de UML que esta en
el sitio de Martin?

saludos


-Original Message-
From: Rafael Copquin rcopq...@fibertel.com.ar
To: GUFA List Member  GUFA@mug.org.ar
Date: Tue, 24 Jul 2012 16:32:07 -0300
Subject: [GUFA] CursorAdapter

 Te paso un ejemplo bien completo de cómo lo hago yo:
 
 ** creacion de las tablas en sqlserver
 ** en la vida real tienen más campos, pero estos son los mínimos que 
 deberían tener
 
 CREATE TABLE [dbo].[DETALLE](
  [FECHA] [date] NOT NULL,
  [TIPODOC] [char](3) NOT NULL,
  [DOCNUM] [char](8) NOT NULL,
  [CODIGO] [char](30) NOT NULL,
  [CANTIDAD] [int] NOT NULL,
  [PRECIO] [numeric](10, 4) NOT NULL,
  [DT] [datetime] NOT NULL,
  [IDETALLE] [int] IDENTITY(1,1) NOT NULL,
  [IDCABECERA] [int] NOT NULL,
   CONSTRAINT [PK_DETALLE] PRIMARY KEY CLUSTERED (
  [IDDETALLE] ASC
 )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY 
 = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY],
   CONSTRAINT [CN_IDDETALLE] UNIQUE NONCLUSTERED (
  [IDDETALLE] ASC
 )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY 
 = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
 ) ON [PRIMARY]
 
 CREATE TABLE [dbo].[CABECERA](
  [FECHA] [date] NOT NULL,
  [CUENTA] [char](4) NOT NULL,
  [TIPODOC] [char](3) NOT NULL,
  [DOCNUM] [char](8) NOT NULL,
  [IVA] [numeric](10, 2) NOT NULL,
  [TOTAL] [numeric](10, 2) NOT NULL,
  [IDCABECERA] [int] IDENTITY(1,1) NOT NULL,
  [DT] [datetime] NOT NULL,
   CONSTRAINT [PK_IDCABECERA] PRIMARY KEY CLUSTERED (
  [IDCABECERA] ASC
 )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY 
 = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
 ) ON [PRIMARY]
 
 
 ** lo siguiente se hace en Visual FoxPro
 
 ** generación de un cursor adapter para la tabla CABECERA
 
 Local cCmd,cSch,cUFL,cUNL,lOK
 
 Text to cCmd noshow pretext 15
 SELECT
  FECHA ,
  CUENTA ,
  TIPODOC ,
  DOCNUM ,
  IVA ,
  TOTAL ,
  IDCABECERA ,
  DT
   FROM CABECERA WHERE 1=0
 EndText
 
 Text to cSch noshow pretext 15
  FECHA D,
  CUENTA C(4),
  TIPODOC C(3),
  DOCNUM C(8),
  IVA N(10,2),
  TOTAL N(10,2),
  IDCABECERA I,
  DT T
 EndText
 
 
 Text to cUFL noshow pretext 15
  FECHA ,
  CUENTA ,
  TIPODOC ,
  DOCNUM ,
  IVA ,
  TOTAL ,
  IDCABECERA ,
  DT
 EndText
 
 Text to cUNL noshow pretext 15
  FECHACABECERA.FECHA,
  CUENTA   CABECERA.CUENTA,
  TIPODOC  CABECERA.TIPODOC,
  DOCNUM   CABECERA.DOCNUM,
  IVA  CABECERA.IVA,
  TOTALCABECERA.TOTAL,
  IDCABECERA   CABECERA.IDCABECERA,
  DT   CABECERA.DT
 EndText
 
 cUFL= Chrtran( cUFL, Chr(13) + Chr(10),   )
 cUNL   = Chrtran( cUNL, Chr(13) + Chr(10),   )
 cSch= Chrtran( cSch, Chr(13) + Chr(10),   )
 cCmd  = Chrtran( cCmd, Chr(13) + Chr(10),   )
 
 Use in Select()
 
 lOK = .t.
 
 If !PemStatus(thisform,'oCA',5)
 thisform.AddProperty('oCA')
 EndIf
 
 Try
 
  Thisform.oCA = Createobject(CursorAdapter)
 
  lOK = .t.
 
 Catch to oErrores
 
  MessageBox(No se pudo generar el objeto CursorAdapter+;
  Chr(13)+oErrores.message,16,Atención,2000)
 
  lOK = .f.
 
 Finally
 EndTry
 
 
 If lOK = .t.
 try
 With thisform.oCA
  .DataSourceType = ODBC
  .DataSource = thisform.nHandle
  .alias = 

[GUFA] CursorAdapter

2012-07-26 Por tema pablo.oviedo
Sí gracias!!! todo suma. Hasta el momento estoy viendo y haciendo algunas 
pruebas. 
Con CA tadavia no logro hacer lo que quiero, con TA todavia me falta leer 
un poco mas y madurarlo. 
Si hay otras alternativas, bienvenido sea.

saldudos

-Original Message-
From: Alejandro Paciotti Iacchelli alejandro.pacio...@gmail.com
To: GUFA List Member  GUFA@mug.org.ar
Date: Thu, 26 Jul 2012 10:22:10 -0300
Subject: [GUFA] CursorAdapter

 Nunca he utilizado un framework de tercero, quizá esto haya
 perjudicado mis
 tiempos de desarrollo, algo que no podré evaluar nunca (que hubiera
 pasado
 si).
 
 Lo que sí puedo afirmar es que los sistemas que realizo los hago todos
 contra SQL SERVER definiendo CLASES que acceden a los datos y
 actualizan y
 borran sin necesidad de ningún framework.
 
 Pablo Oviedo, tu pregunta original era:
 
 Hola, necesito hacer una aplicación vfox 9 + sqlserver. 
 
 Pensé usar cursoradapter. No se como hacer un abm maestro-detalle
 usando
 cursor adapter, sí pude armar un abm para tablas simples usando
 cursorAdapter builder.
 
 Me puede dar algun ejemplo o algun link para ver?
 
 Como seria el manejo de transacciones con CA?
 
 saludos, muchas gracias.
 
 Seguís necesitando un ejemplo, algo podría pasarte.
 
 Saludos.
 
 -Mensaje original-
 De: GUFA@mug.org.ar [mailto:GUFA@mug.org.ar] En nombre de pablo.oviedo
 Enviado el: miércoles, 25 de julio de 2012 07:50 p.m.
 Para: GUFA List Member
 Asunto: [GUFA] CursorAdapter
 
 Gracias, empece con cursoradapter y me trabe. Se pueden usar un
 cursoadapter
 que incluya columnas de distintas tablas? me tira error cuando quiero
 refrescar algunos campos del cursor luego de una inserción.
 
 También estoy viendo TierAdapter. Los link que me pasaron, es posible
 que
 esta información este en español?
 
 Existe alguna documentación sobre TierAdapter que describa todas las
 clases,
 metodos y propiedades del frameworks a parte del diagrama de UML que
 esta en
 el sitio de Martin?
 
 saludos
 
 
 -Original Message-
 From: Rafael Copquin rcopq...@fibertel.com.ar
 To: GUFA List Member  GUFA@mug.org.ar
 Date: Tue, 24 Jul 2012 16:32:07 -0300
 Subject: [GUFA] CursorAdapter
 
  Te paso un ejemplo bien completo de cómo lo hago yo:
  
  ** creacion de las tablas en sqlserver
  ** en la vida real tienen más campos, pero estos son los mínimos
 que 
  deberían tener
  
  CREATE TABLE [dbo].[DETALLE](
   [FECHA] [date] NOT NULL,
   [TIPODOC] [char](3) NOT NULL,
   [DOCNUM] [char](8) NOT NULL,
   [CODIGO] [char](30) NOT NULL,
   [CANTIDAD] [int] NOT NULL,
   [PRECIO] [numeric](10, 4) NOT NULL,
   [DT] [datetime] NOT NULL,
   [IDETALLE] [int] IDENTITY(1,1) NOT NULL,
   [IDCABECERA] [int] NOT NULL,
CONSTRAINT [PK_DETALLE] PRIMARY KEY CLUSTERED (
   [IDDETALLE] ASC
  )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF,
 IGNORE_DUP_KEY 
  = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY],
CONSTRAINT [CN_IDDETALLE] UNIQUE NONCLUSTERED (
   [IDDETALLE] ASC
  )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF,
 IGNORE_DUP_KEY 
  = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
  ) ON [PRIMARY]
  
  CREATE TABLE [dbo].[CABECERA](
   [FECHA] [date] NOT NULL,
   [CUENTA] [char](4) NOT NULL,
   [TIPODOC] [char](3) NOT NULL,
   [DOCNUM] [char](8) NOT NULL,
   [IVA] [numeric](10, 2) NOT NULL,
   [TOTAL] [numeric](10, 2) NOT NULL,
   [IDCABECERA] [int] IDENTITY(1,1) NOT NULL,
   [DT] [datetime] NOT NULL,
CONSTRAINT [PK_IDCABECERA] PRIMARY KEY CLUSTERED (
   [IDCABECERA] ASC
  )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF,
 IGNORE_DUP_KEY 
  = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
  ) ON [PRIMARY]
  
  
  ** lo siguiente se hace en Visual FoxPro
  
  ** generación de un cursor adapter para la tabla CABECERA
  
  Local cCmd,cSch,cUFL,cUNL,lOK
  
  Text to cCmd noshow pretext 15
  SELECT
   FECHA ,
   CUENTA ,
   TIPODOC ,
   DOCNUM ,
   IVA ,
   TOTAL ,
   IDCABECERA ,
   DT
FROM CABECERA WHERE 1=0
  EndText
  
  Text to cSch noshow pretext 15
   FECHA D,
   CUENTA C(4),
   TIPODOC C(3),
   DOCNUM C(8),
   IVA N(10,2),
   TOTAL N(10,2),
   IDCABECERA I,
   DT T
  EndText
  
  
  Text to cUFL noshow pretext 15
   FECHA ,
   CUENTA ,
   TIPODOC ,
   DOCNUM ,
   IVA ,
   TOTAL ,
   IDCABECERA ,
   DT
  EndText
  
  Text to cUNL noshow pretext 15
   FECHACABECERA.FECHA,
   CUENTA   CABECERA.CUENTA,
   TIPODOC  CABECERA.TIPODOC,
   DOCNUM   CABECERA.DOCNUM,
   IVA  CABECERA.IVA,
   TOTALCABECERA.TOTAL,
   IDCABECERA   CABECERA.IDCABECERA,
   DT   CABECERA.DT
  EndText
  
  cUFL= Chrtran( cUFL, Chr(13) + Chr(10),   )
  cUNL   = Chrtran( cUNL, Chr(13) + Chr(10),   )
  cSch= Chrtran( cSch, Chr(13) + Chr(10),   )
 

[GUFA] CursorAdapter

2012-07-26 Por tema pablo.oviedo
Rafael, tengo problemas con el refresh, Error: The refresh key defined for 
table is not found.

El codigo es:

procedure CACompras
lparameters cAlia, cName
* cInsCmd, cUpdCmd, cDelCmd pueden ser vacios

oCA = createobject(CABase)
oCA.Alias = cAlia
oCA.CursorSchema = PROVEEDOR C(30),FECHA D, IDPROV I, IDCOM I
oCA.InsertCmdRefreshFieldList = IDCOM
oCA.name = cName
oCA.SelectCmd = select  PROVEEDOR, FECHA, IDPROV, IDCOM from 
compras c inner join proveedores p on c.idprov=p.idpro
oCA.Tables = Compras
oCA.UpdatableFieldList = FECHA, IDPROV
oCA.UpdateCmdRefreshFieldList = FECHA, IDPROV
oCA.UpdateCmdRefreshKeyFieldList = IDCOM
oCA.UpdateNameList = FECHA Compras.FECHA IDPROV Compras.IDPROV
oCA.KeyFieldList = IDCOM
oCA.CursorFill()
return oCA
endproc 


define class CABase as CursorAdapter 

procedure init

local loConnDataSource, oRS
loConnDataSource = createobject('ADODB.Connection')
loConnDataSource.ConnectionString = 
[Provider=SQLNCLI10.1;Integrated Security=SSPI;Persist Security 
Info=False;] + ;
[User ID=;Initial Catalog=Insumos;Data 
Source=PPC\SQLE;Initial File ] + ;
[Name=;Server SPN=;]


loConnDataSource.Open()

oRS = createobject('ADODB.RecordSet')
oRS.CursorLocation   = 3   adUseClient
oRS.LockType = 3   adLockOptimistic
oRS.ActiveConnection = loConnDataSource

this.DataSource = oRS
this.DataSourceType = ADO
this.AllowSimultaneousFetch = .t.
this.BreakOnError = .t.
this.BufferModeOverride = 3  Optimistic row buffering
this.conflictCheckType  = 3  Check for both modified 
record and key uniqueness
this.FetchMemo = .f.
this.FetchSize = -1
this.MapBinary = .t.
this.MapVarchar = .t.
this.SendUpdates = .t.
this.UseCursorSchema = .t.
*oCA.UseDeDataSource = .t.
endproc 
enddefine




-Original Message-
From: Rafael Copquin rcopq...@fibertel.com.ar
To: GUFA List Member  GUFA@mug.org.ar
Date: Thu, 26 Jul 2012 10:08:00 -0300
Subject: [GUFA] CursorAdapter

 Hola, te respondo las preguntas:
 
 1) los links estaban en español originalmente y fueron luego
 traducidos 
 al inglés y al portugués. Pero desde hace varios años, el dueño de
 la 
 revista solamente dejó disponibles las versiones en inglés
 
 2) podés hacer cursor adapters de varias tablas en la sentencia select
 sql. Pero lo mejor es actualizar una sola tabla, aunque la consulta sea
 de varias tablas. Los campos de la tabla que vas a actualizar los 
 definís en las propiedades updatefieldlist, updatenamelist y 
 keyfieldlist (en todas ellas tenés que incluir la clave primaria de la
 tabla, porque si no, no te va a funcionar) También tenés que poner la
 propiedad sendupdates en true.
 
 3) En cuanto a TierAdapter, preguntales a los autores Rubén Rovira y 
 Martín Salías
 
 Saludos
 
 Rafael Copquin
 
 
 
 El 25/07/2012 07:50 p.m., pablo.oviedo escribió:
  Gracias, empece con cursoradapter y me trabe. Se pueden usar un
  cursoadapter que incluya columnas de distintas tablas? me tira error
  cuando quiero refrescar algunos campos del cursor luego de una
 inserción.
 
  También estoy viendo TierAdapter. Los link que me pasaron, es
 posible que
  esta información este en español?
 
  Existe alguna documentación sobre TierAdapter que describa todas las
  clases, metodos y propiedades del frameworks a parte del diagrama de
 UML
  que esta en el sitio de Martin?
 
  saludos
 
 
  -Original Message-
  From: Rafael Copquin rcopq...@fibertel.com.ar
  To: GUFA List Member  GUFA@mug.org.ar
  Date: Tue, 24 Jul 2012 16:32:07 -0300
  Subject: [GUFA] CursorAdapter
 
  Te paso un ejemplo bien completo de cómo lo hago yo:
 
  ** creacion de las tablas en sqlserver
  ** en la vida real tienen más campos, pero estos son los mínimos
 que
  deberían tener
 
  CREATE TABLE [dbo].[DETALLE](
[FECHA] [date] NOT NULL,
[TIPODOC] [char](3) NOT NULL,
[DOCNUM] [char](8) NOT NULL,
[CODIGO] [char](30) NOT NULL,
[CANTIDAD] [int] NOT NULL,
[PRECIO] [numeric](10, 4) NOT NULL,
[DT] [datetime] NOT NULL,
[IDETALLE] [int] IDENTITY(1,1) NOT NULL,
[IDCABECERA] [int] NOT NULL,
 CONSTRAINT [PK_DETALLE] PRIMARY KEY CLUSTERED
  (
[IDDETALLE] ASC
  )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF,
 IGNORE_DUP_KEY
  =
  OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY],
 CONSTRAINT [CN_IDDETALLE] UNIQUE NONCLUSTERED
  (
[IDDETALLE] ASC
  )WITH (PAD_INDEX  = OFF, 

[GUFA] error en HTTPservice

2012-07-26 Por tema eduardo rohr
Pablo :

Gracias por la respuesta . Verifique con el regedit y la entrada de
registro de la libreria apuntaba a una vieja version.

saludos

El 26 de julio de 2012 10:20, Pablo Pioli ppi...@hotmail.com escribió:

 loHTTPServiceDeberias intentar registrar nuevamente la libreria. Que
 version tenes?

 Pablo Pioli

 El 25/07/2012 02:41 p.m., eduardo rohr escribió:

 Hola a todos

 Tengo este codigo, en el cual se instancia un objeto del tipo HTTPService

 loHTTPService = Thisform.ObtenerHTTPService()

 If IsNull(loHTTPService)

 VentanaError( No se pudo registrar la librería iFox.dll y es necesaria
 para esta operación. + Chr(13);
 + Para solucionar este problema ejecute la opción al menos una vez con un
 usuario + Windows que tenga permisos de Administrador., Thisform.Caption)

 MostrarEstado()

 Return .F.

 EndIf

 lcFechaDesde = Dtos( lcFechaDesde )

 lcFechaHasta = Dtos( lcFechaHasta )

 cServer = dfe.ec.gba.gov.ar

 cURL =
 /DomicilioElectronico/SeguridadCliente/dfeServicioDescargaPadron.do

 *!* Para bajar Padron Completo

 Text to XMLConsulta NOSHOW TEXT PRETEXT 7

 DESCARGA-PADRON

 fechaDesdelcFechaDesde/fechaDesde

 fechaHastalcFechaHasta/fechaHasta

 /DESCARGA-PADRON

 EndText

 cCodigoHash = loManejadorCodigoHash.Encriptar( XMLConsulta )

 cFileName = DFEServicioDescargaPadron_ + cCodigoHash + .XML

 loHTTPService.AddPostField( user, cUserCUIT )

 loHTTPService.AddPostField( password, cPassWord )

 loHTTPService.AddPostFieldasFile( file, XMLConsulta, cFileName )

 Try

 loHTTPService.IgnoreSSLErrors = .T.
 cRespuesta = loHTTPService.Post( cServer, cURL, , , 443 )

 Catch To loEx

 VentanaError( Error en metodo HTTPService. Motivo:  + loEx.Message,
 Thisform.Caption )

 MostrarEstado()

 llEjecutaMetodoHTTPService = .F.
 EndTry

 el objeto lo instancia correctamente ( loHTTPService es distinto de NULL )

 el problema lo tengo en la linea siguiente :
 loHTTPService.IgnoreSSLErrors = .T.
 el error que sale es :
 Codigo de error OLE 0X80020006: Nombre desconocido

 La pc donde se ejecuta este codigo tiene windows xp instalado.
 quisiera por favor que me ayude el que pueda paar saber la causa de dicho
 error . gracias

 PD: Lo raro es que al editar la dll , veo que la propiedad IgnoreSSLErrors
 existe






[GUFA] CursorAdapter

2012-07-26 Por tema Rafael Copquin

Probaste de _no usar_ las propiedades

InsertCmdRefreshFieldList , UpdateCmdRefreshFieldList, 
UpdateCmdRefreshKeyFieldList

(yo jamás las usé y a mi me funcionan los CA)

En tu clase de CA ponés la propiedad BufferModeOverride = 3optimistic row 
buffering

Yo la pongo en 5optimistic table buffering

En el primer caso la actualización es automática si movés el puntero. En 
cambio, usando 5 (optimistic table buffering), solamente se actualiza la tabla 
si le mandás un tableupdate. Además, te actualiza varios registros de una.

Rafael Copquin


El 26/07/2012 10:52 a.m., pablo.oviedo escribió:

oCA.UpdateCmdRefreshKeyFieldList = IDCOM




[GUFA] SQL SERVER

2012-07-26 Por tema Alejandro Paciotti Iacchelli
Bueno Pablo, yo uso algo como lo siguiente:

 


***

DEFINE CLASS Pagos AS Custom


***

NumeroError  = 0   

DescripcionError = 

 

  * nResultado = THISFORM.oPagos.Alta(cComprobante, dFechaPago,
nImporte, cCodigoContrato, nDescuento, cDescripcion, cNumeroRecibo)

 

*** 

PROCEDURE Alta(cComprobante, dFechaPago, nImporte, cCodigoContrato,
nDescuento, cDescripcion, cNumeroRecibo)

 

*** 

* Recibe las variables y llama al procedimiento almacenado
SP_Alta_PAGOS

*

LOCAL nResultado

nResultado = -1

*

=SQLSETPROP(oAplicacion.Conexion, Transactions, 2) 

*

   TEXT TO cInstruccionSql NOSHOW PRETEXT 2

  EXECUTE SP_Alta_Pagos @CodigoContrato   =
?cCodigoContrato,

 @CodigoFormaPago =
?cCodigoFormaPago,

 @Comprobante =
?ALLTRIM(cComprobante), 

 @FechaPago
=?DTOC(dFechaPago),  

 @Importe =?nImporte,

 @Descuento   =?nDescuento,

 @Descripcion =?cDescripcion,

 @NumeroRecibo=?cNumeroRecibo,

 @CodigoUsuario
=?oAplicacion.CodigoUsuario

ENDTEXT

*

  =SQLPREPARE(oAplicacion.Conexion, cInstruccionSql)

  *

  nResultado = SQLEXEC(oAplicacion.Conexion)

  *

  IF nResultado  0

 THIS.ParseaError(ALTA Pagos)  

 =SQLROLLBACK(oAplicacion.Conexion)

 =SQLSETPROP(oAplicacion.Conexion, Transactions, 1)


 RETURN -1

  ELSE

 nResultado = 1

  ENDIF

 

 

ETC, ETC, ETC …

 

O bien, para traer un cursor con un listado de PAGOS:

 

 

*** 

PROCEDURE TraerTodos(sNombreCursor)

 

*** 

LOCAL nResultado

nResultado = -1

  *

  TEXT TO cInstruccionSql TEXTMERGE NOSHOW PRETEXT 2

   SELECT FechaPago, CodigoPago, Comprobante, Descripcion,
Descuento, Importe, NumeroRecibo FROM Pagos 

  ENDTEXT

  *

nResultado = SQLEXEC(oAplicacion.Conexion, cInstruccionSql,
sNombreCursor) 

  *

  IF nResultado  0

 THIS.ParseaError

  ENDIF

  *

RETURN nResultado  

*

ENDPROC 

 

 

Estoy mil por cien seguro que el framework es muchísimo mejor… pero yo así
saqué las papas del fuego, desarrollé todo rapidito y eficientemente.

 

Saludos.



[GUFA] CursorAdapter

2012-07-26 Por tema pablo.oviedo
Fantastico!!!, segui tu sujerencia. 

Como vos decis, sin esta tres propiedades funciona ok, lo probe con 
bufferin 3 y 5. Tuve que hacer el refresh programaticamente en el evento 
AfterInsert

Con estas tres propiedades seteadas y teniendo un cursor con columnas de 
varias tablas no funcionan los refresh(). Sera algun bug de fox?

Sigo adelante, ahora pruebo lo de las transacciones!!!

saludos, gracias.

-Original Message-
From: Rafael Copquin rcopq...@fibertel.com.ar
To: GUFA List Member  GUFA@mug.org.ar
Date: Thu, 26 Jul 2012 17:17:27 -0300
Subject: [GUFA] CursorAdapter

 Probaste de _no usar_ las propiedades
 
 InsertCmdRefreshFieldList , UpdateCmdRefreshFieldList,
 UpdateCmdRefreshKeyFieldList
 
 (yo jamás las usé y a mi me funcionan los CA)
 
 En tu clase de CA ponés la propiedad BufferModeOverride = 3   
 optimistic row buffering
 
 Yo la pongo en 5optimistic table buffering
 
 En el primer caso la actualización es automática si movés el
 puntero. En cambio, usando 5 (optimistic table buffering), solamente se
 actualiza la tabla si le mandás un tableupdate. Además, te actualiza
 varios registros de una.
 
 Rafael Copquin
 
 
 El 26/07/2012 10:52 a.m., pablo.oviedo escribió:
  oCA.UpdateCmdRefreshKeyFieldList = IDCOM
 




[GUFA] SQL SERVER

2012-07-26 Por tema pablo.oviedo
Muchas Gracias!! 

Una consulta, que conviene usar ADO o ODBC?

saludos.

-Original Message-
From: Alejandro Paciotti Iacchelli alejandro.pacio...@gmail.com
To: GUFA List Member  GUFA@mug.org.ar
Date: Thu, 26 Jul 2012 17:18:44 -0300
Subject: [GUFA] SQL SERVER

 Bueno Pablo, yo uso algo como lo siguiente:
 
  
 
 ***
 *
 ***
 
 DEFINE CLASS Pagos AS Custom
 
 ***
 *
 ***
 
 NumeroError  = 0   
 
 DescripcionError = 
 
  
 
   * nResultado = THISFORM.oPagos.Alta(cComprobante, dFechaPago,
 nImporte, cCodigoContrato, nDescuento, cDescripcion, cNumeroRecibo)
 
  
 ***
 *
 *** 
 
 PROCEDURE Alta(cComprobante, dFechaPago, nImporte,
 cCodigoContrato,
 nDescuento, cDescripcion, cNumeroRecibo)
 
  
 ***
 *
 *** 
 
 * Recibe las variables y llama al procedimiento almacenado
 SP_Alta_PAGOS
 
 *
 
 LOCAL nResultado
 
 nResultado = -1
 
 *
 
 =SQLSETPROP(oAplicacion.Conexion, Transactions, 2) 
 
 *
 
TEXT TO cInstruccionSql NOSHOW PRETEXT 2
 
   EXECUTE SP_Alta_Pagos @CodigoContrato   =
 ?cCodigoContrato,
 
  @CodigoFormaPago =
 ?cCodigoFormaPago,
 
  @Comprobante =
 ?ALLTRIM(cComprobante), 
 
  @FechaPago
 =?DTOC(dFechaPago),  
 
  @Importe =?nImporte,
 
  @Descuento   =?nDescuento,
 
  @Descripcion
 =?cDescripcion,
 
  @NumeroRecibo   
 =?cNumeroRecibo,
 
  @CodigoUsuario
 =?oAplicacion.CodigoUsuario
 
 ENDTEXT
 
 *
 
   =SQLPREPARE(oAplicacion.Conexion, cInstruccionSql)
 
   *
 
   nResultado = SQLEXEC(oAplicacion.Conexion)
 
   *
 
   IF nResultado  0
 
  THIS.ParseaError(ALTA Pagos)  
 
  =SQLROLLBACK(oAplicacion.Conexion)
 
  =SQLSETPROP(oAplicacion.Conexion, Transactions,
 1)
 
 
  RETURN -1
 
   ELSE
 
  nResultado = 1
 
   ENDIF
 
  
 
  
 
 ETC, ETC, ETC …
 
  
 
 O bien, para traer un cursor con un listado de PAGOS:
 
  
 
  
 ***
 *
 *** 
 
 PROCEDURE TraerTodos(sNombreCursor)
 
  
 ***
 *
 *** 
 
 LOCAL nResultado
 
 nResultado = -1
 
   *
 
   TEXT TO cInstruccionSql TEXTMERGE NOSHOW PRETEXT 2
 
SELECT FechaPago, CodigoPago, Comprobante,
 Descripcion,
 Descuento, Importe, NumeroRecibo FROM Pagos 
 
   ENDTEXT
 
   *
 
 nResultado = SQLEXEC(oAplicacion.Conexion, cInstruccionSql,
 sNombreCursor) 
 
   *
 
   IF nResultado  0
 
  THIS.ParseaError
 
   ENDIF
 
   *
 
 RETURN nResultado  
 
 *
 
 ENDPROC 
 
  
 
  
 
 Estoy mil por cien seguro que el framework es muchísimo mejor… pero
 yo así
 saqué las papas del fuego, desarrollé todo rapidito y eficientemente.
 
  
 
 Saludos.
 




[GUFA] SQL SERVER

2012-07-26 Por tema Alejandro Paciotti Iacchelli
Yo uso:

nConexion = SQLSTRINGCONNECT(DRIVER=SQL 
Server;SERVER=NOMBRE_DE_TU_SERVIDOR;UID=NOMBRE_DE_TU_USUARIO;DATABASE=NOMBRE_DE_TU_BASEDEDATOS;PWD=TU_PASSWORD;

y anda como chicotazo.

Pero repito...dale para adelante con el framework de los muchachos.

Saludos.

-Mensaje original-
De: GUFA@mug.org.ar [mailto:GUFA@mug.org.ar] En nombre de pablo.oviedo
Enviado el: jueves, 26 de julio de 2012 08:14 p.m.
Para: GUFA List Member
Asunto: [GUFA] SQL SERVER

Muchas Gracias!! 

Una consulta, que conviene usar ADO o ODBC?

saludos.

-Original Message-
From: Alejandro Paciotti Iacchelli alejandro.pacio...@gmail.com
To: GUFA List Member  GUFA@mug.org.ar
Date: Thu, 26 Jul 2012 17:18:44 -0300
Subject: [GUFA] SQL SERVER

 Bueno Pablo, yo uso algo como lo siguiente:
 
  
 
 **
 *
 *
 ***
 
 DEFINE CLASS Pagos AS Custom
 
 **
 *
 *
 ***
 
 NumeroError  = 0   
 
 DescripcionError = 
 
  
 
   * nResultado = THISFORM.oPagos.Alta(cComprobante, 
 dFechaPago, nImporte, cCodigoContrato, nDescuento, cDescripcion, 
 cNumeroRecibo)
 
  
 **
 *
 *
 *** 
 
 PROCEDURE Alta(cComprobante, dFechaPago, nImporte, 
 cCodigoContrato, nDescuento, cDescripcion, cNumeroRecibo)
 
  
 **
 *
 *
 *** 
 
 * Recibe las variables y llama al procedimiento almacenado 
 SP_Alta_PAGOS
 
 *
 
 LOCAL nResultado
 
 nResultado = -1
 
 *
 
 =SQLSETPROP(oAplicacion.Conexion, Transactions, 2)
 
 *
 
TEXT TO cInstruccionSql NOSHOW PRETEXT 2
 
   EXECUTE SP_Alta_Pagos @CodigoContrato   =
 ?cCodigoContrato,
 
  @CodigoFormaPago = 
 ?cCodigoFormaPago,
 
  @Comprobante =
 ?ALLTRIM(cComprobante),
 
  @FechaPago 
 =?DTOC(dFechaPago),
 
  @Importe =?nImporte,
 
  @Descuento   =?nDescuento,
 
  @Descripcion
 =?cDescripcion,
 
  @NumeroRecibo   
 =?cNumeroRecibo,
 
  @CodigoUsuario 
 =?oAplicacion.CodigoUsuario
 
 ENDTEXT
 
 *
 
   =SQLPREPARE(oAplicacion.Conexion, cInstruccionSql)
 
   *
 
   nResultado = SQLEXEC(oAplicacion.Conexion)
 
   *
 
   IF nResultado  0
 
  THIS.ParseaError(ALTA Pagos)  
 
  =SQLROLLBACK(oAplicacion.Conexion)
 
  =SQLSETPROP(oAplicacion.Conexion, Transactions,
 1)
 
 
  RETURN -1
 
   ELSE
 
  nResultado = 1
 
   ENDIF
 
  
 
  
 
 ETC, ETC, ETC …
 
  
 
 O bien, para traer un cursor con un listado de PAGOS:
 
  
 
  
 **
 *
 *
 *** 
 
 PROCEDURE TraerTodos(sNombreCursor)
 
  
 **
 *
 *
 *** 
 
 LOCAL nResultado
 
 nResultado = -1
 
   *
 
   TEXT TO cInstruccionSql TEXTMERGE NOSHOW PRETEXT 2
 
SELECT FechaPago, CodigoPago, Comprobante, 
 Descripcion, Descuento, Importe, NumeroRecibo FROM Pagos
 
   ENDTEXT
 
   *
 
 nResultado = SQLEXEC(oAplicacion.Conexion, cInstruccionSql,
 sNombreCursor) 
 
   *
 
   IF nResultado  0
 
  THIS.ParseaError
 
   ENDIF
 
   *
 
 RETURN nResultado
 
 *
 
 ENDPROC 
 
  
 
  
 
 Estoy mil por cien seguro que el framework es muchísimo mejor… pero yo 
 así saqué las papas del fuego, desarrollé todo rapidito y 
 eficientemente.
 
  
 
 Saludos.