Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - Psyke1

Páginas: [1] 2 3 4 5 6 ... 9
1
Visual Basic 6 / Re:[DUDA] Error en ADO al poner un WHERE en la consulta
« en: Febrero 02, 2015, 02:00:03 pm »
Buenas amigo,

La primera solución que propones era la que estaba poniendo.

La segunda da el siguiente error:
Código: [Seleccionar]
Dim oConn As New ADODB.Connection
Dim oRS As New ADODB.Recordset

oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" _
& "Data Source=" & Environ("temp") & ";" _
& "Extended Properties=""text;HDR=Yes;FMT=Delimited(,)"";Persist Security Info=False"

oRS.Open "SELECT EDAD FROM [datos.csv] WHERE NOMBRE='MARIO'", oConn, adOpenDynamic, adLockReadOnly
Dim ofield As ADODB.Field

Do Until oRS.EOF
    For Each ofield In oRS.Fields
        MsgBox "Field Name = " & ofield.Name & " Field Value = " & ofield.Value
    Next ofield
    oRS.MoveNext
Loop

Devuelve
Código: [Seleccionar]
-2147467259 (800040005) Error in 'Open' method of '_Recordset' object.
Gracias.

2
Visual Basic 6 / [DUDA] Error en ADO al poner un WHERE en la consulta
« en: Febrero 02, 2015, 12:37:17 am »
Tengo un fichero csv con la siguiente información:

Código: [Seleccionar]
NOMBRE,EDAD,FECHA
MARIO,30,24/12/2002
MARIA,90,24/12/2001
PEDRO,10,24/12/2004

Y quiero hacer una consulta de la siguiente manera:

Código: (vb) [Seleccionar]
Dim oConn As New ADODB.Connection
Dim oRS As New ADODB.Recordset

oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" _
& "Data Source=" & Environ("temp") & ";" _
& "Extended Properties=""text;HDR=Yes;FMT=Delimited(;)"";Persist Security Info=False"

Set oRS = oConn.Execute("select * from datos.csv")
Dim ofield As ADODB.Field

Do Until oRS.EOF
    For Each ofield In oRS.Fields
        Debug.Print "Field Name = " & ofield.Name & " Field Value = " & ofield.Value
    Next ofield
    oRS.MoveNext
Loop

Esto devuelve:
Código: [Seleccionar]
Field Name = NOMBRE Field Value = MARIO
Field Name = EDAD Field Value = 30
Field Name = FECHA Field Value = 24/12/2002
Field Name = NOMBRE Field Value = MARIA
Field Name = EDAD Field Value = 90
Field Name = FECHA Field Value = 24/12/2001
Field Name = NOMBRE Field Value = PEDRO
Field Name = EDAD Field Value = 10
Field Name = FECHA Field Value = 24/12/2004

Pero si intento hacer una consulta del tipo:
Código: (sql) [Seleccionar]
select EDAD from datos.csv where NOMBRE='MARIO'
Me devuelve esto:



¿Qué se me está escapando?
Muchas gracias.

DoEvents! :P

3
Hola Raul, cuánto tiempo amigo!  ;D

Es algo sencillo de hacer, pero complejo de explicar.

La distintas salidas que pusiste. De que dependen? De algun parametro? Deben salir todas a la vez?

  • Las salidas son todas las combinaciones posibles sustituyendo los bloques REDEFINES, por aquellos bloques que están redefiniendo.
  • Deben de salir cada una en un archivo diferente. Es decir, me vale con tener un array que contenga cada una de ellas por separado, y después ya las trato como quiera.

Te paso aquí otro ejemplo de input/outputs, a ver si ves más claro el patrón a seguir.

