Programación General > Visual Basic 6.0 e inferiores

 Re: Visual Basic y consultas AYUDA!!!! Es un desafio?

<< < (2/3) > >>

JKim:
Buenas!

Estoy usando ADO con Oracle

No la segunda información es para una DataReport. De lo cual se desprende que no hago ningún barrido para rellenarlo.

Es Cierto no hay ningún problema para rellenar el primer cbo ni para hacer la primera consulta.

Te expongo el orden de las cosillas:

Como lo estoy haciendo actualmente:
1) Relleno el CBO
2) Una vez el usuario elige lanzo una consulta grande y costosa
3) Saco el DtaReport

Como me gustaría hacerlo:
1) Hago una consulta (menos costosa que la grande del otro método, pero no definitiva) la uso para rellenar un recordset llamesmole X
2) Relleno el Cbo
3) Al elegir una opción el usuario lanzaría una consulta pequeñita sobre X
4) Sacaría el DataReport

Como puedes ver es una cuestión de velocidad y optimización. Pues de esta manera podría hacer la consulta costosa una sola vez en el programa (o una sola vez cada vez que se abre el formulario) pero no la ejecutaría cada vez que el usuario elige una opción del cbo. (Le doy opción a que antes de salir del formulario pueda elegir otra opción e imprimir otro informe)

Tb decirte que el rellano del cbo en este caso es independiente de los datos de las consultas, se hace desde otra consulta.

Gracias otra vez por la dedicación.
Oye a ver si me explicas eso del dbo, que me comentabas en el segundo punto.

Todavía no he tenido tiempo de probarlo: Ya se sabe en el curro le exprimen a uno al máximo.

Sinceramente: GRACIAS:jumpie:

Majuhemo:
Hola JKim:
sobre "dbo", esto lo utilizo con SQL Server y la definicion +/- seria:

la sintaxis es   base de datos . propietario del objeto ( o quien lo creo) .
nombre del objeto.
si una persona tiene privilegios de DBO database owner los objetos que cree
podran llevar el dbo.
si por ejemplo crear una vista de usuario la vista seria asi
mibase.jose.mivista
es decir, lleva el nombre del login que la creo.

Sobre tu consulta, la verdad nunca he trabajado con DataReport, ni con Oracle, se me ocurre de momento que podrias, antes de lanzar el datareport, poner un boton que diga "mostrar datos" o algo parecido y ejecutar todo el codigo desde ahi, pero, poniendo un ProgressBar donde te indique el avance del proceso.
Investigare un poco mas al respecto, dame un poquito de tiempo.

Saludos;

J.M.Movilla:
A ver si te sirve esta rutina:


Function Filtrar(rstT As Recordset, cFil As String) As Recordset
    On Error GoTo FiltErr
    rstT.Filter = cFil
    Set Filtrar = rstT.OpenRecordset
    Exit Function
FiltErr:
    x = MsgBox("Hay un error sintáctico en la fórmula de" & Chr(10) & _
            "Criterios de Selección")
End Function

La llamada sería:

Set rsNuevo = Filtrar(rsPrimitivo, Criterios para el nuevo recordset)

Lógicamente, rsPrimitivo sería el recordset grande que generaste al principio...

Ojalá te resulte...  Saludos.

JKim:
Hola a todos aquellos que me habeís ayudado con este problema.
Primero deciros que casi me da vergüenza escribir estas lineas, pero creo que al menos os las debo.

No tengo mucha disculpa, salvo que llevo esperando más de cuatro meses a que me pongan internet en casa los de menta (cosa que ya doy por imposible) y que últimamente en el trabajo no tengo tiempo ni para leer los emails.

Quisiera agradeceros a todos la ayuda. Deciros tb que el problema puntual que me hizo plantear este par de cuestiones generales ya está resuelto, pero que sigo sin saber como resolverlas. Quisiera disponer de algún tiempo para probar en condiciones las respuestas que amablemente me habeís enviado.

Solo deciros que gracias y que sigaís adelante.:gracias:

PD: En cuanto sepa algo de vuestras ideas digo algo.

JKim:
Hola a todos!
Saludos en particular para J.M.Movilla y Majuhemo quienes han mostrado interés en este pequeño problema.

Hace algún tiempo planteé dos problemas generales:

1) Cómo hacer una consulta sobre dos bases de datos diferentes usando ADO (concretamente: DataEnvironment).

2) Cómo hacer una consulta sobre un recordset que hemos obtenido previamente mediante otra consulta.

Para el primer problemilla (caso 1) no he obtenido solución aún, aunque en el trabajo lo hemos solucionado añadiendo una especie de vinculación en una de las base de datos hacia la otra. Esto lo han realizado los administradores de sistemas sobre Oracle.

Para el segundo problemilla J.M.Movilla propone una solución que es la que más se aproxima a lo deseado: Filtrar el recordset y a partir de él obtener otro.
El código de la función de J.M.Movilla lo podreís encontrar en este mismo tema, en su respuesta.
Consideraciones a este código:

1) Se ha adaptado para que funcione con ADO.

2) Estan cubiertas todas las necesidades con esta formulación: SQL+Filtrado?

Supongo que lo verdaderamente deseable sería SQL+SQL, y si pudireramos pq no: SQL+SQL+...+SQL
pero bueno. ¿Alguién sabe cómo?

Os paso a continuación el código de JMM modificado para ADO

En un formulario se han añadidos dos DataGrid's y se les ha llamado GridOriginal y Grid
Se ha añadido un DataEnvironment llamado Dta y una conexión llamada USI.
La base de datos contiene una tabla Equips que son los equipos inventariados, un campo interesante es CODI_CONF, que será por el que luego filtraremos a modo de prueba, que recoge el tipo de equipo del que hablamos: PC, Impresora...
Se ha añadido un comando a Dta llamado Equipos cuya Select es la siguiente:

SELECT EQUIP.* FROM EQUIP

Y en el formulario se ha añadido el siguiente código:

Private Sub Form_Load()
    Dim rsNuevo As ADODB.Recordset
    Dim CadFiltro As String
    If Dta.rsEquipos.State = 1 Then
        Dta.rsEquipos.Close
    End If
    Dta.Equipos
    ' Hemos lanzado la primera consulta
    ' (en este caso no hace nada, solo recupera los datos)
    CadFiltro = "CODI_CONF=1"
    ' Probaremos con este filtro, aunque se pueden añadir más condiciones
    ' usando los operadores AND y OR
    Set rsNuevo = Filtrar(Dta.rsEquipos, CadFiltro)
    Set Grid.DataSource = rsNuevo
    Set GridOriginal.DataSource = Dta.rsEquipos
End Sub
Function Filtrar(rstT As ADODB.Recordset, cFil As String) As ADODB.Recordset
    On Error GoTo FiltErr
    Set Filtrar = rstT.Clone
    Filtrar.Filter = cFil
    Exit Function
FiltErr:
    MsgBox "Hay un error sintáctico en la fórmula de" & Chr(10) & _
    "Criterios de Selección"
End Function

Esto es todo. Muchas Gracias a todos, muy en particular a JMM y  a Majuhemo. Y decirle a JMM que aunque en su momento considere lo por el propuesto lo desestimé por algún motivo (quizá la creencia que habría alguna forma de hacer SQL+SQL) pero que su aportación ha hecho que vuelva a reflexionar sobre la cuestión. Igual puedo reformular las consultas en cuestión para que se adapten a SQL+Filtro. Muchas Gracias

Ya diré algo si lo logro.

Muchas Gracias

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

[*] Página Anterior

Ir a la versión completa