RESUELTO:error macro no reconoce datos character

Discute sobre las herramientas de la base de datos
Responder
yeliarias
Mensajes: 23
Registrado: Lun May 08, 2017 7:35 pm
Ubicación: Venezuela

RESUELTO:error macro no reconoce datos character

Mensaje por yeliarias »

Buena tarde, necesito 2 ayudas en 1.
1.- Primero tengo 2 tablas que se vincular por una columna que en ambas tablas es tipo character, cuando intento usar la macro que le anexoa continuación, me da un error diciendo que uno de los datos, a comparar en integer, no se como declarar en la macro que el datos es character a pesar que esta declarado como string.
esta es la macro que estoy usando:
Option Explicit

Sub FiltroConsultaEstados( Evento )
Dim oConsulta As Object
Dim oForm As Object
Dim sSQL As String
Dim sCent As String
'El formulario activo
oForm = Evento.Source.Model.Parent
'Hay que pasar el foco a otro control y hacer una pausa en el Runtime (0 milisegundos es suficiente)
'para que el listbox guarde el valor correcto en el origen de datos, si no a veces falla.
'paso el control al campo "id"
Dim oCtrl As Object
oCtrl = oForm.GetByName("titulo")
oCtrl = oForm.Parent.Parent.CurrentController.GetControl(oCtrl)
oCtrl.SetFocus
Wait(0)
'Ahora ya lee el ID del elemento seleccionado
sCent = Evento.Source.Model.BoundField.Value
'Construimos la consulta SQL
sSQL = "SELECT cent FROM public.dm_estados WHERE cent =" & sCent
'La consulta en la que se basa el filtro
oConsulta = ThisDatabaseDocument.DataSource.QueryDefinitions.getByName ("ConEstados" )
'Modificamos la consulta
oConsulta.Command = sSQL
oForm.GetByName("LstMunicipios").Refresh
End Sub
2.- pregunta necesito agregar otra listbox que se conecte con la lstbox de municipios pero ni idea como agregar otra, a este macro
de ante mano muchas gracias
Última edición por yeliarias el Sab Jul 03, 2021 2:08 am, editado 1 vez en total.
LibreOffice 7, Ubuntu 20.04 LTS...
Neftali R
Mensajes: 169
Registrado: Mar Jun 15, 2021 12:48 pm
Ubicación: Venezuela

Re: error macro no reconoce datos character

Mensaje por Neftali R »

Buenas tardes.

Podrías indicar específicamente en que parte del macro te da el error?

