Gracias, Antonio!
Gracias, German!
De: publice...@googlegroups.com [mailto:publice...@googlegroups.com] En nombre de Germán Fabricio Valdez
Enviado el: jueves, 29 de diciembre de 2016 3:15 p. m.
Para: Comunidad de Visual Foxpro en Español <publice...@googlegroups.com>
Asunto: [vfp] Re: OT: Campo UI en Maria DB / Mysql
el canpo UI se utiliza para la replicacion de sql server y para obtener el ID insertado
Hola, otra vez
Estoy navegando google para encontrar el equivalente al campo UNIQUEIDENTIFIER, en MariaDB y Mysql, sin suerte.
Según lo que se sugiere, se trata de un campo del tipo Binary (16) con la función en Valor Predeterminado:
Uuid()
O bien
Select uuid()
O bien
Newid()
.....pero al agregar nuevas filas desde el SGBD, siempre carga el mismo valor. Ejemplo en mi caso:
0x73656C65637420757569642829000000
¿Alguien sabe qué es lo que estoy haciendo mal?
Muchas gracias, saludos
-----Mensaje original-----
De: diegod...@gmail.com [mailto:diegod...@gmail.com]
Enviado el: jueves, 29 de diciembre de 2016 10:53 a. m.
Asunto: RE: [vfp] Re: FoxyDB VS. SQLDATA
Muchas gracias, Mauricio, Daniel, Antonio y German!
Valiosísima información y notable el tiempo dedicado desinteresadamente a cada respuesta.
Creo que las dos clases merecen el trabajo de probarlas por separado, y que cualquier elección será buena.
Seguramente volveré a molestarlos en enero.
Saludos y feliz 2017
-----Mensaje original-----
De: publicesvfoxpro@googlegroups.com [mailto:publicesvfoxpro@googlegroups.com] En nombre de German Fabrcio Valdez Enviado el: jueves, 29 de diciembre de 2016 1:14 a. m.
Para: publicesvfoxpro@googlegroups.com
Gracias, Victor y Carlos
¿Ustedes usan este mismo campo UI como llave primaria, en reemplazo de ID autoincremental?
Se me ocurre que quizás no sea efectivo en performance para cláusulas where y búsquedas, pero sería una solución para muchos de los problemas de gestión de datos.
Gracias,
Diego
PD: En ese escenario, de todos modos existiría la columna ID autoincremental, pero sin el atributo de primary key. Es decir, no a los efectos, entre otros, de vincular tablas cabecera-contenido.
De: publice...@googlegroups.com [mailto:publice...@googlegroups.com] En nombre de Víctor Hugo Espínola Domínguez
Enviado el: jueves, 29 de diciembre de 2016 4:17 p. m.
Para: publice...@googlegroups.com
Asunto: RE: [vfp] Re: FoxyDB VS. SQLDATA
Muchas gracias, Mauricio, Daniel, Antonio y German!
Valiosísima información y notable el tiempo dedicado desinteresadamente a cada respuesta.
Creo que las dos clases merecen el trabajo de probarlas por separado, y que cualquier elección será buena.
Seguramente volveré a molestarlos en enero.
Saludos y feliz 2017
-----Mensaje original-----
De: publice...@googlegroups.com [mailto:publice...@googlegroups.com] En nombre de German Fabrcio Valdez Enviado el: jueves, 29 de diciembre de 2016 1:14 a. m.
Para: publice...@googlegroups.com
Asunto: RE: [vfp] Re: FoxyDB VS. SQLDATA
Muchas gracias, Mauricio, Daniel, Antonio y German!
Valiosísima información y notable el tiempo dedicado desinteresadamente a cada respuesta.
Creo que las dos clases merecen el trabajo de probarlas por separado, y que cualquier elección será buena.
Seguramente volveré a molestarlos en enero.
Saludos y feliz 2017
-----Mensaje original-----
De: publicesvfoxpro@googlegroups.com [mailto:publicesvfoxpro@googlegroups.com] En nombre de German Fabrcio Valdez Enviado el: jueves, 29 de diciembre de 2016 1:14 a. m.
Para: publicesvfoxpro@googlegroups.com
sql server maneja rangos de IDs para asignar a cada servidor distribuido, supongo que los demas motores tendran algo similar para luego mezclar los registros de todas las tablas y que no generen error
el tema es que el ID te identifica un cliente un proveedor unico en toda una red distribuida
por ejemplo anses y pami tienen numeros consecutivos que identifican a cada jubilado o pensionado en todo el pais
de argentina
del tipo bigint supongo por la longitud que tienen
asi que relacionan todo por ese numero
si usas UI para relacionar no tendrias IDs unicos en todo tu sistema distribuido por el pais
Asunto: RE: [vfp] Re: FoxyDB VS. SQLDATA
Muchas gracias, Mauricio, Daniel, Antonio y German!
Valiosísima información y notable el tiempo dedicado desinteresadamente a cada respuesta.
Creo que las dos clases merecen el trabajo de probarlas por separado, y que cualquier elección será buena.
Seguramente volveré a molestarlos en enero.
Saludos y feliz 2017
-----Mensaje original-----
De: publice...@googlegroups.com [mailto:publice...@googlegroups.com] En nombre de German Fabrcio Valdez Enviado el: jueves, 29 de diciembre de 2016 1:14 a. m.
Para: publice...@googlegroups.com
Hola, Antonio
Me refiero a problemas tales como centralizar bases de datos de datos distribuidas, o a usar replicación.
No se puede prescindir del autoincremental, pero la duda es en torno a las ventajas de usarlo como PK.
Nosotros siempre hemos usado el campo ID autoincremental como PK, y personalmente me asombró encontrar en algunos sistemas medianos (como Zeus) campos tales como CEDULA en la tabla CLIENTES definidos como PK.
Saludos!
Hola, Antonio
Después de algunos días he podido retomar la tarea, pero encuentro que sistemáticamente me arroja “Fallo al actualizar la tabla” después de ejecutar:
louuid = odb.uuid()
para obtener el valor y reemplazarlo en la columna ui, char(38)
¿Estoy haciendo algo mal?
Muchas gracias,
De: publice...@googlegroups.com [mailto:publice...@googlegroups.com] En nombre de Antonio Meza
Enviado el: jueves, 29 de diciembre de 2016 11:58 a. m.
Gracias, Antoni o
El código del error es -5 && La cantidad de Campos no es igual a la cantidad de valores
Sólo se produce al ejecutar la función oDb.uuid()
He intentado evitar el uso de la función y cargar un valor arbitrario en el campo UI, y no tuve problemas.
Intenté también correr ejecutar la función, pero no cargar su resultado, sino un valor arbitrario en el campo UI. Se produjo el error.
Desde el código del sistema se actualizan los datos y finalmente se llama la siguiente función para guardar los cambios:
En ésta función, antes de actualizar, se completan algunas columnas referenciales que son homólogas en todas las tablas de la BD.
Te marco en negrita lo que considero relevante:
LPARAMETERS _otablacursorodb, _orefresca, _odevuelveID, _ogeneraotravez, _oarchivoaejecutar
_idlast = 0
odb_connect()
*_uuid010117 = oDb.uuid() && esta comentado, porque intenté correr la función y después usar la variable en replace.
SELECT &_otablacursorodb
REPLACE version WITH version + 1
REPLACE id_ABM_empresas WITH _screen._ID_ABM_EMPRESAS
REPLACE id_ABM_SUCURSAL WITH _screen._ID_ABM_SUCURSAL
REPLACE id_ABM_regiones WITH _screen._ID_ABM_REGIONES
REPLACE id_ABM_usuarios WITH _screen._ID_ABM_USUARIOS
REPLACE id_ABM_ultimo_usuario WITH _screen._ID_ABM_USUARIOS_LAST
REPLACE id_ABM_RUBRO WITH _screen._ID_ABM_RUBRO
REPLACE id_ABM_equipo WITH alltrim(sys(0))
REPLACE ui WITH oDb.uuid() && he probado con la variables en vez de la función.
*&&&&&&&&&&&&&&&&&&&&&&&&&&& GUARDAR &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
IF oDb.CursorChanges(_otablacursorodb)
IF oDb.Update(_otablacursorodb,.t.)
IF oDb.Commit()
IF _orefresca = .t.
IF _odevuelveID = .f.
oDb.Refresh(_otablacursorodb,oDb.id_Last)
_idlast = oDb.id_Last
ELSE
oDb.Refresh(_otablacursorodb)
_idlast = 0
ENDIF
IF _ogeneraotravez = .t.
&&&&&&&& despues de hacer un refresh(), ya no se puede seguir actualizando el cursor &&&&&&&&&&&&&&&&&
IF oDb.CursorClose(_otablacursorodb)
&_oarchivoaejecutar
IF oDb.CursorOpen(_otablacursorodb)
IF oDb.CursorEdit(_otablacursorodb)
ELSE
ODB_commit_errores(4, _otablacursorodb)
RETURN
ENDIF
ELSE
ODB_commit_errores(5, _otablacursorodb)
RETURN
ENDIF
ELSE
ODB_commit_errores(6, _otablacursorodb)
ENDIF
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
ENDIF
ENDIF
ELSE
oDb.Rollback()
ODB_commit_errores(1, _otablacursorodb, ALLTRIM(STR(oDb.error_Code)))
_idlast = 0
ENDIF
ELSE
ODB_commit_errores(2, _otablacursorodb, ALLTRIM(STR(oDb.error_Code))) && 2 No se pudo actualizar la tabla
_idlast = 0
ENDIF
ELSE
ODB_commit_errores(3, _otablacursorodb, ALLTRIM(STR(oDb.error_Code))) && 3 No se detectan cambios en la tabla
ENDIF
RETURN _idlast
Mis disculpas. Se trata de “Update()”
__transactionError = -5 && Error al iniciar una transacción
Grave error, pero sigo sin saber cómo evitarlo.
Gracias, saludos
Hola, Antonio
Justamente es de las primeras pruebas que hice:
Si no llamo a la función odb.uuid(), el update funciona bien.
Gracias, saludos
puede ser el tipo de datos del campo ui, me parece que no es char(38)
char(38) es la sqldata.dll
Antonio:
Yo ejecuto la función antes del update(), para poder colocar ese valor en la columna UI.
La realidad es que si vos no tenés problemas al hacerlo, supongo que tengo que volver a revisar todo y seguir probando.
Gracias. He visto en google que algunos indican tipo binario, y algunos hablan de varchar 36 para MySQL y MariaDB. He probado todas las opciones posibles, pero de todas maneras, el problema me surge al ejecutar odb.uuid() de FoxyDB.
Seguramente se trata de algún defecto en mi entorno, pero hice incluso la prueba más categórica:
1) Le quite el campo UI a la tabla
2) Antes del UPDATE(), ejecuté odb.uuid(),unas líneas más arriba, sin darle utilidad al resultado
3) En UPDATE() se genera el error y no actualiza la tabla
NOTA: si no ejecuto odb.uuid(), los cambios se guardan sin problemas.
Saludos!
De: publice...@googlegroups.com [mailto:publice...@googlegroups.com] En nombre de Antonio Meza
Enviado el: viernes, 6 de enero de 2017 3:51 p. m.
Para: Comunidad de Visual Foxpro en Español <publice...@googlegroups.com>
Asunto: Re: [vfp] Re: OT: Campo UI en Maria DB / Mysql
Algo estas haciendo antes porque ya hice pruebas y no me afecta obtener el UUID() ni antes ni después del update()