Código: [Seleccionar]
    01 SUBSCRIBERS.
        05 TYPE-OF-NAME PIC X.
        05 INDIVIDUAL-NAME.
           10 LAST-NAME PIC X(12).
           10 FIRST-NAME PIC X(8).
        05 ADDRESS PIC X(20).
        05 CITY PIC X(15).
        05 STATE PIC X(2).
        05 ZIP PIC X(5).
        05 FILLER PIC X(100).
        05 HELLO REDEFINES FILLER.
          10 HELLO1 PIC X(50).
          10 HELLO2 PIC X(25).
          10 HELLO3 PIC X(25).
        05 STACK REDEFINES FILLER.
          10 STACK1 PIC X(10).
          10 STACK2 PIC X(30).
          10 STACK3 PIC X(60).
        05 HOLA PIC X(20).
        05 DERE REDEFINES HOLA.
          15 DERE1 PIC X(10).
          15 DERE2 PIC X(10).
             20 DELE3 REDEFINES DERE2.
                 25 DELE34 PIC X(10).
        05 LOL PIC 9(9).

Generaría los siguientes archivos:

Código: [Seleccionar]
output 1:

    01 SUBSCRIBERS.
        05 TYPE-OF-NAME PIC X.
        05 INDIVIDUAL-NAME.
           10 LAST-NAME PIC X(12).
           10 FIRST-NAME PIC X(8).
        05 ADDRESS PIC X(20).
        05 CITY PIC X(15).
        05 STATE PIC X(2).
        05 ZIP PIC X(5).
        05 FILLER PIC X(100).
        05 HOLA PIC X(20).
        05 LOL PIC 9(9).

output 2:

    01 SUBSCRIBERS.
        05 TYPE-OF-NAME PIC X.
        05 INDIVIDUAL-NAME.
           10 LAST-NAME PIC X(12).
           10 FIRST-NAME PIC X(8).
        05 ADDRESS PIC X(20).
        05 CITY PIC X(15).
        05 STATE PIC X(2).
        05 ZIP PIC X(5).
        05 FILLER PIC X(100).
        05 DERE REDEFINES HOLA.
          15 DERE1 PIC X(10).
          15 DERE2 PIC X(10).
        05 LOL PIC 9(9).

output 3:

    01 SUBSCRIBERS.
        05 TYPE-OF-NAME PIC X.
        05 INDIVIDUAL-NAME.
           10 LAST-NAME PIC X(12).
           10 FIRST-NAME PIC X(8).
        05 ADDRESS PIC X(20).
        05 CITY PIC X(15).
        05 STATE PIC X(2).
        05 ZIP PIC X(5).
        05 FILLER PIC X(100).
        05 DERE REDEFINES HOLA.
          15 DERE1 PIC X(10).
          20 DELE3 REDEFINES DERE2.
                 25 DELE34 PIC X(10).
        05 LOL PIC 9(9).

output 4:

    01 SUBSCRIBERS.
        05 TYPE-OF-NAME PIC X.
        05 INDIVIDUAL-NAME.
           10 LAST-NAME PIC X(12).
           10 FIRST-NAME PIC X(8).
        05 ADDRESS PIC X(20).
        05 CITY PIC X(15).
        05 STATE PIC X(2).
        05 ZIP PIC X(5).
        05 HELLO REDEFINES FILLER.
          10 HELLO1 PIC X(50).
          10 HELLO2 PIC X(25).
          10 HELLO3 PIC X(25).
        05 HOLA PIC X(20).
        05 LOL PIC 9(9).

output 5:

    01 SUBSCRIBERS.
        05 TYPE-OF-NAME PIC X.
        05 INDIVIDUAL-NAME.
           10 LAST-NAME PIC X(12).
           10 FIRST-NAME PIC X(8).
        05 ADDRESS PIC X(20).
        05 CITY PIC X(15).
        05 STATE PIC X(2).
        05 ZIP PIC X(5).
        05 HELLO REDEFINES FILLER.
          10 HELLO1 PIC X(50).
          10 HELLO2 PIC X(25).
          10 HELLO3 PIC X(25).
        05 DERE REDEFINES HOLA.
          15 DERE1 PIC X(10).
          15 DERE2 PIC X(10).
        05 LOL PIC 9(9).

