Registro desde dbf a Mysql

125 views
Skip to first unread message

manuel medina

unread,
Feb 28, 2021, 12:33:26 AM2/28/21
to Comunidad de Visual Foxpro en Español
Buenas noches amigos y amigas.

Primero quiero decirle que estoy muy a gusto y agradecido de este foro, es donde he encontrado luz para Visual Foxpro con Mysql.

Ahora quiero saber como puedo enviar el detalle de una factura a una tablas de Mysql.
Tengo una tabla dbf donde almaceno el detalle temporal de cada factura pero cuando termino la factura debo enviar estos registro a Mysql para guardarlo y terminar. 

Podría hacerlo con un SCAN  ... ENDSCAN  para hacerlo un por uno pero espero a ver si hay una forma mas corta y efectiva.

Saludos y pasen buenas noches. 

Marcos Godoy

unread,
Feb 28, 2021, 6:48:51 AM2/28/21
to publice...@googlegroups.com
Manuel depende como estés utilizando el mysql en tus programas.

si lo estás haciendo en forma manual, (es decir que escribes las instrucciones de insert tu mismo)
y no estás haciendo esto a través de cursor adapter, podrías guardar todos los registros en una sola instrucción

la idea es usar también  scan / endscan, pero en vez de ejecutar un insert de sql por cada pasada,
ir generando una instrucción (cargando una variable con la instrucción de insert múltiple ) , y una vez 
terminado el scan ...
ejecutar la instrucción de insert multiple 

INSERT INTO tabla (campo1, campo2, campoN) VALUES ('valor1registro1', 'valor2registro2'), ('valor1registro2', 'valor2registro2'),('valor1registro3', 'valor2registro3')


vlc_instruccion = " INSERT INTO __tabla__ (campoa, campob, campoc) VALUES "
select __cursor 
scan
                 vlc_instrucción = vlc_instruccion + " ( "+ ;
                                                                          dato_para_sql(__cursor.campoa )+ ", "+;
                                                                          dato_para_sql (__cursor.campob) + ", "+;
                                                                          dato_para_sql (__cursor.campoc) + "),"   
endscan 
 
vlc_instruccion = left(vlc_instruccion,len(vlc_instruccion)-1)     && sacamos la ultima coma, ya que no hay mas registros.....

vln_resultado = sqlexec(__conexion,vlc_instruccion)

la función dato_para_sql, deberá armarte el valor del campo en función de si es numérico, numérico con decimales, fecha, caracter

* tener en cuenta que en mysql las fechas se graban con este formato   'aaaa-mm-dd'. 
los campos carácter y fechas tendrás que ponerlos entre ----> ' (comilla simple)
y los numéricos convertidos  a un string con el punto decimal  como '.'       pero  sin comillas....

 * ojo si se tratare de un campo fecha de un motor sql_server. los campos fecha no permiten '0000-00-00'  (fecha vacía)
   valor que si   es permitido en mysql , postgresql...., (ver el manual de sql server, cual es la mínima fecha permitida)

--
Visita el Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/publicesvfoxpro/de59220b-faec-47a9-af0a-07034ce392e6o%40googlegroups.com.


--
Marcos E. D. Godoy
Cel  11 2659 4715

Felix Almonte

unread,
Mar 2, 2021, 9:05:21 AM3/2/21
to publice...@googlegroups.com
hazlo con un insert sql-select y te evitas toda esa escribidera.

insert into tabla (campos......) select campos from tablaorigen where id_campo = valorCampo


Ricardo Soldini

unread,
Mar 2, 2021, 4:37:00 PM3/2/21
to Comunidad de Visual Foxpro en Español

Te comento que yo también llevo poco tiempo usando vfp90 con un Motor de Base de datos externo y después de muchas idas y vueltas opte por utilizar alguna de las librerías que los colegas han puesto a disposición del foro, yo por ahora particularmente utilizo la FoxyDB pero una vez que termine de migrar mi sistema y lo haya implementado en los clientes nuevos , me voy a dar el trabajo de probar la SQLDATA 
estas te facilitan enormemente la vida y me olvide de los dbf solo uso cursores en memoria y toda la informacion en el Motor de la BD.

Entonces la logica es la siguiente  en el load del form que uso para generar las facturas implemeto los  select de las tablas que requiero para trabajar
con  sql para aquelals que son de solo lectura y con query para las que son editables como por ejemplo el encabezado de la factura y el detalle de la factura
todo eso queda en cursores que se cargan en memoria. Luego en el form los trato como he tratado a las dbf toda la vida (solo que son cursores) y cuando se hace click en el comado de guardar ejecuto toda la secuencia de validacion (sobre todo lo que dice relacion con la integidad referencial de las tablas) y luego ejecuto el correspondiente update y al final de todos los update el commit correspondiente o rollback en caso de haber detectado algun problema
Reply all
Reply to author
Forward
0 new messages