Así, viendolo por encima y sin saber exactamente donde se produce el error, yo diría que el error se presenta en la consulta SQL
sCent = Evento.Source.Model.BoundField.Value
'Construimos la consulta SQL
sSQL = "SELECT cent FROM public.dm_estados WHERE cent =" & sCent
En primer lugar, sCent, es un valor, es decir, un número, si quieres un string, tendrías que pedir un string y no un value, y en segundo lugar, cuando preguntas por un condicional que sea un string en SQL tiene que ir entre comillas simples, (').
 Editado: He hecho pruebas en Cacl y me parece que no hay problema con pedir un Value, ya que la variable fue definida como un string, al obtener el value OOB convierte implicitamente el número en un string, entonces, si no me equivoco, el problema tendría que ser que en la condicion (WHERE) no incluiste las comillas simples (') al los lados de sCent 
Saludos.
LibreOffice 7.2.6.2 | Windows 7 Ultimate
yeliarias
Mensajes: 23
Registrado: Lun May 08, 2017 7:35 pm
Ubicación: Venezuela

Re: error macro no reconoce datos character

Mensaje por yeliarias »

Hola buena tarde, la verdad es queno tengo ni idea de como corregirlo, sino te como me comentastes de sCent en un valor intente esto... corregir
sSQL = "SELECT cent FROM public.dm_estados WHERE cent =" & sCent (original)
sSQL = "SELECT cent FROM public.dm_estados WHERE cent =" & "'sCent'"... y
sCent = Evento.Source.Model.BoundField.Value por sCent = Evento.Source.Model.BoundField.String....
y nada de nada sigue dando el mismo error. algo que no comente es que las tablas las tengo en postgresql 12.... y desde alli estoy utilizando las tablas, cargando datos.
mil gracias por tu orientación y en lo qu eme puedas ayudar, no tengo muchos conocimiento en Ooobasic, estoy aprendiendo sobre la marcha.
LibreOffice 7, Ubuntu 20.04 LTS...
Neftali R
Mensajes: 169
Registrado: Mar Jun 15, 2021 12:48 pm
Ubicación: Venezuela

Re: error macro no reconoce datos character

Mensaje por Neftali R »

Buenas tardes,
sSQL = "SELECT cent FROM public.dm_estados WHERE cent =" & "'sCent'"
Si eso no te da un error automáticamente, tal vez tu IDE no sea tan explicito con los errores como se le indico al inicio del módulo.

Necesitas algo como esto.

Código: Seleccionar todo

sSQL = "SELECT cent FROM public.dm_estados WHERE cent ='" & sCent & "'"
O también sirve,

Código: Seleccionar todo

sSQL = "SELECT cent FROM public.dm_estados WHERE cent =" & Chr(39) & sCent & Chr(39)
Y es ese realmente el primer problema, o nos estamos yendo por las ramas? o tampoco estás segura?

Tengo bastante experiencia con OOBasic, y el API de Libre Office, pero de SQL solo tengo un conocimiento rudimentario.

En cuanto al segundo punto, no estoy seguro de entender exactamente que es lo que quieres.

Dejame ver si entiendí bien.

Aquí es donde está el segundo punto, la ListBox de los municipios.
'Modificamos la consulta
oConsulta.Command = sSQL
oForm.GetByName("LstMunicipios").Refresh
Entonces, lo que quieres es que una vez seleccionado el estado, que la ListBox muestre los municipios correspondientes a ese estado, esa es la intención de esas 2 lineas de código.

Asumiendo que estoy en lo correcto, voy a intentar resolver tu problema a nivel lógico/conceptual y ya verás tú como implementarlo, ya que no sé como hacerlo a nivel funcional, yo suelo trabajar con Cacl y muy poco con Base. Si no estoy en lo correcto, por favor aclara ese punto.

Para comenzar, no suelo trabajar con eventos, así que voy a ignorar "oForm", porque la verdad no se como funciona.
oForm = Evento.Source.Model.Parent
....
oForm.GetByName("LstMunicipios").Refresh
En primer lugar, yo buscaría el objeto que representa a la ListBox que quiero actualizar e identificaría en que propiedad está almacenada la información que despliega de la misma. No sé como sea, si es una cadena de caracteres con un separador, o es otro objeto, si es una cadena de caracteres con un separador, la actualización es sumamente sencilla, si es un objeto, ya es más complicado.

Si es una cadena de caracteres, entonces: (asumiendo que tengo una tabla con una lista de los municipios por estados)

1. Hago una consulta a la tabla de municipios.
2. Con el resultado de esa consulta, armo un string que tenga la misma estructura del string de la ListBox.
3. Reemplazo el string de la ListBox.

Ejemplo
Estado seleccionado = Aragua
Contenido del ListBox = "CaracasMun1,CaracasMun2,CaracasMun3,..."

Nota: Yo para conectarme con las bases de datos desde calc (que es lo que yo hago) utilizo el servicio "com.sun.star.sdb.DatabaseContext", método que aprendí en el libro de Mauricio. Tú como estás trabajando directamente desde Base utilizas un proceso diferente que sinceramente, desconozco.

Código: Seleccionar todo

sSQL = SELECT NombreDeMun FROM Tbl_MunicipiosPorEstados WHERE Estado = 'Aragua'
oDBC = CreateUnoService ("com.sun.star.sdb.DatabaseContext")
oDB = oDBC.getByName(DataBase)
oConexion = oDB.getConnection ( "" , "")
oDeclaracion = oConexion.createStatement()
oResultado = oDeclaracion.executeQuery ( sSQL )
Do While oResultado.next
sNuevaListBox = oResultado.String(0) & ","
Loop
'Para quitar la coma del final
sNuevaListBox = Left(sNuevaListBox,Len(sNuevaListBox)-1)
oListBox.setString(sNuevaListBox)
oDeclaracion.close()
oConexion.close()
oDeclaracion = Nothing
oConexion = Nothing
Si la lista de la ListBox es un objeto en si mismo, tendría que ver que métodos y Propiedades tiene ese objeto y de ahí ir tirando.

Código: Seleccionar todo

MsgBox Join(Split(ListBox.List.Dbg_Methods,";"),Chr(13))
MegBox Join(Split(ListBox.List.Dbg_Properties,";"),Chr(13))
Espero que esto te sea de ayuda, nos compartes la solución si la logras encontrarla.
LibreOffice 7.2.6.2 | Windows 7 Ultimate
yeliarias
Mensajes: 23
Registrado: Lun May 08, 2017 7:35 pm
Ubicación: Venezuela

Re: error macro no reconoce datos character

Mensaje por yeliarias »

Hola neftali r, iluminaste tanto mi oscuridad que quede deslumbrada, mil gracias, intento desbloquear me y entiendo lo lógica de lo que me explicas, como creó ya comenté mi lado fuerte no es programar Ooobasic es nuevo para mi, y estoy aprendiendo sobre la marcha, consulto mucho este foro, si como mencionaste los código de Estados, se asocian a los municipios por estos son los siguientes dentro de la división político territorial de Venezuela, y los municipios a su vez se dividen en parroquias. Mi lista seleccionas el estado la lista municipios solo te debe mostrar los municipios pertenecen al estado y luego las parroquias solo las que pertenecen a los municipios del estado, por ahora lo que necesitamos termina en municipios, no es de nuestro interés declarar esos códigos como números no queremos que Distrito Capital aparezca 1 sino 01...Municipio Libertador el 0101, los primeros 2 ya te dicen a que estado pertenece... Ya que esta identidad forma parte de los códigos catastrales... La base de datos que estoy haciendo es para registrar en digital en inventario de la mapoteca, mientras otro grupo esta haciendo el diseño de la manteca virtual, voy a corregir tus sugerencia y si esta a bien, me gustaría subirla y que con tu ayuda salir de esta bloqueo que me encuentro... Es decir, entiendo MUY bien lo que me dices, pero no veo como hacerlo. Espero no causar molestia al foro se que es una comunidad de ayuda, aprendizaje y orientación para hacer mejores practicas al uso de las herramientas informáticas. Ten una buena tarde estare subiendo la base en el transcurso del día gracias por tu ayuda
LibreOffice 7, Ubuntu 20.04 LTS...
Neftali R
Mensajes: 169
Registrado: Mar Jun 15, 2021 12:48 pm
Ubicación: Venezuela

Re: error macro no reconoce datos character

Mensaje por Neftali R »

Hola Yeliarias.

No hay problema, aquí estamos para ayudar, pregunta cualquier cosa (relacionada con Open Office o Libre Office) con la que necesites ayuda.

La verdad es que este foro está casi muerto, cosa que me da mucha pena porque he aprendido muchas cosas de aquí. Y la verdad eso es un circulo vicioso, cómo el foro casi no tiene actividad, la gente no se anima a preguntar, porque creen que sus dudas no serán respondidas y a su vez, eso hace que el foro tenga aún menos actividad y todavía menos gente se anima a preguntar.

Retomando el tema, yo tampoco sé como hacerlo funcionar, pero puedo aprender, voy a hacer algunas pruebas y despues subo mis conclusiones.
 Editado: Me puse a revisar una base de datos que consegui como ejemplo en el foro en inglés y... 
No lo he entendido del todo, pero viendolo por encima, me parece que esa tarea de actualizar el ListBox es bastante simple, solo hay que conectarlo a una consulta (Query) y actualizar esa consulta cuando se actualiza la ListBox que precede a esa, por ejemplo:

En el formulario, en la ListBox de Estados es seleccionado "Caracas".

En la consulta de municipios, se cambia la condición (WHERE) del que tenía a "Caracas", dando como resultado los municipios de "Caracas".

En el formulario, en la ListBox de Municipios es seleccionado "Libertador".

En la consulta de parroquias, se cambia la condición (WHERE) del que tenía a "Libertador" o "0101", dando como resultado las parroquias del municipio "Libretador" de "Caracas"

En el formulado, se actualiza la ListBox de parroquias.

Adjunto la base de datos para que la uses como referencia, muy probablemente te resuelva muchas dudas.

Por alguna razón no lo puedo adjuntar aquí, es muy pesado, aunque yo juraría que lo descargue del foro en inglés, lo busqué y tampoco está exactamente el que yo tengo... voy a adjuntar imagenes entonces.
Propiedades Lista.PNG
Consulta ListBoxCategories.PNG
Consulta ListBoxCategories.PNG (23.72 KiB) Visto 2026 veces
Consulta ListBoxCategories SQL.PNG
Consulta ListBoxCategories SQL.PNG (26.33 KiB) Visto 2026 veces
LibreOffice 7.2.6.2 | Windows 7 Ultimate
yeliarias
Mensajes: 23
Registrado: Lun May 08, 2017 7:35 pm
Ubicación: Venezuela

RESUELTO:Re: error macro no reconoce datos character

Mensaje por yeliarias »

Buenas noticias , Neftali R, con lo que me ayudaste al principio funciono, así que, que como decía mi abuela, "deje quieto lo que esta tranquilo" y resolví mi dilema, mil gracias. anexo la base de datos preliminar, aun me faltan cosas, que hoy me entere tengo que agregar, pero bueno , ya tengo un preliminar.
Detecte que tengo un problema con la versión de Postgresql 12 , y la versión que estoy usando de libreoffice base, bajo ambiente linux, de repente pierde la conexión y me dice que no encuentra los datos de las tabla que están en public. así que me cure en salud y estoy enteramente trabajando dentro del ambiente libreoffice base.
Realmente es una lastima que el foro esta tan inactivo, a mi no me avergüenza reconocer mi ignorancia, y sin vergüenza lo digo, y hago lo posible de no quedarme en ella.
De nuevo muchas gracias, publico mi sencilla base que quizás, ayude a otros.
muy muy buen tarde, todas tus recomendaciones ya las pase a mi archivo de cosas para practicar, tan pronto termine esto me dedico a poner en practica tus sugerencias. Yo me especializo mas que soto en sistemas de información geográfica, si alguien le sirve en lo que le pueda ayudar estoy a la orden.
PD: es mu grande para subir dejame ponerla en otro sitio para compartir
Buen fin de semana y mil gracia

Base da datos lista
https://mega.nz/file/Gdwk0bxS#RQgq5uhEo ... 9lFHNuG4Rk
LibreOffice 7, Ubuntu 20.04 LTS...
Responder