Este foro usa cookies
Este foro utiliza cookies para almacenar su información de inicio de sesión si está registrado y su última visita si no lo está. Las cookies son pequeños documentos de texto almacenados en su computadora; las cookies establecidas por este foro solo se pueden usar en este sitio web y no representan ningún riesgo de seguridad. Las cookies en este foro también rastrean los temas específicos que ha leído y la última vez que los leyó. Si Ud. continúa navegando, entenderemos que acepta todas las cookies.

Se almacenará una cookie en su navegador, independientemente de la elección, para evitar que se le vuelva a hacer esta pregunta. Podrá cambiar la configuración de sus cookies en cualquier momento utilizando el enlace en el pie de página.

El foro antiguo se encuentra accesible desde https://foro.gambas-es.org en modo de solo lectura.

Últimos temas

Estadísticas del foro
  • Mensajes del foro:3,405
  • Temas del foro:595
  • Miembros:118
  • Último miembro:HenryGuzman


Enviado por: Shell
Hace 1 hora
Foro: Bases de Datos
- Sin respuestas

Buenas!.

Tengo un archivo de texto que tiene tropecientas mil líneas con este formato:

Cita:02/29/16|901120|TheZone/files/_2016/Break (1986)(Martin Aberle)[aka Demolition] [not in tosec].adf

Fijaros en la fecha. Es MM/DD/YY ó M/D/Y.

Según tengo entendido Sqlite3 o SQL trabaja con el formato. Y/M/D
En principio usé la aplicación DB Browser for SQLITE e importe el archivo como CSV y le dije que el separador era "|"
Las fechas se encuentran desordenadas.

La estructura por defecto de la base de datos era:
field1 - campo de texto ( Donde va las fechas)
field2 - campo tipo entero ( Donde va el tamaño del archivo)
field3 - campo de texto ( Donde va el nombre del archivo ).

Buscando, encontré que si quiero mostrar solamente la columna de las fechas podía hacer esto:
Intenté hacer la consulta de esta forma para obtener solo las fechas de la base de datos.

SQL
  1. SELECT strftime(fecha,'%Y-%m-%d') FROM JuegosAmiga;



El resultado fue una lista nula.

Así que intenté primero cambiar del archivo de texto cada línea el formato de fecha.
De M/D/Y a Y/M/D.

Como me defiendo más con Gambas y no quería complicarme con Awk o Sed  lo hice de esta forma:
( La codificación del texto es en latin1, así que cambié cada línea a utf-8)

GAMBAS
  1. Public Sub Form_Open()
  2.  
  3.   Dim contenidotexto As String
  4.   Dim contenidomodificado As String
  5.   Dim acontenido As String[]
  6.  
  7.   contenidotexto = File.Load(User.Home &/ "Descargas/filelist.txt")
  8.   acontenido = Split(contenidotexto, gb.NewLine, "", True)
  9.   contenidomodificado = CambiarFechaDeLineas(acontenido)
  10.   File.Save(User.Home &/ "Descargas/filelist3.txt", contenidomodificado)
  11.  
  12.  
  13. Public Function CambiarFechaDeLineas(contenido As String[]) As String
  14.  
  15.   ' Modifica el comienzo de la línea, sustituyendo el formato de la fecha
  16.  
  17.   Dim linea As String
  18.   Dim otralinea As String
  19.   Dim cambiofecha As String
  20.   Dim salida As String
  21.  
  22.   Dim datos As String[]
  23.   Dim unafecha As Date
  24.  
  25.   For Each linea In contenido
  26.     datos = Split(Conv(linea, "latin1", "utf-8"), "|")
  27.     unafecha = CDate(datos[0])
  28.     otralinea = Format(unafecha, "yy/mm/dd")
  29.     cambiofecha = Replace(linea, datos[0], otralinea)
  30.     salida &= cambiofecha & gb.NewLine
  31.     datos.Clear
  32.   Next
  33.  
  34.   Return salida
  35.  



Y obtengo una salida, ejemplo de línea de esta forma.
Cita:02/29/16|901120|TheZone/files/_2016/Break (1986)(Martin Aberle)[aka Demolition] [not in tosec].adf
a
16/02/29|901120|TheZone/files/_2016/Break (1986)(Martin Aberle)[aka Demolition] [not in tosec].adf

