2 de enero de 2006

Inserción Masiva de Registros de VFP a MySQL

Aquí una pequeña rutina al vapor para insertar un cursor a una tabla de MySQL de forma ágil y rápida.
CREATE CURSOR csrTEMPORAL(campo1 C(100), campo2 C(100), cAMPO3 C(100), CAMPO7 C(100))
FOR I = 1 TO 150
  INSERT INTO csrTEMPORAL VALUES(CDOW(DATE()+i),CDOW(DATE()+i+1),CDOW(DATE()+2),CDOW(DATE()+3))
ENDFOR
cDataSource = "Test"
cUserName = "root"
cPassword  = "root"
ConnectionString = [DRIVER={MySQL ODBC 3.51 Driver};SERVER=localhost;DATABASE=] + ;
  cDataSource + [;USER=] + cUserName + [;PASSWORD=] + cPassword + [;OPTION=3;]
nConexion  = SQLSTRINGCONNECT( ConnectionString )
SELECT csrTEMPORAL
lcComando = ""
SCAN
  lcComando = lcComando + [("] + ALLTRIM(csrTEMPORAL.CAMPO1) + [","] + ;
    ALLTRIM(csrTEMPORAL.CAMPO2) + [","] + ALLTRIM(csrTEMPORAL.CAMPO3) + ;
    [","] + ALLTRIM(csrTEMPORAL.CAMPO7) + ["),]
ENDSCAN
lcComando = [INSERT INTO TEMPORAL (CAMPO1, CAMPO2, CAMPO3, CAMPO7) VALUES ] + ;
  SUBSTR(lcComando,1,LEN(lcComando)-1)
? lcComando
lnSegundos = SECONDS()
x = SQLEXEC(nConexion ,lcComando)
MESSAGEBOX(SECONDS()-lnSegundos)
x = SQLEXEC(nConexion, "SELECT * FROM TEMPORAL", "csrTemporalSQL")
x = SQLDISCONNECT(0)
Lic. J. Enrique Ramos Menchaca
Guadalajara, Jalisco, México

1 comentario :

  1. hola, he intentado insertar con esta rutina 10800 registros. Al parecer existe un limite de registros en la inserción masiva.
    Con esta misma rutina, utilice una sub rutina tomando varios bloques de 3000 registros, logrando insertar los 10800 registros. Sera por lo extenso que es la linea. Creo q lo mejor y lo mas seguro seria considerar bloques de 1000

    Frank López
    Iquitos-Perú

    ResponderEliminar

Los comentarios son moderados, por lo que pueden demorar varias horas para su publicación.