Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 3 de 5
Ir a la página Anterior  1, 2, 3, 4, 5  Siguiente
 
Necesito Convertir Archivo, CSV A Una Tabla SQLite3, ¿Cual Es Vuestro Cami...
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Re: Necesito Convertir Archivo, CSV A Una Tabla SQLite3, ¿Cual Es Vuestro Camino Mas Simple? 
 
gambafeliz escribió:  
shordi unas preguntas.

Es necesario esto: tvCampos[n, 2].Text = "11" ¿solo te pregunto?

            Case gb.Currency
                tvCampos[n, 1].text = "Currency"
                tvCampos[n, 2].Text = "11"                     <---
            Case gb.Float
                tvCampos[n, 1].text = "Float"
                tvCampos[n, 2].Text = "11"                    <------
            Case gb.Integer
                tvCampos[n, 1].text = "Integer"
                tvCampos[n, 2].Text = "11"                   <------
            Case db.Date
                tvCampos[n, 1].text = "Date"
            Case Else
                tvCampos[n, 1].text = "Text"

No. Es sólo por dar una longitud preestablecida a los campos numéricos pero no es necesario realmente.
Citar:

Por otra parte si quiero sustituir tu tableview por arrays como lo harías, por ejemplo con un array de dos dimensiones, ¿seria lo correcto?. Y si dices si a lo del código, ¿es suficiente con dos dimensiones?

En el propio código tienes un ejemplo de una manera de hacerlo:
  
    Dim col, arv As New Variant[] 'Aquí definimos dos array de tipo variant
...
...
    For n = 0 To tvCampos.Rows.Max
        arv = New Variant[4]   'aquí inicializamos uno de los array dándole cuatro elementos vacíos
        '---------------desde aquí hasta la siguiente nota le damos valor a los cuatro elementos declarados
        arv[0] = tvCampos[n, 0].Text
        arv[1] = IIf(tvCampos[n, 1].Text = "Serial", "INTEGER PRIMARY KEY AUTOINCREMENT", tvCampos[n, 1].Text)
        If tvCampos[n, 2].Text Then
            arv[2] = Val(tvCampos[n, 2].Text)
        Else
            arv[2] = Null
        Endif
        If tvCampos[n, 3].text Then
            arv[3] = Val(tvCampos[n, 3].Text)
        Else
            arv[3] = Null
        Endif
        '------------------ hasta aquí. Ahora disponemos de arv con cuatro elementos a los que hemos dado valor
        col.Add(arv) ' y añadimos este array como elemento del array col. A partir de ahí ya tienes una tabla con dos dimensiones que puedes nombrar como col[n][i], o recorrer en un bucle for each o for, según te convenga.
    Next
 


Citar:

¿Como se carga un array dos dimensiones en gambas?

------------------------------------------------------------------
He encontrado esto:

" You can create dynamically an array with any number of dimensions and
any size in each dimension, but once instanciated, you cannot modify the
size and the number of dimensions.

The only exception is arrays with one dimension, where the size can be
increased or decreased.

So:
Codice: gambas [Seleziona]

Dim myArray As Integer[]

myArray = New Integer[Expr1, Expr2, Expr3]


If you don't know the number of dimensions at design time, you have to
do that:
Codice: gambas [Seleziona]

Dim myDimensions As Integer[]

myArray = Object.New("Integer[]", myDimensions)


Regards,

--
Benoît Minisini

------------------------------------------------------------

Ambas maneras son válidas, por supuesto. Depende de tu caso. Yo no suelo usar ninguna de ellas. Si conozco el número lo hago como más arriba muesto al crear la instancia de arv y si no conozco el número los voy añadiendo de uno en uno.
Sin saber lo que quieres hacer exactamente no te sé decir qué es lo mejor exactamente.

Citar:


Más...

Como se pasa el formulario y sus controles así como el código a mi proyecto en gambas, ¿tengo que hacerlo a mano o simplemente copiar y pegar o como?

