tincho 15-08-2022, 20:34
Hola.
Resulta que tengo una tabla "recipientes" con una lista de recipientes y en esta existen dos campos que apuntan a la tabla "unidades".
El caso es que al crear una vista salta un error de ambigüedad ya que le aparece mas de una vez el campo "unidades.name"

¿Como se puede sortear este inconveniente?

LEFT JOIN unidades ON recipientes.wtuom=unidades.idx
LEFT JOIN unidades ON recipientes.tuom=unidades.idx

Código:
CREATE TABLE "unidades" (
    "idx"    INTEGER,
    "name"    TEXT NOT NULL UNIQUE,
    "symbol"    TEXT,
    "type"    INTEGER,
    "basic"    TEXT,
    "other"    TEXT,
    FOREIGN KEY("type") REFERENCES "magnitudes"("idx"),
    PRIMARY KEY("idx" AUTOINCREMENT)
)

CREATE TABLE "recipientes" (
    "idx"    INTEGER,
    "tag"    TEXT NOT NULL UNIQUE,
    "wt"    REAL,
    "wtuom"    INTEGER,
    "temp"    REAL,
    "tuom"    INTEGER
    FOREIGN KEY("wtuom") REFERENCES "unidades"("idx"),
    FOREIGN KEY("tuom") REFERENCES "unidades"("idx"),
    PRIMARY KEY("idx" AUTOINCREMENT)
)

CREATE VIEW "view_recipientes" AS SELECT
    recipientes.idx AS idx,
    recipientes.tag AS tag,
    recipientes.wt AS wt,
    recipientes.wtuom AS wtuom,
    recipientes.temp AS temp,
    recipientes.tuom AS tuom,
    FROM recipientes
LEFT JOIN unidades ON recipientes.wtuom=unidades.idx
LEFT JOIN unidades ON recipientes.tuom=unidades.idx
ORDER BY recipientes.idx,recipientes.tag ASC
Nota: este es un ejemplo resumido pero en el caso real tengo 15 campos apuntando a la tabla unidades.
tincho 13-08-2022, 22:21
Hola amigos.
Finalmente logre crear un control que usando un solo byte permite manejar 8 opciones.
Gracias a Cogier y Vuott que me ayudaron con la codificación del byte con la cadena de texto, pero también a Jerry, Oliver, Fabien de la lista internacional.
Dejo aquí el código por si a alguien le interesa y por supuesto cualquier mejora en la simplificación del código, mejora de eficiencia, etc. es bienvenida.
Espero que les resulte igual de divertido que lo que me resulto a mi.
Este control esta hecho con la intensión de usarlo para editar un campo de una base de datos donde cada Bit es un grupo de trabajo y un usuario puede pertenecer a mas de un grupo, luego solo se gurda un solo Byte en la table.
[Imagen: imuTVSt.gif]
Archivos adjuntos
.gz
options-0.0.2.tar.gz (Tamaño: 15.3 KB Descargas: 0)
.gz
options-0.0.3.tar.gz (Tamaño: 15.51 KB Descargas: 5)
alfonsoC3 13-08-2022, 01:32
Hola, tengo el siguiente código, el detalle es en el evento click del botón (al final), ahí comparto mis dudas


Código:
' Gambas class file
Public iNumRegCatalogo As Integer

Public Sub Form_Open()

  Dim archivo As CsvFile
  Dim iregistro As Integer
  Dim cRegistrosCatalogo As New Collection
 
  'abrir archivo CSV
  archivo = New CsvFile(Application.Path & "/catalogo.csv")
 
  'meter contenido a un collection
  Do Until archivo.Eof
    cRegistrosCatalogo[archivo.Line] = archivo.Read()
    Inc iNumRegCatalogo    
  Loop
 
  ' cerrar archivo
  archivo.Close()
 
  ' agregar columnas al tableview
  TableView1.AddColumn("Descripcion", 500)
  TableView1.AddColumn("Precio", 100)
    
  'agregar un renglón al tabeview para poder introducir datos
  Inc TableView1.Rows.Count

' meter el contenido del collection al tableview
  For iregistro = 2 To iNumRegCatalogo
    
    TableView1[iregistro - 2, 0].Text = cRegistrosCatalogo[iregistro]["descripción"]
    
' la columna del precio, tienen que ir formateada con signo de pesos y alineada a la derecha
    TableView1[iregistro - 2, 1].Text = Format(cRegistrosCatalogo[iregistro]["precio distribuidor sin IVA"], GB.Currency)
    TableView1[iregistro - 2, 1].Alignment = 2
    
' siguiente registro
    Inc TableView1.Rows.Count
  Next

End


Public Sub btnSuma_Click()
 
' calcular la suma de todos los registros del tableview

  Dim iregistro As Integer
  Dim fsuma As Float
  Dim simporte As String
 
  fsuma = 0
  For iregistro = 2 To iNumRegCatalogo
    
    ' sumamos uno a uno cada registro  

    fsuma = fsuma + CFloat(TableView1[iregistro, 1].Text)  

  Next
 
' mostramos la suma
  txtSuma.Text = fsuma

End
    


El problema es que el CFLOAT, marca error, no coinciden los tipos: requerido float, obtenido string en cambio.  

Después de muchas vueltas supuse que el problema era que el contenido del TableView1[iregistro, 1].Text tenia el signo de $, y eso provocaba que el CFLOAT fallara, así que lo quite de esta forma:
   
Código:
simporte = Trim(Mid(TableView1[iregistro, 1].Text, 2, TableView1[iregistro, 1].Text.Len))
fsuma = fsuma + CFloat(simporte)
    
Pero aun así sigue marcando el mismo error, así que mi conclusión es que el problema es el FORMAT,  en lugar de poner comas (,) a los miles pone espacios en blanco  (1,234.56 lo pone 1 234.56)  y el CFLOAT no es capaz de convertirlo.
    
Revisando la instrucción format, las paginas donde lo he consultado, muestran que el resultado coloca comas, no espacios es blanco, alguien que me pueda guiar?
El contenido del tableview lo pongo con formato para la debida presentación, aquí solo pongo dos columnas, pero realmente son varias, y pues tengo que distinguir entre aquellas que representan dinero y las que solo cantidades.  
 

Anexo imagen donde el format no coloca las comas "," sino espacios en blanco.
Archivos adjuntos
Páginas (557):    1 273 274 275 276 277 557   
Bienvenido, Invitado
Tienes que registrarte para poder participar en nuestro foro.
Recordarme?
Miembros: 286
Último miembro: Emilio Uribe
Temas del foro: 1,720
Mensajes del foro: 8,935
Últimos temas
Archivos .ods
Foro: General
Último mensaje por: tincho, 01-07-2025, 18:54
Respuestas: 8 - Vistas: 274
Publicidad
Foro: Sobre gambas-es.org
Último mensaje por: tincho, 01-07-2025, 18:48
Respuestas: 6 - Vistas: 333
Web con gambas, a ver si ...
Foro: WebApp/WebForms
Último mensaje por: tincho, 01-07-2025, 17:47
Respuestas: 41 - Vistas: 32,606
Un sistema de ayudas cont...
Foro: Videotutoriales
Último mensaje por: guizans, 22-06-2025, 19:55
Respuestas: 3 - Vistas: 310
Powered By MyBB, © 2002-2025 MyBB Group.
Made with by Curves UI.