alberto-moyano 05-03-2024, 03:57
Hola gente, le estoy dando vueltas al tema y ya me encuentro perdido, tengo la siguiente función para exportar metadados desde una base SQLite, la cuestión es así, en un textbox de un formulario estoy guadando los Id de otra tabla sepadados por espacios, puede ser en cualquier orden (21 12 8 o 2 34 21, etc.) el tema es que cuando el Id es uno solo no tengo problema con la consulta pero si son varios implento un ciclo FOR que no funciona, no me queda claro si el código que escribí esta mal o no es con un FOR como debo resolver esto, les muestro mi código

Gracias de antemano

Código:
'exportamos el archivo de metadatos para PDF libro
Public Sub ExportToMetaPDF()

  Dim s As String
  Dim f As ResultField
  Dim fb As ResultField
  Dim aFields As New String[]
  Dim bFields As New String[]
  Dim w As Integer
  Dim wb As Integer
  Dim buscar As String
  Dim buscarAutor As String
  Dim outputFile As String

  'me conceto a la base de datos
  Conn = Mod_Conn.conectar()

  buscar = "select * from metadatos where nombreArchivo like '%" & rutaNAME & "%'"

  ' Exportar el registro seleccionado
  Contenido = Conn.Exec(buscar)

  aFields.Clear
  For Each f In Contenido.Fields
    aFields.Add(f.Name)
    If Len(f.Name) > w Then
      w = Len(f.Name)
    Endif
  Next

  ' Obtener los IDs separados por espacios
  Dim ids As String[] = Split(Contenido[aFields[5]], " ")

  ' Iterar sobre los IDs y obtener la información correspondiente
  For Each id In ids
    buscarAutor = "SELECT * FROM autores WHERE id = " & id
    ContenidoAutor = Conn.Exec(buscarAutor)

    bFields.Clear
    For Each fb In ContenidoAutor.Fields
      bFields.Add(fb.Name)
      If Len(fb.Name) > wb Then
        wb = Len(fb.Name)
      Endif
    Next

    s = "" ' Inicializa la cadena vacía

    ' Agregar la información al resultado
    s &= ContenidoAutor[bFields[2]] & " " & ContenidoAutor[bFields[1]] & ", "
  Next

  ' Eliminar la coma adicional al final y cerrar la cadena
  s = Left(s, Len(s) - 2) & "},\n"

  ' trabajando con un solo Id este código funciona sin problemaas
  ' buscarAutor = "select * from autores where id = " & Contenido[aFields[5]]
  '
  ' ' Exportar el registro seleccionado
  ' ContenidoAutor = Conn.Exec(buscarAutor)
  '
  ' bFields.Clear
  ' For Each fb In ContenidoAutor.Fields
  '   bFields.Add(fb.Name)
  '   If Len(fb.Name) > wb Then
  '     wb = Len(fb.Name)
  '   Endif
  ' Next

  While Contenido.Available
    s &= "\\hypersetup" & "{" & "\n"

    If Not IsNull(Contenido[aFields[2]]) And Len(Contenido[aFields[2]]) > 0 Then
      s &= "\\XMPLangAlt" & Contenido[aFields[2]] & "\n"
    Endif
    If Not IsNull(Contenido[aFields[3]]) And Len(Contenido[aFields[3]]) > 0 Then
      s &= "\\XMPLangAlt" & Contenido[aFields[3]] & "\n"
    Endif
    If Not IsNull(Contenido[aFields[4]]) And Len(Contenido[aFields[4]]) > 0 Then
      s &= "\\XMPLangAlt" & Contenido[aFields[4]] & "\n"
    Endif

    ' s &= "pdfauthor={" & ContenidoAutor[bFields[2]] & " " & ContenidoAutor[bFields[1]] & "},\n"'

    If Not IsNull(Contenido[aFields[7]]) And Len(Contenido[aFields[7]]) > 0 Then
      s &= "pdfsubject={" & Contenido[aFields[7]] & "},\n"
    Endif

    If Not IsNull(Contenido[aFields[9]]) And Len(Contenido[aFields[9]]) > 0 Then
      s &= "pdfsubtitle={" & Contenido[aFields[9]] & "},\n"
    Endif

    If Not IsNull(Contenido[aFields[10]]) And Len(Contenido[aFields[10]]) > 0 Then
      s &= "pdfauthortitle={" & Contenido[aFields[10]] & "},\n"
    Endif

    If Not IsNull(Contenido[aFields[11]]) And Len(Contenido[aFields[11]]) > 0 Then
      s &= "pdfdate={" & Contenido[aFields[11]] & "},\n"
    Endif

    If Not IsNull(Contenido[aFields[12]]) And Len(Contenido[aFields[12]]) > 0 Then
      s &= "pdfcreationdate={" & Contenido[aFields[12]] & "},\n"
    Endif

    If Not IsNull(Contenido[aFields[13]]) And Len(Contenido[aFields[13]]) > 0 Then
      s &= "pdfmoddate={" & Contenido[aFields[13]] & "},\n"
    Endif

    If Not IsNull(Contenido[aFields[14]]) And Len(Contenido[aFields[14]]) > 0 Then
      s &= "pdfmetadate={" & Contenido[aFields[14]] & "},\n"
    Endif

    If Not IsNull(Contenido[aFields[15]]) And Len(Contenido[aFields[15]]) > 0 Then
      s &= "pdfcopyright={" & Contenido[aFields[15]] & "},\n"
    Endif

    If Not IsNull(Contenido[aFields[16]]) And Len(Contenido[aFields[16]]) > 0 Then
      s &= "pdflicenseurl={" & Contenido[aFields[16]] & "},\n"
    Endif

    If Not IsNull(Contenido[aFields[17]]) And Len(Contenido[aFields[17]]) > 0 Then
      s &= "pdfcaptionwriter={" & Contenido[aFields[17]] & "},\n"
    Endif

    If Not IsNull(Contenido[aFields[18]]) And Len(Contenido[aFields[18]]) > 0 Then
      s &= "pdfcontactaddress={" & Contenido[aFields[18]] & "},\n"
    Endif

    If Not IsNull(Contenido[aFields[19]]) And Len(Contenido[aFields[19]]) > 0 Then
      s &= "pdfcontactcity={" & Contenido[aFields[19]] & "},\n"
    Endif

    If Not IsNull(Contenido[aFields[20]]) And Len(Contenido[aFields[20]]) > 0 Then
      s &= "pdfcontactpostcode={" & Contenido[aFields[20]] & "},\n"
    Endif

    If Not IsNull(Contenido[aFields[21]]) And Len(Contenido[aFields[21]]) > 0 Then
      s &= "pdfcontactcountry={" & Contenido[aFields[21]] & "},\n"
    Endif

    If Not IsNull(Contenido[aFields[22]]) And Len(Contenido[aFields[22]]) > 0 Then
      s &= "pdfcontactregion={" & Contenido[aFields[22]] & "},\n"
    Endif

    If Not IsNull(Contenido[aFields[23]]) And Len(Contenido[aFields[23]]) > 0 Then
      s &= "pdfcontactphone={" & Contenido[aFields[23]] & "},\n"
    Endif

    If Not IsNull(Contenido[aFields[24]]) And Len(Contenido[aFields[24]]) > 0 Then
      s &= "pdfcontactemail={" & Contenido[aFields[24]] & "},\n"
    Endif

    If Not IsNull(Contenido[aFields[25]]) And Len(Contenido[aFields[25]]) > 0 Then
      s &= "pdfcontacturl={" & Contenido[aFields[25]] & "},\n"
    Endif

    If Not IsNull(Contenido[aFields[26]]) And Len(Contenido[aFields[26]]) > 0 Then
      s &= "pdfdocumentid={" & Contenido[aFields[26]] & "},\n"
    Endif

    If Not IsNull(Contenido[aFields[27]]) And Len(Contenido[aFields[27]]) > 0 Then
      s &= "pdfpublication={" & Contenido[aFields[27]] & "},\n"
    Endif

    If Not IsNull(Contenido[aFields[28]]) And Len(Contenido[aFields[28]]) > 0 Then
      s &= "pdfpublisher={" & Contenido[aFields[28]] & "},\n"
    Endif

    If Not IsNull(Contenido[aFields[29]]) And Len(Contenido[aFields[29]]) > 0 Then
      s &= "pdftype={" & Contenido[aFields[29]] & "},\n"
    Endif

    If Not IsNull(Contenido[aFields[30]]) And Len(Contenido[aFields[30]]) > 0 Then
      s &= "pdfpubtype={" & Contenido[aFields[30]] & "},\n"
    Endif

    If Not IsNull(Contenido[aFields[31]]) And Len(Contenido[aFields[31]]) > 0 Then
      s &= "pdfvolumenum={" & Contenido[aFields[31]] & "},\n"
    Endif

    If Not IsNull(Contenido[aFields[32]]) And Len(Contenido[aFields[32]]) > 0 Then
      s &= "pdfissuenum={" & Contenido[aFields[32]] & "},\n"
    Endif

    If Not IsNull(Contenido[aFields[50]]) And Len(Contenido[aFields[50]]) > 0 Then
      s &= "pdfpagerange={" & Contenido[aFields[50]] & "},\n"
    Endif

    If Not IsNull(Contenido[aFields[34]]) And Len(Contenido[aFields[34]]) > 0 Then
      s &= "pdfbookedition={" & Contenido[aFields[34]] & "},\n"
    Endif

    If Not IsNull(Contenido[aFields[35]]) And Len(Contenido[aFields[35]]) > 0 Then
      s &= "pdfisbn={" & Contenido[aFields[35]] & "},\n"
    Endif

    If Not IsNull(Contenido[aFields[36]]) And Len(Contenido[aFields[36]]) > 0 Then
      s &= "pdfissn={" & Contenido[aFields[36]] & "},\n"
    Endif

    If Not IsNull(Contenido[aFields[37]]) And Len(Contenido[aFields[37]]) > 0 Then
      s &= "pdfeissn={" & Contenido[aFields[37]] & "},\n"
    Endif

    If Not IsNull(Contenido[aFields[38]]) And Len(Contenido[aFields[38]]) > 0 Then
      s &= "pdfpubstatus={" & Contenido[aFields[38]] & "},\n"
    Endif

    If Not IsNull(Contenido[aFields[39]]) And Len(Contenido[aFields[39]]) > 0 Then
      s &= "pdflang={" & Contenido[aFields[39]] & "},\n"
    Endif

    If Not IsNull(Contenido[aFields[40]]) And Len(Contenido[aFields[40]]) > 0 Then
      s &= "pdfmetalang={" & Contenido[aFields[40]] & "},\n"
    Endif

    If Not IsNull(Contenido[aFields[41]]) And Len(Contenido[aFields[41]]) > 0 Then
      s &= "pdfbaseurl={" & Contenido[aFields[41]] & "},\n"
    Endif

    If Not IsNull(Contenido[aFields[42]]) And Len(Contenido[aFields[42]]) > 0 Then
      s &= "pdfurl={" & Contenido[aFields[42]] & "},\n"
    Endif

    If Not IsNull(Contenido[aFields[43]]) And Len(Contenido[aFields[43]]) > 0 Then
      s &= "pdfdoi={" & Contenido[aFields[43]] & "},\n"
    Endif

    If Not IsNull(Contenido[aFields[44]]) And Len(Contenido[aFields[44]]) > 0 Then
      s &= "pdfrendition={" & Contenido[aFields[44]] & "},\n"
    Endif

    If Not IsNull(Contenido[aFields[45]]) And Len(Contenido[aFields[45]]) > 0 Then
      s &= "pdfidentifier={" & Contenido[aFields[45]] & "},\n"
    Endif

    If Not IsNull(Contenido[aFields[46]]) And Len(Contenido[aFields[46]]) > 0 Then
      s &= "pdfx={" & Contenido[aFields[46]] & "},\n"
    Endif

    If Not IsNull(Contenido[aFields[47]]) And Len(Contenido[aFields[47]]) > 0 Then
      s &= "pdfversionid={" & Contenido[aFields[47]] & "},\n"
    Endif

    If Not IsNull(Contenido[aFields[57]]) And Len(Contenido[aFields[57]]) > 0 Then
      s &= "pdfkeywords={" & Contenido[aFields[57]] & "},\n"
    Endif
    If Not IsNull(Contenido[aFields[61]]) And Len(Contenido[aFields[61]]) > 0 Then
      s &= "pdfformato={" & Contenido[aFields[61]] & "},\n"
    Endif

    ' el titulo del libro es campo obligatorio por eso no tiene condicional
   s &= "pdftitle={" & Contenido[aFields[84]] & "},\n"

    s &= "pdfcreator={gbTeXpublisher}" & ",\n"
    s &= "pdfproducer={Ecosistema de LaTeX}" & ",\n"
    s &= "unicode=true" & ",\n"
    s &= "bookmarks=true" & ",\n"
    s &= "pdfdisplaydoctitle=true" & ",\n"
    s &= "pdfnewwindow=true" & "\n"
    s &= "}" & "\n"

    Contenido.MoveNext
  Wend

  ' Establece la ruta y el nombre del archivo de salida
  outputFile = File.Dir(TextBox1.Text) &/ "files" &/ "gbTeXmeta-" & File.BaseName(TextBox1.Text) & ".tex"

  ' Guarda el contenido acumulado en un solo archivo
  File.Save(outputFile, s)

  Conn.Close