------------------------------------------------------------------
Se me ha ocurrido copiar los archivos CrearImport.class, CrearImport.form y mDB.module de la carpeta .src a mi carpeta .src de mi proyecto. No se si es el método usado por todos ustedes, pero es lo que se me ha ocurrido. Si es incorrecto por favor díganmelo.
------------------------------------------------------------------

La copia de archivos es algo que yo hago mucho, sólo ten en cuenta primero cerrar el IDE para que no haya confusiones.
La manera "oficial" es pulsando botón derecho en el arbol de objetos de la izquierda del IDE y usar la opción "Importar"...
Citar:

Nota final: Al final estoy pensando dejar el tableview y ponerlo invisible y dimensionarlo a un pequeño cuadrito, y así no tengo que cambiar gran parte del código, ¿que opinas?

Te digo lo de antes: como no sé qué quieres hacer no puedo decirte nada.

Saludos
 




===================
No podemos regresar
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Necesito Convertir Archivo, CSV A Una Tabla SQLite3, ¿Cual Es Vuestro Camino Mas Simple? 
 
shordi escribió:  
....
Saludos


Me ha surgido un problema pero ni se si es un problema ya que estoy mas perdido que barco sin arroz. Te explico:

Tienes esto:

Public Sub Form_Open()
    
    Settings.Read(Me)

Public Sub form_Close()
    
    Settings.Write(Me)

Y estoy tan perdido que ni se para que sirve y si influye en algo ponerle en REM (comentarlo)

¿Me lo cuentas por favor?

Nota: Parece que quitando estas dos lineas de Settings funciona bien. Te adjunto 2 imagenes de lo que estoy haciendo.
 



 
última edición por gambafeliz el Domingo, 11 Agosto 2019, 19:57; editado 3 veces 
gambafeliz - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Necesito Convertir Archivo, CSV A Una Tabla SQLite3, ¿Cual Es Vuestro Camino Mas Simple? 
 
gambafeliz escribió:  
shordi escribió:  
....
Saludos


Me ha surgido un problema pero ni se si es un problema ya que estoy mas perdido que barco sin arroz. Te explico:

Tienes esto:

Public Sub Form_Open()
    
    Settings.Read(Me)

Public Sub form_Close()
    
    Settings.Write(Me)

Y estoy tan perdido que ni se para que sirve y si influye en algo ponerle en REM (comentarlo)

¿Me lo cuentas por favor?

Nota: Parece que quitando estas dos lineas de Settings funciona bien. Te adjunto 2 imagenes de lo que estoy haciendo.

Settings.write(me)guarda la arquitectura del formulario (posición, tamaño). Settings.read(me) las restaura.
Así el formulario se abre en "la última posición conocida", como dicen los militares.
Luego miro las imágenes.

Saludos
 




===================
No podemos regresar
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Necesito Convertir Archivo, CSV A Una Tabla SQLite3, ¿Cual Es Vuestro Camino Mas Simple? 
 
Shordi tengo un problemita.

En este código:

    If Not mDB.creatabla(hcon, tablename.Text, col) Then
        Message.Error(Error.Text & "-" & Error.Where)
        Dec Application.Busy
        Return
    Endif

Cuando salta es por que intento crear una tabla que ya existe pero después aunque cambie el nombre solo de la tabla, el botón crear no me funciona y por ahora no veo por que, supongo que es que me falta entender el código o quizás no veo o entiendo algo. ¿Por favor, me ayudas?

Gracias.

Nota: Estoy pensando poner un botón o disparar un evento para limpiar digamos el formulario de la conversión CSV, me puedes decir si es que quizás tu crear un temporal o algo así que debo eliminar antes o que se yo. Es que solo me funciona una sola vez y después tengo que cerrar y abrir de nuevo la aplicación desde el IDE de gambas.
 



 
gambafeliz - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Necesito Convertir Archivo, CSV A Una Tabla SQLite3, ¿Cual Es Vuestro Camino Mas Simple? 
 