output 6:

    01 SUBSCRIBERS.
        05 TYPE-OF-NAME PIC X.
        05 INDIVIDUAL-NAME.
           10 LAST-NAME PIC X(12).
           10 FIRST-NAME PIC X(8).
        05 ADDRESS PIC X(20).
        05 CITY PIC X(15).
        05 STATE PIC X(2).
        05 ZIP PIC X(5).
        05 HELLO REDEFINES FILLER.
          10 HELLO1 PIC X(50).
          10 HELLO2 PIC X(25).
          10 HELLO3 PIC X(25).
        05 DERE REDEFINES HOLA.
          15 DERE1 PIC X(10).
          20 DELE3 REDEFINES DERE2.
                 25 DELE34 PIC X(10).
        05 LOL PIC 9(9).

output 7:

    01 SUBSCRIBERS.
        05 TYPE-OF-NAME PIC X.
        05 INDIVIDUAL-NAME.
           10 LAST-NAME PIC X(12).
           10 FIRST-NAME PIC X(8).
        05 ADDRESS PIC X(20).
        05 CITY PIC X(15).
        05 STATE PIC X(2).
        05 ZIP PIC X(5).
        05 STACK REDEFINES FILLER.
          10 STACK1 PIC X(10).
          10 STACK2 PIC X(30).
          10 STACK3 PIC X(60).
        05 HOLA PIC X(20).
        05 LOL PIC 9(9).

output 8:

    01 SUBSCRIBERS.
        05 TYPE-OF-NAME PIC X.
        05 INDIVIDUAL-NAME.
           10 LAST-NAME PIC X(12).
           10 FIRST-NAME PIC X(8).
        05 ADDRESS PIC X(20).
        05 CITY PIC X(15).
        05 STATE PIC X(2).
        05 ZIP PIC X(5).
        05 STACK REDEFINES FILLER.
          10 STACK1 PIC X(10).
          10 STACK2 PIC X(30).
          10 STACK3 PIC X(60).
        05 DERE REDEFINES HOLA.
          15 DERE1 PIC X(10).
          15 DERE2 PIC X(10).
        05 LOL PIC 9(9).

output 9:

    01 SUBSCRIBERS.
        05 TYPE-OF-NAME PIC X.
        05 INDIVIDUAL-NAME.
           10 LAST-NAME PIC X(12).
           10 FIRST-NAME PIC X(8).
        05 ADDRESS PIC X(20).
        05 CITY PIC X(15).
        05 STATE PIC X(2).
        05 ZIP PIC X(5).
        05 STACK REDEFINES FILLER.
          10 STACK1 PIC X(10).
          10 STACK2 PIC X(30).
          10 STACK3 PIC X(60).
        05 DERE REDEFINES HOLA.
          15 DERE1 PIC X(10).
          20 DELE3 REDEFINES DERE2.
                 25 DELE34 PIC X(10).
        05 LOL PIC 9(9).

Muchas gracias, y un saludo.
Doevents!

4
Hola chicos, a ver si alguno me puede ayudar.

Estoy tratando de dividir unas variables COBOL para cada nivel redefine usando awk.

Hay que ver la lectura: http://programacioneinformaticafacil.blogspot.com.es/2011/07/cobol-redefines.html

Me explico:

  • El primera palabra de la línea es el número que indica el nivel.
  • Todos las variables de la líneas siguientes que tengan un nivel inferior, formarán un grupo de variables.
Ejemplo:

Código: [Seleccionar]
10 HOLA.
    15 PILA PIC XX.
        20 DESBORDAMIENTO PIC X.
        20 AMIGOS PIC X.
    15 WHATSUP PIC XX.

  • La segunda palabra de la línea es el nombre del bloque de variables.
  • Un redefines funciona de la siguiente manera:
    REDEFINES NOMBRE_VAR significa que el bloque de variables de NOMBRE_VAR podría ser sustituido por el siguiente grupo de variables.

Estoy tratando de conseguir todas las posibles combinaciones de sustituciones redefines.

Basta de teoría, veamos un ejemplo, con este input:

Código: [Seleccionar]
01 SUBSCRIBERS.
    05 TYPE-OF-NAME PIC X.
    05 FILLER PIC X(100).
    05 HELLO REDEFINES FILLER.
      10 HELLO1 PIC X(50).
      10 HELLO2 PIC X(25).
      10 HELLO3 PIC X(25).
    05 STACK REDEFINES FILLER.
      10 STACK1 PIC X(90).
      10 DERE2 PIC 9(10)
         20 DELE3 REDEFINES DERE2.
             25 DELE34 PIC X(10).
    05 LOL PIC 9(9).

Devolvería estos diferentes outputs:

output 1:

Código: [Seleccionar]
01 SUBSCRIBERS.
    05 TYPE-OF-NAME PIC X.
    05 FILLER PIC X(100).
    05 LOL PIC 9(9).

output 2:

Código: [Seleccionar]
01 SUBSCRIBERS.
    05 TYPE-OF-NAME PIC X.
    05 HELLO REDEFINES FILLER.
      10 HELLO1 PIC X(50).
      10 HELLO2 PIC X(25).
      10 HELLO3 PIC X(25).
    05 LOL PIC 9(9).

output 3:

Código: [Seleccionar]
01 SUBSCRIBERS.
    05 TYPE-OF-NAME PIC X.
    05 STACK REDEFINES FILLER.
      10 STACK1 PIC X(90).
      10 DERE2 PIC 9(10)
    05 LOL PIC 9(9).

output 4:

Código: [Seleccionar]
01 SUBSCRIBERS.
    05 TYPE-OF-NAME PIC X.
    05 STACK REDEFINES FILLER.
      10 STACK1 PIC X(90).
      20 DELE3 REDEFINES DERE2.
             25 DELE34 PIC X(10).
    05 LOL PIC 9(9).


Yo lo he intentado de la siguiente manera:

Código: (bash) [Seleccionar]
#!/bin/bash

awk 'BEGIN {
  i=0;
  j=0;
  ant_l=99;
} {

  campo=$4;

  if ($0 ~ /REDEFINES/) {
    lvl=$1;
    if (lvl < ant_l) {
      ant_l=lvl
    }
    if ($1 > ant_l) {
      arr[j]=arr[j-1]"\n";
    } else {
      for (x=0; x < (i-1); x++) {
        arr[j]=arr[j] arrbase[x]"\n";
      }
    }
    arr[j]=arr[j] $0"\n";
    j++;
  } else if ($1 > ant_l) {
    arr[j-1]=arr[j-1] $0"\n";
  } else {
    arrbase[i]=$0;
    ++i;
  }
}

END {
  for (x=0; x<i; x++){
    print arrbase[x]
  }
  for (x=0; x<j; x++){
    print arr[x]
  }
}' "$1"

Y este es el resultado:


Código: [Seleccionar]
01 SUBSCRIBERS.
  05 TYPE-OF-NAME PIC X.
  05 FILLER PIC X(100).
  05 LOL PIC 9(9).

01 SUBSCRIBERS.
  05 TYPE-OF-NAME PIC X.
  05 HELLO REDEFINES FILLER.
    10 HELLO1 PIC X(50).
    10 HELLO2 PIC X(25).
    10 HELLO3 PIC X(25).

01 SUBSCRIBERS.
  05 TYPE-OF-NAME PIC X.
  05 STACK REDEFINES FILLER.
    10 STACK1 PIC X(90).
    10 DERE2 PIC 9(10)

01 SUBSCRIBERS.
  05 TYPE-OF-NAME PIC X.
  05 STACK REDEFINES FILLER.
    10 STACK1 PIC X(90).
    10 DERE2 PIC 9(10)

      20 DELE3 REDEFINES DERE2.
        25 DELE34 PIC X(10).

Obviamente, el algoritmo está mal planteado, y no devuelve el resultado esperado.
¿Algún awk hacker en la sala?  :rolleyes:
O al menos alguna pista para desarrollar el algortimo.

Gracias.
DoEvents! :P

