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

3 comentarios :

  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ú

    ResponderBorrar
    Respuestas
    1. Hola, no es la cantidad de registros, es el largo de la cadena que se forme.
      Yo logre insertar 200,000 registros

      Esto fue lo que encontré en la web.

      "Entre un par de comillas no puede haber mas que 255 carácteres. La misma
      restriction que el tamaño maximo de una columna de una tabla en VFP.
      El maximo para una variable de una cadena de caractéres es cerca 18,000,000
      bytes. Puedes concatenar muchos "xxxxx"+"zzzzz". "
      -Anders

      Borrar
  2. cuando uso con campos numéricos no funciona la rutina, si me dieran una manito

    ResponderBorrar

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