gambafeliz escribió:  
Shordi tengo un problemita.

En este código:

    If Not mDB.creatabla(hcon, tablename.Text, col) Then
        Message.Error(Error.Text & "-" & Error.Where)
        Dec Application.Busy
        Return
    Endif

Cuando salta es por que intento crear una tabla que ya existe pero después aunque cambie el nombre solo de la tabla, el botón crear no me funciona y por ahora no veo por que, supongo que es que me falta entender el código o quizás no veo o entiendo algo. ¿Por favor, me ayudas?

Gracias.

Nota: Estoy pensando poner un botón o disparar un evento para limpiar digamos el formulario de la conversión CSV, me puedes decir si es que quizás tu crear un temporal o algo así que debo eliminar antes o que se yo. Es que solo me funciona una sola vez y después tengo que cerrar y abrir de nuevo la aplicación desde el IDE de Gambas.


Error mío (claro, ¿De quién si no?)
Como la carga puede durar un rato según tamaño del .csv, como profilaxis bloqueé todos los eventos del botón hasta que terminase, pero equivoqué el punto donde empezar el bloqueo, con el efecto de que en caso de error no desbloqueaba el botón y lo dejaba inútil.

Desplaza la línea que dice:

a la línea anterior del bucle de carga (la 175, creo)
  If Not mDB.creatabla(hcon, tablename.Text, col) Then
        Message.Error(Error.Text & "-" & Error.Where)
        Dec Application.Busy
        Return
    Endif
    Object.Lock(Last) ' Aquí iniciamos el bloqueo
    If $arcsv.count > 0 Then
        If Not hcon.opened Then hcon.Open()
        pb.Visible = True
        etipb.Visible = True
 

También he añadido esto al final:
      If errores Then
            Message("Hay errores en los datos. Consulte el archivo csv2sqlite.errores en su Escritorio")
            File.Save(User.Home &/ "Escritorio/csv2sqlite.errores", errores)
        Endif
    Endif

Finally

    Object.Unlock(Last)
    Dec Application.Busy

Catch
    Print Error.Text;; Error.Where

End

de forma que no se mantenga el bloqueo caso de un error inesperado durante la ejecución del bucle.
He actualizado el proyecto en el adjunto del inicio de este hilo. Es el 0.0.3, por si te quieres ahorrar el tema de hacerlo tú.

Saludos
 




===================
No podemos regresar
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Necesito Convertir Archivo, CSV A Una Tabla SQLite3, ¿Cual Es Vuestro Camino Mas Simple? 
 
[quote user="shordi" post="45648"]
gambafeliz escribió:  

de forma que no se mantenga el bloqueo caso de un error inesperado durante la ejecución del bucle.
He actualizado el proyecto en el adjunto del inicio de este hilo. Es el 0.0.3, por si te quieres ahorrar el tema de hacerlo tú.

Saludos


Mira shordi no se que decir, muchísimas gracias. Os portáis en este foro que no se ni expresar con palabrejas lo bien que lo hacéis todos. Gracias de verdad. Esto es un foro de personas estupendas.
 



 
gambafeliz - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Necesito Convertir Archivo, CSV A Una Tabla SQLite3, ¿Cual Es Vuestro Camino Mas Simple? 
 
      
 




===================
No podemos regresar
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Necesito Convertir Archivo, CSV A Una Tabla SQLite3, ¿Cual Es Vuestro Camino Mas Simple? 
 
shordi escribió:  


Desplaza la línea que dice:

a la línea anterior del bucle de carga (la 175, creo)
  If Not mDB.creatabla(hcon, tablename.Text, col) Then
        Message.Error(Error.Text & "-" & Error.Where)
        Dec Application.Busy
        Return
    Endif
    Object.Lock(Last) ' Aquí iniciamos el bloqueo
    If $arcsv.count > 0 Then
        If Not hcon.opened Then hcon.Open()
        pb.Visible = True
        etipb.Visible = True
 