5
Bases de Datos / Re:¿Crear vistas temporales en php+mysqli ?
« en: Febrero 22, 2013, 05:01:58 am »
Gracias por responder raul, la subselect en sí es bastante simple, es del tipo:
Código: (SQL) [Seleccionar]
select id_product from products where id_city = 4
Se repite 4 veces en todas las consultas que tengo que hacer por cada operación.
Siendo una query tan simple, ¿crees que me merecería la pena?

DoEvents! :P

6
Bases de Datos / ¿Crear vistas temporales en php+mysqli ?
« en: Febrero 21, 2013, 06:01:37 pm »
Hola a todos, planteo una duda que yo creo que es bastante simple. He buscado, pero todavía no he encontrado una solución.

Tengo un sistema de usuarios en el cual se repite mucho una subconsulta, la cual varía según una opción que elije.
Quería saber si hay alguna forma de guardar el resultado para no tener que perder tiempo y repetir código.

Estuve buscando información y las vistas hacen lo que necesito. El problema es que son generales puesto que afectan a toda mi base de datos y quedan guardadas, así que después las tendría que borrar. :'(

Busco la manera de hacer algo así como una vista temporal individual para cada usuario.

Espero haberme explicado bien.
Gracias.

7
Bases de Datos / Re:[mySQL] ¿Simplificar esta consulta?
« en: Febrero 21, 2013, 05:10:15 pm »
Gracias por la ayuda raul. No te preocupes, volví a repasar y simplifiqué la forma de hacerlo. :)

DoEvents! :P

8
Bases de Datos / Re:[mySQL] ¿Simplificar esta consulta?
« en: Febrero 15, 2013, 05:20:33 pm »
Gracias por responder raul.
Resulta que repasando el esquema que tengo me di cuenta de que lo que necesito es otra cosa diferente. :(

Dados v1 y v2:
Sacar la fila anterior más pequeña y posterior más grande, y todas las filas que tengan el rango entre v1 y v2.

No parece muy difícil. :P
Esta vez, creo que me expliqué bien y todo. :)


DoEvents! :P


9
Bases de Datos / Re:[mySQL] ¿Simplificar esta consulta?
« en: Febrero 15, 2013, 01:16:12 pm »
Lo siento, me expliqué mal. Los valores de mi consulta son correctos. ::) :-\

Lo que quiero es que si los valores que introduzco son más pequeños que los que hayan en la tabla, entonces retornará la fila con cm_min y cm_max menores. :P Te pongo unos ejemplos:


Para estos valores:
Código: [Seleccionar]
SET @v1=8, @v2=9;Debería de devolver el mayor rango de la tabla, en este caso el que tiene el id 7 (12, 14)

Y para estos otros valores:
Código: [Seleccionar]
SET @v1=99, @v2=109;Debería de devolver el mayor rango de la tabla, en este caso el que tiene el id 5 (83, 86)


¿Me explico? :)
¡Muchas gracias!

DoEvents! :P



EDIT:
Igual no me queda otra que hacerlo con varias consultas. Porque quiero que para estos valores:

Código: [Seleccionar]
SET @v1=80, @v2=99;
Ningún registro de la tabla comprende el número 80. En este caso mi código me devuelve el id 5, pero si el número de comienzo está desierto, quiero que me saque el segundo más grande en la misma consulta también, ¿me explico?

Hay que ver como me cuesta expresarme siendo una cosa tan sencilla. ;D

DoEvents! :P

10
Bases de Datos / Re:[mySQL] ¿Simplificar esta consulta?
« en: Febrero 15, 2013, 09:59:44 am »
Creo que tengo la solución a lo que quería hacer.

También quería sacar el valor más bajo y/o el más alto en en caso de que estuviera fuera de los rangos.
Mira:
http://sqlfiddle.com/#!2/83e93/174/1

¿Eso lo puedes simplificar? :P

DoEvents! :P

