[RESUELTO] Cargar array con datos de un SELECT
[RESUELTO] Cargar array con datos de un SELECT
Me gustaría saber si se puede, con OpenOffice, cargar los valores de un campo concreto devuelto por un SELECT en un array
Algo como...
Dim sSQL As String
Dim nRegistros AS Integer
' Aquí tendría que hallar el número de registros devueltos por el SELECT y hacer nRegistros = nº registros encontrados con un Select Count o lo que proceda...
sSQL="SELECT datos.CANTIDAD FROM datos WHERE condicion"
Dim myArray (nRegistros) AS Integer
' Aquí tendría que cargar myArray con los valores del campo CANTIDAD de cada registro encontrado
Algo como...
Dim sSQL As String
Dim nRegistros AS Integer
' Aquí tendría que hallar el número de registros devueltos por el SELECT y hacer nRegistros = nº registros encontrados con un Select Count o lo que proceda...
sSQL="SELECT datos.CANTIDAD FROM datos WHERE condicion"
Dim myArray (nRegistros) AS Integer
' Aquí tendría que cargar myArray con los valores del campo CANTIDAD de cada registro encontrado
Última edición por pmartimor el Mié Feb 27, 2019 11:29 am, editado 1 vez en total.
LibreOffice 5.1.0.3 en clientes Windows 10, 7, XP sobre BD MySql.
Re: Cargar array con datos devueltos por un SELECT
Buenas!
Te pongo un ejemplo que tengo hecho con una consulta en la que saco las comarcas que están grabadas en una tabla, pero la consulta, lógicamente, tendrá que ser la que tu necesites:
Un saludo! 
Te pongo un ejemplo que tengo hecho con una consulta en la que saco las comarcas que están grabadas en una tabla, pero la consulta, lógicamente, tendrá que ser la que tu necesites:
Código: Seleccionar todo
oCon = ThisDatabaseDocument.CurrentController.ActiveConnection ' Activamos la conexión con la base de datos
oStat = oCon.CreateStatement ' Creamos el Statement
sSQL=" SELECT ""Comarca"" FROM ""COMARCA"""
oStat.setPropertyValue("ResultSetType",1005) ' Características de la consulta
oResultSet = oStat.executeQuery(sSQL) ' Se ejecuta la consulta
oResultSet.last ' Va al último registro para contar los registros que tiene
oResultSet.first ' Mueve el cursor al primer registro
oResultSet.previous
'-----------------------------------------------------------------------
' Establecemos un array que recoge todos los datos de la consulta
j = 0 ' Constante
Dim ArrayComarca() ' Definición del array
While oResultSet.next ' Recorremos todos los datos del Resultset
Redim Preserve ArrayComarca(j) ' Redimensionamos el array
ArrayComarca(j) = oResultset.getString(1) ' Primer resultado del array
j = j+1 ' Pasa al siguiente resultado del array
Wend ' Acabamos el ciclo del ResultSet
'-------------------------------------------------
' Comprobamos que hemos rellenado el array, viendo elemento a elemento
For i=LBound(ArrayComarca()) to UBound(ArrayComarca()) ' Ciclo que recorre todos los elementos del array
msgbox ArrayComarca(i) ' Vemos el elemento que toca en el ciclo
Next ' Vamos al siguiente elemento del array
Openoffice 4.1.7, en Windows 10
Libreoffice 6.4.2, en Windows 10
Libreoffice 6.4.2, en Windows 10
Re: Cargar array con datos devueltos por un SELECT
Muchas gracias longi, esto es lo que quería.Longi escribió:Buenas!
Te pongo un ejemplo que tengo hecho con una consulta en la que saco las comarcas que están grabadas en una tabla, pero la consulta, lógicamente, tendrá que ser la que tu necesites:
Un saludo!Código: Seleccionar todo
oCon = ThisDatabaseDocument.CurrentController.ActiveConnection ' Activamos la conexión con la base de datos oStat = oCon.CreateStatement ' Creamos el Statement sSQL=" SELECT ""Comarca"" FROM ""COMARCA""" oStat.setPropertyValue("ResultSetType",1005) ' Características de la consulta oResultSet = oStat.executeQuery(sSQL) ' Se ejecuta la consulta oResultSet.last ' Va al último registro para contar los registros que tiene oResultSet.first ' Mueve el cursor al primer registro oResultSet.previous '----------------------------------------------------------------------- ' Establecemos un array que recoge todos los datos de la consulta j = 0 ' Constante Dim ArrayComarca() ' Definición del array While oResultSet.next ' Recorremos todos los datos del Resultset Redim Preserve ArrayComarca(j) ' Redimensionamos el array ArrayComarca(j) = oResultset.getString(1) ' Primer resultado del array j = j+1 ' Pasa al siguiente resultado del array Wend ' Acabamos el ciclo del ResultSet '------------------------------------------------- ' Comprobamos que hemos rellenado el array, viendo elemento a elemento For i=LBound(ArrayComarca()) to UBound(ArrayComarca()) ' Ciclo que recorre todos los elementos del array msgbox ArrayComarca(i) ' Vemos el elemento que toca en el ciclo Next ' Vamos al siguiente elemento del array
Perdona que abuse, pero cómo se volcarían después los datos del array una vez tratados y modificados en una tabla?
Supongo que con UPDATE pero ¿se puede crear un ciclo para volcar los datos de un array en una tabla de forma parecida?
Ya sé que esta sería otra pregunta y debería ir en otro hilo, pero al estar tan relacionada la hago en este mismo.
Perdona y gracias por tus generosas aportaciones.
LibreOffice 5.1.0.3 en clientes Windows 10, 7, XP sobre BD MySql.
Re: Cargar array con datos devueltos por un SELECT
Buenas!
Para eso no necesitas el array, directamente ejecutas el Update en cada ciclo y el trabajo ya queda hecho.
Te pongo el ejemplo sin el array y con las dos opciones (insert into si haces nuevos registros y Update si actualizas registros existentes). Ni que decir tiene que tienes que eliminar uno de ellos según tus necesidades.
Si usases la macro según está te funcionaría generando nuevos registros y después actualizándolos en cada vuelta del bucle, pero es un trabajo totalmente innecesario.
Otro saludo! 
Para eso no necesitas el array, directamente ejecutas el Update en cada ciclo y el trabajo ya queda hecho.
Te pongo el ejemplo sin el array y con las dos opciones (insert into si haces nuevos registros y Update si actualizas registros existentes). Ni que decir tiene que tienes que eliminar uno de ellos según tus necesidades.
Si usases la macro según está te funcionaría generando nuevos registros y después actualizándolos en cada vuelta del bucle, pero es un trabajo totalmente innecesario.
Código: Seleccionar todo
oCon = ThisDatabaseDocument.CurrentController.ActiveConnection ' Activamos la conexión con la base de datos
oStat = oCon.CreateStatement ' Creamos el Statement
sSQL=" SELECT ""Comarca"",""Concello"" FROM ""COMARCA"""
oStat.setPropertyValue("ResultSetType",1005) ' Características de la consulta
oResultSet = oStat.executeQuery(sSQL) ' Se ejecuta la consulta
oResultSet.last ' Va al último registro para contar los registros que tiene
oResultSet.first ' Mueve el cursor al primer registro
oResultSet.previous
'-----------------------------------------------------------------------
' Establecemos un array que recoge todos los datos de la consulta
While oResultSet.next ' Recorremos todos los datos del Resultset
' Si lo que quieres es añadir datos a una tabla
sSQL=" INSERT INTO ""PUEBLOS"" (""COMARCA"") VALUES '"& oResultSet.getString(1) &"' "
oStat.ExecuteUpdate(sSQL)
' Si lo que quieres hacer es actualizar registros
sSQL ="UPDATE ""PUEBLOS"" SET ""COMARCA""= '"& oResultSet.getString(1) &"' WHERE ""Concello"" ='"& oResultSet.getString(2) &"'" ' Que hará que marquemos como verdadero la existencia de carpeta de vacuno en la tabla de REGAS
oStat.ExecuteUpdate(sSQL) ' Ejecutamos la consulta
Wend ' Acabamos el ciclo del ResultSet
Openoffice 4.1.7, en Windows 10
Libreoffice 6.4.2, en Windows 10
Libreoffice 6.4.2, en Windows 10
Re: Cargar array con datos devueltos por un SELECT
Hola,
Otra opción, como no aclaras desde que situación partes, esto ejemplo, actualiza datos de una tabla con los datos de otra. Botón del formulario
Saludos
Otra opción, como no aclaras desde que situación partes, esto ejemplo, actualiza datos de una tabla con los datos de otra. Botón del formulario
Saludos
- Adjuntos
-
- update.zip
- (15.08 KiB) Descargado 257 veces
OpenOffice 4.1.15 y LibreOffice 6.2.4.2 en W-10, y LibreOffice 4.1.6.2 en Open Suse 13.1(VirtualBox)
Re: Cargar array con datos devueltos por un SELECT
Muchas gracias Longi y también a RMG, eso es lo que buscaba.Longi escribió:Buenas!
Para eso no necesitas el array, directamente ejecutas el Update en cada ciclo y el trabajo ya queda hecho.
Te pongo el ejemplo sin el array y con las dos opciones (insert into si haces nuevos registros y Update si actualizas registros existentes). Ni que decir tiene que tienes que eliminar uno de ellos según tus necesidades.
Si usases la macro según está te funcionaría generando nuevos registros y después actualizándolos en cada vuelta del bucle, pero es un trabajo totalmente innecesario.
Otro saludo!Código: Seleccionar todo
oCon = ThisDatabaseDocument.CurrentController.ActiveConnection ' Activamos la conexión con la base de datos oStat = oCon.CreateStatement ' Creamos el Statement sSQL=" SELECT ""Comarca"",""Concello"" FROM ""COMARCA""" oStat.setPropertyValue("ResultSetType",1005) ' Características de la consulta oResultSet = oStat.executeQuery(sSQL) ' Se ejecuta la consulta oResultSet.last ' Va al último registro para contar los registros que tiene oResultSet.first ' Mueve el cursor al primer registro oResultSet.previous '----------------------------------------------------------------------- ' Establecemos un array que recoge todos los datos de la consulta While oResultSet.next ' Recorremos todos los datos del Resultset ' Si lo que quieres es añadir datos a una tabla sSQL=" INSERT INTO ""PUEBLOS"" (""COMARCA"") VALUES '"& oResultSet.getString(1) &"' " oStat.ExecuteUpdate(sSQL) ' Si lo que quieres hacer es actualizar registros sSQL ="UPDATE ""PUEBLOS"" SET ""COMARCA""= '"& oResultSet.getString(1) &"' WHERE ""Concello"" ='"& oResultSet.getString(2) &"'" ' Que hará que marquemos como verdadero la existencia de carpeta de vacuno en la tabla de REGAS oStat.ExecuteUpdate(sSQL) ' Ejecutamos la consulta Wend ' Acabamos el ciclo del ResultSet
LibreOffice 5.1.0.3 en clientes Windows 10, 7, XP sobre BD MySql.