También he añadido esto al final:
      If errores Then
            Message("Hay errores en los datos. Consulte el archivo csv2sqlite.errores en su Escritorio")
            File.Save(User.Home &/ "Escritorio/csv2sqlite.errores", errores)
        Endif
    Endif

Finally

    Object.Unlock(Last)
    Dec Application.Busy

Catch
    Print Error.Text;; Error.Where

End

de forma que no se mantenga el bloqueo caso de un error inesperado durante la ejecución del bucle.
He actualizado el proyecto en el adjunto del inicio de este hilo. Es el 0.0.3, por si te quieres ahorrar el tema de hacerlo tú.

Saludos


De momento arreglado con tus indicaciones, Gracias...
 



 
gambafeliz - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Necesito Convertir Archivo, CSV A Una Tabla SQLite3, ¿Cual Es Vuestro Camino Mas Simple? 
 
Hola, shordi

Necesito hacerte una pregunta sobre este programa. En la subrutina "bCargarCabcsv()" es donde determinas el tipo de campo en la base de datos o donde me puede copiar el trozo de código para que lo entienda.

Te voy a decir por que, es que no veo donde tu determinas en un campo con un contenido de fecha cuando es Date o por alguna razón determinas que es Cadena (aunque sea una fecha pero quizás no es válida)

No se si te lo he explicado bien, pero básicamente es por eso, necesito comprenderlo.

Gracias.
 



 
gambafeliz - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Necesito Convertir Archivo, CSV A Una Tabla SQLite3, ¿Cual Es Vuestro Camino Mas Simple? 
 
gambafeliz escribió:  
Hola, shordi

Necesito hacerte una pregunta sobre este programa. En la subrutina "bCargarCabcsv()" es donde determinas el tipo de campo en la base de datos o donde me puede copiar el trozo de código para que lo entienda.

Te voy a decir por que, es que no veo donde tu determinas en un campo con un contenido de fecha cuando es Date o por alguna razón determinas que es Cadena (aunque sea una fecha pero quizás no es válida)

No se si te lo he explicado bien, pero básicamente es por eso, necesito comprenderlo.

Gracias.

El tipo se determina en la línea 103 (la que dice "Select case typeOf(val(...") con la función Val pasando el valor a la función TypeOf
   For n = 0 To dat.Max
        If cbCabeceras.Value Then
            If cbNoComillas.value Then
                tvCampos[n, 0].text = UnQuote(RTrim$(LTrim$(cab[n])))
            Else
                tvCampos[n, 0].text = RTrim$(LTrim$(cab[n]))
            Endif
        Else
            tvCampos[n, 0].Text = "Campo " & Str(n)
        Endif
        Select Case TypeOf(Val(Replace(dat[n], ".", ","))) 'Val reconoce las locales y los números con . los da como texto. Así admite ambos formatos
            Case gb.Float
                tvCampos[n, 1].text = "Float"
                tvCampos[n, 2].Text = "11"
            Case gb.Integer
                tvCampos[n, 1].text = "Integer"
                tvCampos[n, 2].Text = "11"
            Case db.Date
                tvCampos[n, 1].text = "Date"
            Case Else
                tvCampos[n, 1].text = "Text"
        End Select
    Next
 


Echale un ojo a esto:
http://gambaswiki.org/wiki/lang/val?l=es&nh

Saludos
 




===================
No podemos regresar
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
Ocultar¡Este tema fue útil?

 

Elegir valoración:                       

Media de valoración Valoración mínima Valoración máxima Número de valoraciones
10.00 10 10 1
 

Publicar nuevo tema  Responder al tema  Página 3 de 5
Ir a la página Anterior  1, 2, 3, 4, 5  Siguiente

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
No puede descargar archivos
No puede publicar eventos en el calendario



  

 

cron