lunes, 26 de octubre de 2015

Módulo CSV ( Importar/Exportar )


Con esto de que estoy trabajando con programas que manejan base de datos y por lógica tablas me veo obligado a programar módulos o clases pues son operaciones repetitivas como la de generar un archivo con formato csv de una tabla X.
Aqui les dejo la parte de exportar... jaja a ver si me sale la de importar.
Espero que les sirva para experimentar y probar..... hagan sus comentarios si lo desean. Saludos.


' gambas module file

' by postapase

Public Sub Exportar(coneccion As Connection, tabla As Table)
Dim Resultado As Result
Dim Ruta, Lista As String
Dim Campo As Field

Dialog.Path = User.Home

If Dialog.SelectDirectory() Then Return

Ruta = Dialog.Path &/ tabla.Name & ".csv"
Print Ruta

Resultado = coneccion.Exec("Select * From " & tabla.Name)

Do While Resultado.Available

For Each Campo In tabla.Fields
Lista &= "\"" & Resultado[Campo.Name] & "\","
Next

Resultado.MoveNext
Lista = Left$(Lista, Len(Lista) - 1) ' elimina la última coma que sobra
Lista &= gb.NewLine
Loop

File.Save(Ruta, Lista)

End

Public Sub Importar()

' pendiente....

End


Llamada al módulo:

Public Sub btnCSVExport_Click()
Dim tabla As Table

tabla = FMain.Conectar1.Tables["deudas"]
CSV.Exportar(FMain.Conectar1, tabla)

End



Código Completo importar/exportar

' gambas module file

' by postapase  (modulo CSV para tabla deudas)

Public Sub Exportar(coneccion As Connection, tabla As Table, dir As String) As Boolean
Dim Resultado As Result
Dim Ruta, Lista As String
Dim Campo As Field

Ruta = dir &/ tabla.Name & ".csv"

Resultado = coneccion.Exec("Select * From " & tabla.Name)

Do While Resultado.Available

For Each Campo In tabla.Fields
Lista &= "\"" & Resultado[Campo.Name] & "\","
Next

Resultado.MoveNext
Lista = Left$(Lista, Len(Lista) - 1) ' elimina la última coma que sobra
Lista &= gb.NewLine
Loop

If Exist(Ruta) Then
Kill Ruta
Wait 0.1
File.Save(Ruta, Lista)
Else
File.Save(Ruta, Lista)
Endif

If Exist(ruta) Then
Return True
Else
Return False
Endif

End


Public Sub Importar(coneccion As Connection, tabla As Table, ruta As String)
Dim Campo As Field
Dim ListaCampos, EsteCampo, ValoresFila, SQL As String
Dim CSV As File
Dim Separados As String[]
Dim FechaIngreso As Date
Dim FechaTermino As Date
Dim EsteMonto, EstaEntrega, EsteSaldo As Integer
Dim Estado As Boolean
Dim EsteMotivo As String
Dim EstaEvolucion As String


For Each Campo In tabla.Fields
ListaCampos &= "\"" & Campo.Name & "\","
Next

ListaCampos = Left$(ListaCampos, Len(ListaCampos) - 1)

coneccion.Delete(tabla.Name)
coneccion.Exec("update sqlite_sequence set seq = 0 Where name =&1", tabla.Name)

CSV = Open ruta For Read

While Not Eof(CSV)

Line Input #CSV, ValoresFila
Separados = Split(ValoresFila)

FechaIngreso = CDate(Replace$(Separados[1], "\"", ""))
EsteMonto = CInteger(Replace$(Separados[2], "\"", ""))
EstaEntrega = CInteger(Replace$(Separados[3], "\"", ""))
EsteSaldo = CInteger(Replace$(Separados[4], "\"", ""))
EsteMotivo = Replace$(Separados[5], "\"", "")
EstaEvolucion = Replace$(Separados[6], "\"", "")
FechaTermino = CDate(Replace$(Separados[7], "\"", ""))
Estado = CBoolean(Replace$(Separados[8], "\"", ""))

SQL = "insert into \"" & tabla.Name & "\" (" & ListaCampos & ") values (&1,&2,&3,&4,&5,&6,&7,&8,&9)"

Print SQL

Try coneccion.Exec(SQL, Null, FechaIngreso, EsteMonto, EstaEntrega, EsteSaldo, EsteMotivo, EstaEvolucion, FechaTermino, Estado)

If Error Then
Print Error.Text
Print Error.Where
Print Error.Code
Endif

Wend

Close #CSV
Deudas.MostrarDeudas()

End


Llamadas al módulo

Public Sub btnCSVExport_Click()
Dim tabla As Table

Dialog.Path = User.Home

If Dialog.SelectDirectory() Then Return

tabla = FMain.Conectar1.Tables["deudas"]
If CSV.Exportar(FMain.Conectar1, tabla, Dialog.Path) Then
Message.Info("Se respaldo correctamente" & gb.NewLine & Dialog.Path &/ tabla.Name & ".csv")
Else
Message.Error("No se pudo respaldar!")
Endif

End

Public Sub btnImportarCSV_Click()
Dim tabla As Table

Dialog.Filter = ["*.csv", "Archivos .csv"]
Dialog.Path = User.Home

If Dialog.OpenFile() Then Return

tabla = FMain.Conectar1.Tables["deudas"]
CSV.Importar(FMain.Conectar1, tabla, Dialog.Path)

End




No hay comentarios.:

Publicar un comentario