End
Shell 05-03-2024, 00:16
Buenas!.

Creo que se ha movido la listas de correos a otro servidor. Algo se estuvo comentando.

Lo cierto es que ahora estoy recibiendo mensajes rebotados ( pero  personalmente no he escrito ninguno "aún".).
Si, uso GMail. Rolleyes


No sé si están haciendo pruebas. ¿ Alguien sabe algo ?. Desde el 1 de marzo no he recibido nuevos mensajes.
El único mensaje nuevo tiene este tema.

[Gambas-user] M/L replying to users email not the list

Saludos
Shell 03-03-2024, 00:46
Buenas!.

En el lenguaje Java (supongo que este también lo puede hacer de distintas formas). Los atributos, sus propiedades
pueden ser privadas, ocultas.

Lo curioso de Java es que para esto, cuando hablamos de propiedades, ejemplo, color, edad, (si fueran propiedades) usa el
comando "this", en Gambas usamos "Me" como referencia. Ahora bien, una propiedad creada en Gambas es
"pública". Cuando declaramos una instancia de esa clase o la usamos, "siempre" estamos viendo sus propiedades.

A modo de ejemplo os mostraré algo creado en Gambas. La idea es que hay que "ocultar" sus propiedades o lo que quieran
que solo este al alcance lo que interesa.  (No todo).

