Actualizar tabla MySql desde tabla DBF

316 views
Skip to first unread message

Julio Rossi

unread,
Jul 17, 2012, 6:42:09 AM7/17/12
to publice...@googlegroups.com
Hola amigos del grupo!
A ver si me orientan como hacer esto.

Tengo una tabla DBF con los campos Codigo, Producto y Precio y otra tabla con la misma estructura en MySql.
El campo clave en ambos casos es Codigo.

Estoy haciendo un Scan sobre la tabla DBF y actualizando el resgistro coincidente en MySql.
¿Hay alguna otra forma de hacerlo más eficiente?

Gracias desde ya y un saludo cordial.

Julio Rossi

extremo

unread,
Jul 17, 2012, 9:23:41 AM7/17/12
to publice...@googlegroups.com, julio...@ilt.com.ar
No, no hay otra forma.

Bendiciones

mpulla

unread,
Jul 17, 2012, 9:50:11 AM7/17/12
to publice...@googlegroups.com, julio...@ilt.com.ar

Hola Julio.

Te pongo un ejemplo en Sql Server.

Saludos.
Mauricio

En el evento click del boton grabar tengo:

SELECT Pvt
CURSORTOXML('Pvt', 'lcXml')
lcAnswer = ''

IF _Screen.odBCTALK.odbcopen()
    =sqlexec(_Screen.odBCTALK.iOdbchandle, "Exec spUI_ItemPVt ?lcXml, ?@lcAnswer")
    _Screen.odBCTALK.odbcclose()
ENDIF

--SP
ALTER Procedure [dbo].[spUI_ItemPVt] @ctXml xml, @tcErrMsg As nVarchar(250) = null out
As
Declare @ihXmlDoc Int
Declare @tblPvt Table(iStockId Int, iPrecioId Int, yValor money)
Set @tcErrMsg = ''

BEGIN TRY
  EXEC sp_xml_preparedocument @ihXmlDoc OUT, @ctXml --Preparo handle
  Insert Into @tblPvt (iStockId, iPrecioId, yValor)
  Select istockid, iprecioid, yvalor
   From OPENXML (@iHXmlDoc, '/VFPData/pvt')
        WITH (istockid int './istockid', iprecioid int './iprecioid', yvalor Money './yvalor')
  EXEC sp_xml_removedocument @ihXmlDoc
 
  BEGIN TRANSACTION

    Insert Into Inv_ItemPvt (iIdItemStock, iIdTipPrecio, yValor)
    select A.iStockId, A.iPrecioId, A.yValor
     from @tblPvt A
          left outer join Inv_ItemPvt
          on a.iStockId = Inv_ItemPvt.iIdItemStock and a.iPrecioId = Inv_ItemPvt.iIdTipPrecio
      where Inv_ItemPvt.iIdItemStock is null

    Update Inv_ItemPvt
     Set yValor = t.yValor
      From Inv_ItemPvt
           Inner Join @tblPvt As t On Inv_ItemPvt.iIdItemStock =  t.iStockId And Inv_ItemPvt.iIdTipPrecio = t.iPrecioId
   COMMIT TRANSACTION
END TRY

BEGIN CATCH
 Set @tcErrMsg = ERROR_MESSAGE()

 IF @@TRANCOUNT > 0
     ROLLBACK TRANSACTION
END CATCH;

Daniel Sánchez

unread,
Jul 17, 2012, 10:05:45 AM7/17/12
to publice...@googlegroups.com
También podrías generar un archivo de texto csv con los datos de los campos y su contenido y luego importar en mysql, al menos en sqlserver existe importar no se en mysql, pero igual hay procesos que no solo es cuestión de pasar los datos como con los catálogos de productos, clientes, proveedores y otros, si no que se tiene que relacionar como en el caso de las tablas cabecera detalle, ya que en la cabecera tendremos posiblemente un campo de clave única que se relaciona con el detalle y eso si debe realizarse adicionando el registro cabecera obteniendo el campo clave y recién pasar los detalles con ese campo clave.

Saludos


--
Daniel Sánchez Escobar
Investigación y Desarrollo
Reset Software & Sistemas
Móvil +051-949398047
Trujillo - Perú

Fox Learner

unread,
Jul 17, 2012, 10:50:07 AM7/17/12
to publice...@googlegroups.com, julio...@ilt.com.ar
Al menos el framework phpmyadmin de MySql que viene con el Xampp si trae la opción de importar csv's..

Saludos!
MYSQL IMPORT.PNG

Julio Rossi

unread,
Jul 17, 2012, 11:25:22 AM7/17/12
to publice...@googlegroups.com
Gracias a todos. Pero tal vez me expresé mal.
Algo veo sobre el tema en lo que me responde MPulla.
Lo que necesito es actualizar el campo Precio en MySql con el campo Precio en DBF para los campos coincidentes de Codigo (en ambas tablas)

Lo que hago ahora es:

Select DBF
Scan
Actualizo campo MySql.Precio con DBF.Precio si MySql.Codigo = DBF.Codigo
Endscan

Gracias de nuevo.
Un saludo.

Julio Rossi
--
 
 
 


Reply all
Reply to author
Forward
0 new messages