11
Bases de Datos / [mySQL] ¿Simplificar esta consulta?
« en: Febrero 15, 2013, 08:28:39 am »
Tengo la siguiente tabla y consulta: Ver en SqlFiddle.
Ahí extraigo todos los ids de los elementos que tienen cm_min y cm_max dentro del rango ingresado, en este caso 13 y 66.

¿Se os ocurre alguna forma de simplificar esta consulta?

Gracias.
DoEvents! :P

12
Visual Basic 6 / Re:Forma más inteligente de almacenar hash de archivos
« en: Diciembre 12, 2012, 02:58:08 pm »
¡Qué buena solución LeandroA! :) Con eso me ahorras muchísimos recursos.
Ahora sólo queda solucionar el tema de comprobar si un archivo ya ha sido copiado en la carpeta. Así a ojo serán unos 10.000 en total. ¿Alguna idea con esto?

Gracias!

DoEvents! :P

13
Visual Basic 6 / Re:Forma más inteligente de almacenar hash de archivos
« en: Diciembre 07, 2012, 03:48:34 pm »
En principio la aplicación es malware.  ::)
Pues voy a ver algún ejemplo de lo que dices porque nunca me tocó usar bases de datos en vb6. :P
¡Gracias! ;D

DoEvents! :P

14
Visual Basic 6 / Forma más inteligente de almacenar hash de archivos
« en: Diciembre 07, 2012, 06:35:30 am »
Tengo una carpeta donde se copio muchos archivos.

Archivos que no se pueden repetir. En caso de que hubiera dos con el mismo nombre se renombra el último añadido.
Lo que quiero hacer es poder borrarlos pero que quede un registro de los que he copiado con anterioridad. Así que pensé en:
Sacar el hash MD5 de todos los archivos y guardarlo en un txt. Entonces cada vez que quiero copiar un nuevo archivo leo el txt en busca de su hash, si no lo encuentra añade su hash y se copia, y si lo encuentra no se copia.

El problema es que al ser tanta cantidad de archivos a veces se demora demasiado.
Además para buscarlos utilizo la clase de LeandroA de cFindFiles, pero incluso indicándole que llame al DoEvents me pone el CPU al 50%. :-\

¿Se os ocurre alguna idea para agilizar todo esto? :)

¡Gracias!

15
Visual Basic 6 / Re:No consigo que mi app se ejecute al inicio.
« en: Diciembre 04, 2012, 06:00:44 pm »
No me lo puedo creer: ¡FUNCIONA!

Lo arreglé así:
Código: (VB,27) [Seleccionar]
Option Explicit
 
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Private Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long
Private Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long
 
Private Const HKEY_CURRENT_USER     As Long = &H80000001
Private Const KEY_WRITE             As Long = &H20006
Private Const REG_SZ                As Long = &H1
 
Public Function PutOnStartUp(ByVal sPath As String) As Boolean
Dim hRegkey                         As Long
 
    If RegOpenKeyEx(HKEY_CURRENT_USER, "Software\Microsoft\Windows\CurrentVersion\Run", 0, KEY_WRITE, hRegkey) = 0 Then
        PutOnStartUp = RegSetValueEx(hRegkey, "HolaLeandro", 0, REG_SZ, ByVal sPath, Len(sPath)) = 0
        RegCloseKey hRegkey
    End If
End Function

Private Sub Form_Load()
Dim sPath      As String
Dim sDest      As String
 
    sPath = App.Path & "\" & App.EXEName & ".exe"
    sDest = Environ("APPDATA") & "\Test.exe"
   
    If sDest <> sPath Then
       FileCopy sPath, sDest
   
       If PutOnStartUp(sDest) Then
           Me.BackColor = vbGreen
       Else
           Me.BackColor = vbRed
       End If
    End If
   
    Me.AutoRedraw = True
    Me.Print sPath
    Me.Print sDest
End Sub

Tiene lógica, el error viene de intentar sobrescribir la entrada del registro.
Gracias una vez más. ¡Tienes solución para todo Gallo! ::)

DoEvents! :P

Páginas: [1] 2 3 4 5 6 ... 9