He creado una clase Alumno y una clase Alumno2.

Alumno:

Código:
Property nombre As String Use $nombre
Property edad As Integer Use $edad

Public Sub _new(nom As String, ed As Integer)

  Me.nombre = nom
  Me.edad = ed

End

Y ahora parecida, Alumno2

Código:
Private nombre As String
Private edad As Integer

Public Sub _new(nom As String, ed As Integer)

  nombre = nom
  edad = ed

End

Public Function getnombre() As String

  Return nombre

End

Public Sub getedad() As Integer

  Return edad

End

En este último caso, no se puede cambiar la propiedad edad o nombre desde su instancia, (no lo vemos), solo podemos obtenerlo.
Y si queremos ya cambiarlo, pues se crearía un método para ello. O nos olvidaríamos de otros métodos. como getedad o setedad.

En la clase principal he usado esto:

Código:
Public Sub Form_Open()

  Ejemplo1()
  Ejemplo2()

End

Public Sub MostrarAlumnos(lista As Object)

  If lista Is Array Then
    If Object.Type(lista[0]) = "Alumno" Then
      For Each al1 As Alumno In lista
        Print "Nombre: " & al1.nombre & " edad: " & al1.edad
      Next
    Else If Object.Type(lista[0]) = "Alumno2" Then
      For Each al2 As Alumno2 In lista
        Print "Nombre: " & al2.getnombre() & " edad: " & al2.getedad()
      Next
    Endif
  Else
    Print "Esto no es un array"
  Endif
  Print

