• Domingo 22 de Diciembre de 2024, 19:00

Autor Tema:  Re: Visual Basic y consultas AYUDA!!!! Es un desafio?  (Leído 5233 veces)

JKim

  • Miembro activo
  • **
  • Mensajes: 66
    • Ver Perfil
Re: Visual Basic y consultas AYUDA!!!! Es un desafio?
« en: Lunes 12 de Mayo de 2003, 18:31 »
0
Necesito ayuda para lo siguiente (ADO y Sql):

1.- Una vez abierto un recordset en el cual hemos ejecutado una consulta, queremos lanzarle una nueva consulta a este mismo recordset, el resultado guardarlo en otro recordset y que no se toque para nada la base de datos.

2.- Si tenemos dos conexiones a dos bases de datos queremos ejecutar una consulta con sql en la cual intervienen campos de tablas de las dos bases de datos ¿Cómo hacerlo?

Gracias a todos!!!

JKim

  • Miembro activo
  • **
  • Mensajes: 66
    • Ver Perfil
Re: Visual Basic y consultas AYUDA!!!! Es un desafio?
« Respuesta #1 en: Miércoles 21 de Mayo de 2003, 19:34 »
0
Es que nadie lo sabe!!!!!:devil:

Majuhemo

  • Miembro activo
  • **
  • Mensajes: 85
    • Ver Perfil
Re: Visual Basic y consultas AYUDA!!!! Es un desafio?
« Respuesta #2 en: Miércoles 21 de Mayo de 2003, 20:00 »
0
Hola:
Punto 1: no he trabajado de la forma como explicas, pero, si quieres hacer 2 consultas sobre un mismo recordset, porque no haces la consulta directa?, tal si defines bien tu inconveniente te podremos ayudar mejor.
Punto 2: puedes hacerlo de la siguiente forma:

SELECT TB1.*, TB2.*
FROM BD1.dbo.Tabla1 TB1,
   BD2.dbo.Tabla2 TB2
WHERE TB1.Id=TB2.Id

espero te ayude en algo.
Saludos;
Ruben Delgado A.
rudela@msn.com
Lima-Peru

JKim

  • Miembro activo
  • **
  • Mensajes: 66
    • Ver Perfil
Re: Visual Basic y consultas AYUDA!!!! Es un desafio?
« Respuesta #3 en: Jueves 22 de Mayo de 2003, 17:38 »
0
Hola Majuhemo, primero que nada muchas gracias por responder y dedicar algo de tiempo a mi consulta.

1) La idea es mejorar la velocidad de la consulta (bien dicho: la velocidad que el usuario percibe) Tengo el siguente problema. Estoy lanzando una sola consulta (como tu sugieres) que tarda bastante y la verdad es que si pudiera partirla en dos me ahorraría tiempo. El usuario elige una opción de un combo y cada vez que elige una opción se lanza esa consulta tan costosa cuando en realidad si hubiera lanzado una consulta primero y recuperado unos registros luego solo tendría que hacer una pequeña consulta sobre ese recordset recuperado que sería más pequeña y menos costosa (No puedo utilizar el método de busqueda en un recordset (Find o Seek) pq la segunda consulta es algo más complicada)
Si se te ocurre algo gracias!

2) El segundo punto quisiera saber que es lo dbo que sale en el FROM. No he tenido tiempo de probarlo pero lo probaré y te diré algo Gracias!
:gracias::gracias:

Majuhemo

  • Miembro activo
  • **
  • Mensajes: 85
    • Ver Perfil
Re: Visual Basic y consultas AYUDA!!!! Es un desafio?
« Respuesta #4 en: Viernes 23 de Mayo de 2003, 01:14 »
0
Hola:
a ver si me das un poco mas de datos.
-usas access o sql server?.
-la segunda informacion que llenas con el recordset tambien es un ComboBox?.
-haces un barrido del recordset para llenar el segundo ComboBox, estoy suponiendo que es asi.
-Parece que no tienes problemas con el llenado del primer combo, cierto?

Espero tu respuesta.

Saludos;
Ruben Delgado A.
rudela@msn.com
Lima-Peru

JKim

  • Miembro activo
  • **
  • Mensajes: 66
    • Ver Perfil
Re: Visual Basic y consultas AYUDA!!!! Es un desafio?
« Respuesta #5 en: Viernes 23 de Mayo de 2003, 18:26 »
0
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

  • Miembro activo
  • **
  • Mensajes: 85
    • Ver Perfil
Re: Visual Basic y consultas AYUDA!!!! Es un desafio?
« Respuesta #6 en: Viernes 23 de Mayo de 2003, 23:54 »
0
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;
Ruben Delgado A.
rudela@msn.com
Lima-Peru

J.M.Movilla

  • Miembro MUY activo
  • ***
  • Mensajes: 427
    • Ver Perfil
Re: Visual Basic y consultas AYUDA!!!! Es un desafio?
« Respuesta #7 en: Sábado 24 de Mayo de 2003, 18:47 »
0
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

  • Miembro activo
  • **
  • Mensajes: 66
    • Ver Perfil
Re: Visual Basic y consultas AYUDA!!!! Es un desafio?
« Respuesta #8 en: Miércoles 6 de Agosto de 2003, 19:47 »
0
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

  • Miembro activo
  • **
  • Mensajes: 66
    • Ver Perfil
Re: Visual Basic y consultas AYUDA!!!! Es un desafio?
« Respuesta #9 en: Miércoles 20 de Agosto de 2003, 00:38 »
0
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

J.M.Movilla

  • Miembro MUY activo
  • ***
  • Mensajes: 427
    • Ver Perfil
Re: Visual Basic y consultas AYUDA!!!! Es un desafio?
« Respuesta #10 en: Miércoles 20 de Agosto de 2003, 01:22 »
0
Aquí tienes el código adecuado para que hagas una consulta sobre dos bases de datos diferentes, abriéndolas con ADO (aunque no precisamente con DataEnvironment, pero eso ya sabrás resolverlo tú...)

Saludos y que termines encontrando todas las soluciones
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.

JKim

  • Miembro activo
  • **
  • Mensajes: 66
    • Ver Perfil
Re: Visual Basic y consultas AYUDA!!!! Es un desafio?
« Respuesta #11 en: Miércoles 20 de Agosto de 2003, 22:46 »
0
Gracias de nuevo JMM
lo pruebo y digo algo

Gracias

JKim

  • Miembro activo
  • **
  • Mensajes: 66
    • Ver Perfil
Visual Basic y consultas AYUDA!!!! Es un desafio?
« Respuesta #12 en: Jueves 21 de Agosto de 2003, 22:50 »
0
Hola JMM!

He examinado el código que colgaste, funciona correctamente, parece que lo que hace es en una de las bases de datos es crear un vinculo temporal a la otra base de datos (similar a como se resolvió en dónde trabajo).
Muchas Gracias.
Supongo que cuando es preciso realizar consultas sobre dos bases de datos distintas se suele hacer así. Por ello doy el tema por cerrado. Si encontrara otra solución lo notificaría.
Muchas gracias de nuevo.
Saludos!