Esta vez utilicé la consola de sqlite3. Y usé estas instrucciones. ( La cosa es aprender sql ).
Cita:sqlite> CREATE TABLE JuegosAmiga(
   ...> fecha INTEGER NOT NULL,
   ...> size INTEGER NOT NULL,
   ...> nombre TEXT NOT NULL
   ...> );
sqlite> .mode csv
sqlite> .separator |
sqlite> .import filelist3.txt JuegosAmiga
sqlite> .save mibase.sqlite3
sqlite> .exit

E intente volver a ejecutar la sentencia sql que os comenté al principio. La salida volvió a ser la misma. Nula en todos los registros.

[Imagen: ZP8o2BZ.png]

¿ Cuál es el problema de las fechas ?. He invertido la instrucción pero tampoco es la solución.
Otra es que salga como titulo de la cabecera de la columna, la función, que cosa más rara.

Os muestro el enlace que estoy siguiendo. Primero una en español que no me solucionó el problema. Que parece muy completa.

Función strftime para dar formatos a fechas y horas

La taba se crea las fechas como texto.

Y ahora la de inglés.

SQLite Strftime() Function

Espero que el problema no sea la conversión del archivo.

Saludos

Imprimir


Enviado por: Shordi
Hace 2 horas
Foro: Controles/Librerías/Componentes
- Sin respuestas

Aporto aquí ViewChooser, una pequeña extensión de Dirchooser. Dirchooser no expone los métodos Mode, que define el tipo de selección que se le puede hacer, ni Selection, que es un array de los items seleccionados del Treeview que contiene. Esta clase extiende Dirchooser para que estos métodos sean accesibles.

[Imagen: N9cIraG.png]

Espero que os sea útil.

Saludos

Imprimir


Enviado por: Shell
16-09-2021, 14:42
Foro: General
- Respuestas (2)

Buenas!.

Buscando una aplicación que hace uso de una base de datos, encontré un error en como presentaba un formulario al comenzar la aplicación.
Se trata de que al iniciar la aplicación muestre un formulario con una imagen y luego se cierre el formulario dando paso a otro formulario.

Lo extraño fue. Que ese formulario de presentación al mostrar la imagen, el formulario se iba a la esquina superior izquierda y no se centraba.
Ese código estaba en el evento Open. Puede que del cambio de QT4 a QT5 haya influido. La hice en el 2016.

Os muestro un ejemplo parecido al del formulario.

GAMBAS
  1. Private cuentasegundos As Integer
  2.  
  3. Public Sub Form_Open()
  4.  
  5.     
  6.   With Timer1
  7.     .Delay = 1000
  8.     .Start()
  9.    
  10.    'Código que se quiera añadir. Como es el del evento activate para probar efecto
  11.    
  12.  
  13. Public Sub Timer1_Timer()
  14.  
  15.   If cuentasegundos = 2 Then
  16.     Timer1.Stop
  17.     Me.Close
  18.   Else
  19.     cuentasegundos += 1
  20.  
  21.  
  22. Public Sub Form_Activate()
  23.  
  24.   Dim ppicture As New Picture
  25.   Dim nomimagenes As String[]
  26.   Dim ruta As String
  27.  
  28.   'Sin la creación de un paquete de instalación, temporalmente uso el directorio de la aplicación para las imágenes
  29.   ruta = Application.Path &/ "Imagenes/"   
  30.   nomimagenes = Dir(ruta, "*.png")
  31.  
  32.   ppicture = Picture.Load(ruta & nomimagenes[Rand(nomimagenes.Max)])
  33.  
  34.   With PictureBox1
  35.     .Picture = ppicture   
  36.     .Expand = True
  37.  
  38.   With Me
  39.     .Center()
  40.     .Arrangement = Arrange.Fill
  41.     .W = ppicture.W
  42.     .H = ppicture.H
  43.  



Como veis el Timer se dispara en el evento Load, en realidad antes se ejecuta el evento actviate y luego va al código del timer.
Podría hacer que el código de mostrar la imagen fuese en el load, pero entonces no estaría centrado el formulario.

Espero no repetirme, ya que puede parecer común.

Saludos

Imprimir