End

Public Sub Ejemplo1()

  Dim aalumnos As Alumno[]
  Dim al As Alumno

  aalumnos = New Alumno[]

  al = New Alumno("Julio", 15)
  aalumnos.Add(al)
  al = New Alumno("Maria", 21)
  aalumnos.Add(al)
  al = New Alumno("Roman", 12)
  aalumnos.Add(al)

  MostrarAlumnos(aalumnos)

End

Public Sub Ejemplo2()

  Dim aalumnos2 As Alumno2[]
  Dim al As Alumno2

  aalumnos2 = New Alumno2[]

  al = New Alumno2("Julio", 15)
  aalumnos2.Add(al)
  al = New Alumno2("Maria", 21)
  aalumnos2.Add(al)
  al = New Alumno2("Roman", 12)
  aalumnos2.Add(al)

  MostrarAlumnos(aalumnos2)

End

¿ Qué opinan ustedes de la visibilidad de las propiedades o métodos en la programación orientada objeto en "Gambas" ?
Normalmente no uso formas como el ocultar las propiedades y luego mediante un método acceder a esta. Suelo declarar
propiedades. Y ya saben que estas son públicas.

Ah, en Python no existe algo como private o públic, son públicas, todas. En cambio en Java si y en C++ seguramente si.

 

