Necesito Convertir Archivo, CSV A Una Tabla SQLite3, ¿Cual Es Vuestro Camino Mas Simple?


Goto page Previous  1, 2, 3, 4, 5  Next

Subject: 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

Profile PM  
Subject: 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.

Last edited by gambafeliz on Sunday, 11 August 2019, 18:57; edited 3 times in total

imagenes.zip
Description:  
Download
Filename: imagenes.zip
Filesize: 33.19 KB
Downloaded: 168 Time(s)
imagenes.zip
Description:  
Download
Filename: imagenes.zip
Filesize: 33.19 KB
Downloaded: 168 Time(s)
imagenes.zip
Description:  
Download
Filename: imagenes.zip
Filesize: 33.19 KB
Downloaded: 168 Time(s)

Profile PM  
Subject: 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

Profile PM  
Subject: 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.

Profile PM  
Subject: 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

Profile PM  
Subject: 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.

Profile PM  
Subject: Re: Necesito Convertir Archivo, CSV A Una Tabla SQLite3, ¿Cual Es Vuestro Camino Mas Simple?

Profile PM  
Subject: 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...

Profile PM  
Subject: 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.

Profile PM  
Subject: 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

Profile PM  
Goto page Previous  1, 2, 3, 4, 5  Next

Page 3 of 5


  
You cannot post new topics
You cannot reply to topics
You cannot edit your posts
You cannot delete your posts
You cannot vote in polls
You cannot attach files
You can download files
You cannot post calendar events

   

This is a "Lo-Fi" version of our main content. To view the full version with more information, formatting and images, please click here.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Generation Time: 0.1802s (PHP: -6% SQL: 106%)
SQL queries: 26 - Debug Off - GZIP Enabled