PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 28 → ODBC VFP9
ODBC VFP9
Débuté par JAVIER / Javier, 09 mar. 2014 02:00 - 12 réponses
Membre enregistré
12 messages
Posté le 09 mars 2014 - 02:00
Hola, tengo una aplicación que conecta por ODBC a una base VFP9, lo tengo definido en el análisis y todo bien, pero cuando abro dos veces la aplicación y proceso, me da un error en hmodify
Si alguien me puede ayudar por favor.

ODBC/OLEDB (provider=MSDASQL) access error.
Error Number = 170147
Description = Error en la actualización basada en consultas: no se encontró la fila para actualizar.
Source = Microsoft OLE DB Provider for ODBC Drivers
Error Number = -2147467259 (0x80004005)


Description = La operación de múltiples pasos de OLE DB generó errores. Compruebe los valores de estado de OLE DB si es posible. No se realizó ningún trabajo.
Source = Microsoft OLE DB Provider for ODBC Drivers
Error Number = -2147217887 (0x80040e21)
Membre enregistré
60 messages
Popularité : +2 (2 votes)
Posté le 10 mars 2014 - 13:43
Hola Javier, confirmame si estoy entendiendo: estás abriendo la aplicación 2 veces, en una de las instancias hacés la modificación del registro (HModify) y la operación se realiza, ahora en la 2da instancia intentás modificar el mismo registro y ahí te genera error ? Es así como sucede ?

Saludos,
friss.
Membre enregistré
12 messages
Posté le 10 mars 2014 - 15:49
exactamente, eso sucede.

Gracias.
Membre enregistré
60 messages
Popularité : +2 (2 votes)
Posté le 10 mars 2014 - 16:52
OK Javier, esto es lo que me parece que está pasando: cuando intentas hacer la modificación por segunda vez los datos del registro están cambiados desde la última lectura (sería un problema de concurrencia); entonces podrías probar en tu código de volver a leer ese registro primero (que ya sabes que cambió) y luego sí concretar la modificación con HModify() a ver si de esta manera el error desaparece.

Si podés probalo y avisame si funciona.

Saludos,
friss.
Membre enregistré
51 messages
Popularité : +2 (2 votes)
Posté le 12 mars 2014 - 09:42
Hola
Parece ser que el mal te viene al estar trabajando con una consulta. Al no trabajar directamente con la tabla cualquier modificación que hagas la pierdes, si no utilizas algún sistema para grabar las modificaciones que hagas.
El HModify no hace nada si se trata de una consulta.

--
Salvador Soler.
www.windeveloper.es
s.soler@serival.es
Membre enregistré
12 messages
Posté le 12 mars 2014 - 15:09
Les cuento que al hacerlo con instrucción SQL Update ahí si me actualiza la tabla y no me da error pero con hmodify me salta el error. incluso volviendo a leer el registro con hreadfirst ya que la tabla contiene sólo un registro con números de control secuenciales que son los que actualizo al hacer las transacciones.
Membre enregistré
60 messages
Popularité : +2 (2 votes)
Posté le 12 mars 2014 - 16:14
Hola Javier, podrías subir el código que estás utilizando (con HModify que te da error)? Así podemos determinar un poco mejor que puede estar sucediendo.

Saludos,
friss.
Posté le 12 mars 2014 - 20:32
Al 12/03/2014 14:09, En/na JAVIER / Javier ha escrit:
Les cuento que al hacerlo con instrucción SQL Update ahí si me
actualiza la tabla y no me da error pero con hmodify me salta el error.
incluso volviendo a leer el registro con hreadfirst ya que la tabla
contiene sólo un registro con números de control secuenciales que son
los que actualizo al hacer las transacciones.


Mi experiencia es que para trabajar con tablas de VFP, lo mejor es
utilizar OLEDB y instrucciones SQL. Piensa que los conectores de VFP no
se actualizaron desde la versión 7 o la 8. por lo que muchas funciones
(desencadenantes de tablas, reglas de validación,...) y algunos tipos de
datos (autoincremental,..) no estan soportados por ellos. En muchos
casos hay que utilizar tablas puente para incorporar posteriormente los
datos a VFP9.

Un saludo.
Raül Vidiella
Membre enregistré
12 messages
Posté le 12 mars 2014 - 20:58
este es el código, lo que está como comentario es el que me da problema, como ves no es nada del otro mundo:

PROCEDURE Integra_Cartera(secinv,nProceso)
nSecuencial is int
HReadFirst(parametroc)
nSecuencial=parametroc.secuencial+1
//parametroc.secuencial=nSecuencial
//HModify(parametroc)

QRY_actualiza_ParametroC.Param1=nSecuencial
HExecuteQuery(QRY_actualiza_ParametroC)
Membre enregistré
60 messages
Popularité : +2 (2 votes)
Posté le 13 mars 2014 - 15:04
Es cierto Javier, es muy simple el código; podrías probar de utilizar OLEDB como comenta Raül en lugar de ODBC como tenés ahora, si es viable para tu caso.

Para mí el problema está en que la segunda conexión no se da cuenta de los cambios en los datos que hiciste con la primera, ya que según tu primer post dijiste que el HModify te funciona en la primera instancia (podrías por ejemplo mostrar el valor del campo secuencial antes de grabar para ver su valor). Si abrís la aplicación y grabás, y luego abrís una segunda aplicación y grabás, también se genera el error ?

Saludos,
friss.
Membre enregistré
12 messages
Posté le 13 mars 2014 - 19:27
Sabes que si me lee el registro con hreadfirst y me da el secuencial que corresponde pero en el hmodify sale el error, además lo que me doy cuenta lo siguiente:

Tengo abierto el programa dos instancias.
proceso en la primera y pasa bien,
proceso en la segunda y pasa bien,
regreso a la primera y proceso y ahí es que da el error en el hmodify.

es un programa de punto de venta y por eso necesito tener abierto varias instancias, lo hago con odbc hasta migrar todo el erp a hf server.

Saludos,
Javier
Membre enregistré
60 messages
Popularité : +2 (2 votes)
Posté le 14 mars 2014 - 15:16
OK Javier, entonces va a ser mejor que uses instrucciones SQL hasta que migres el TPV a HFSQL.

Saludos,
friss.
Membre enregistré
12 messages
Posté le 14 mars 2014 - 16:42
Si, por el momento voy a usarlo, agradezco mucho todos sus comentarios ya que me dan otros puntos de vista muy útiles.

Saludos,
Javier