Otra forma, declarar la propiedad como solo lectura.

Código:
Property Read nombre As String Use $nombre
Property Read edad As Integer Use $edad

Public Sub _new(nom As String, ed As Integer)

  $nombre = nom
  $edad = ed

End

Private Function nombre_Read() As String

  Return $nombre

End

Aunque es de solo lectura, es visible. Pero no puedes cambiarla, es casi como una constante, como un variable de clase ( no de instancia ).
Que estas pueden ser públicas y ojo con eso. Imaginar que a la hora de crear una clase, siempre se crea con valores por defecto.
coche , cuatro ruedas y así. Y ahora viene alguien y dice, pues no, ahora voy y le cambio la propiedad de ruedas y digo que el coche
cuando ya se ha creado la instancia, que va a tener seis ruedas. ( Pero ojo, eso solo cambia en la instancia, no la clase ).

[Imagen: 2KKJsCD.png]

Saludos
Archivos adjuntos
.gz
EjemploClasesAlumno-0.0.1.tar.gz (Tamaño: 7.18 KB Descargas: 1)
Páginas (564):    1 102 103 104 105 106 564   
Bienvenido, Invitado
Tienes que registrarte para poder participar en nuestro foro.
Recordarme?
Miembros: 292
Último miembro: DarkWolf
Temas del foro: 1,742
Mensajes del foro: 9,030
Últimos temas
Ordenar en un TableView
Foro: General
Último mensaje por: guizans, Ayer, 23:26
Respuestas: 4 - Vistas: 131
Odio a gb.Report
Foro: General
Último mensaje por: guizans, 02-11-2025, 13:36
Respuestas: 9 - Vistas: 1,571
Reportes de Gambas
Foro: Aplicaciones/Fragmentos de Código
Último mensaje por: Alberto59, 27-10-2025, 16:34
Respuestas: 2 - Vistas: 1,336
Ordenando las carpetas
Foro: Programación en otros lenguajes
Último mensaje por: tercoide, 22-10-2025, 15:57
Respuestas: 0 - Vistas: 117
Powered By MyBB, © 2002-2025 MyBB Group.
Made with by Curves UI.