• Domingo 8 de Septiembre de 2024, 01:56

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - JKim

Páginas: 1 [2] 3
26
Visual Basic 6.0 e inferiores / Re: Guardar informacion de un grid
« en: Jueves 21 de Agosto de 2003, 23:15 »
Perdón el mensaje iba dirigido a ccortes

27
Visual Basic 6.0 e inferiores / Re: Guardar informacion de un grid
« en: Jueves 21 de Agosto de 2003, 23:13 »
Hola krlos02!

No quisiera molestar a nadie con la siguiente sugerencia tan de andar por casa, pero bueno te la dejo por si arreglara tu problema.

Si utilizaras el MSFlexGrid (un poco antiguo y simple, pero a veces muy versatil y sencillo)
Después de rellenar el grid y tras apretar el botón, con dos blucles anidados solucionarías el problema.

Ej:
For fil=1 to numfil
      For col=0 to numcol
            grid.row=fil
            grid.col=col
            var(col)=grid.text
      next col
      ' Aquí código para rellenar el recordset
      ' y para actualizar la tabla en la bd
      ' tb puedes aprovechar para recoger
      ' datos de otros controles
next fil


Bueno soy consciente de que es un poco campestre y que el código no es optimo, pero quizá te salga a cuenta.

A su servicio, saludos!

28
Visual Basic 6.0 e inferiores / Re: Agregar número de registro automaticamente
« en: Jueves 21 de Agosto de 2003, 23:00 »
Hola Jordi_BCN

Al menos veo dos caminos para lo que pides (siempre y cuando lo este entendiendo bien)

1) Realizar una busqueda en la tabla deseada mirando de encontrar el valor máximo en ese campo, obtenerlo, sumarle uno y luego guardarlo.

2) Si la base de datos te lo permite, (por ejemplo Access sí) puedes poner un campo autonumérico. Con lo cual te despreocupas de tener saber cual es el último para agregar uno. Esto tb tiene sus incovenientes: si borras un registro, en este caso un amigo, el código de este registro no se volverá a usar y si haces un listado aparecerá un salto en la numeración.

Por cierto, en general, para este tipo de campo solemos usar una variable de tipo Long (largo) para cubrir futuras necesidades. Y en particular esperemos que el usuario tenga una suma importante de amigos.

Saludos!

Si deseas algo más concreto, hagamelo saber.

Un saludo!

29
Visual Basic 6.0 e inferiores / Visual Basic y consultas AYUDA!!!! Es un desafio?
« en: Jueves 21 de Agosto de 2003, 22:50 »
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!

30
Visual Basic 6.0 e inferiores / Re: Visual Basic y consultas AYUDA!!!! Es un desafio?
« en: Miércoles 20 de Agosto de 2003, 22:46 »
Gracias de nuevo JMM
lo pruebo y digo algo

Gracias

31
Visual Basic 6.0 e inferiores / Re: Visual Basic y consultas AYUDA!!!! Es un desafio?
« en: Miércoles 20 de Agosto de 2003, 00:38 »
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

32
Visual Basic 6.0 e inferiores / ayuda con lista mp3 y command$
« en: Jueves 14 de Agosto de 2003, 19:32 »
Por cierto sustituye las caras sonrientes por un cerrar paréntesis ')'

Saludos y suerte

33
Visual Basic 6.0 e inferiores / Re: ayuda con lista mp3 y command$
« en: Jueves 14 de Agosto de 2003, 19:30 »
Hola!

Solo decir que el código no es mio, lo encontré navegando, buscando otras cosas...

¿Como asociar un fichero a un programa determinado ? '************************************************************
'Windows API/Global Declarations for :AssociateFileType '************************************************************
Declare Function RegCreateKey& Lib "advapi32.DLL" Alias "_
    RegCreateKeyA" (ByVal hKey&, ByVal lpszSubKey$, lphKey&)
Declare Function RegSetValue& Lib "advapi32.DLL" _
   Alias "RegSetValueA" (ByVal hKey&, ByVal lpszSubKey$, _
   ByVal fdwType&, ByVal lpszValue$, ByVal dwLength&)
' Return codes from Registration functions.
Public Const ERROR_SUCCESS = 0&
Public Const ERROR_BADDB = 1&
Public Const ERROR_BADKEY = 2&
Public Const ERROR_CANTOPEN = 3&
Public Const ERROR_CANTREAD = 4&
Public Const ERROR_CANTWRITE = 5&
Public Const ERROR_OUTOFMEMORY = 6&
Public Const ERROR_INVALID_PARAMETER = 7&
Public Const ERROR_ACCESS_DENIED = 8&
Global Const HKEY_CLASSES_ROOT = &H80000000
Public Const MAX_PATH = 256&
Public Const REG_SZ = 1
'************************************************************
' RUTINA QUE LE PERMITE ASOCIAR UN DETERMINADO
' TIPO DE FICHERO A UN PROGRAMA
' ASOCIA UN FICHERO CON EL BLOC DE NOTAS
' SE PUEDE CAMBIAR PARA ASOCIAR LOS QUE VD. QUIERA '************************************************************
Public Const ERROR_SUCCESS = 0&
Public Const ERROR_BADDB = 1&
Public Const ERROR_BADKEY = 2&
Public Const ERROR_CANTOPEN = 3&
Public Const ERROR_CANTREAD = 4&
Public Const ERROR_CANTWRITE = 5&
Public Const ERROR_OUTOFMEMORY = 6&
Public Const ERROR_INVALID_PARAMETER = 7&
Public Const ERROR_ACCESS_DENIED = 8&
Global Const HKEY_CLASSES_ROOT = &H80000000
Public Const MAX_PATH = 256&
Public Const REG_SZ = 1

Private Sub Command1_Click()
   Dim sKeyName As String ' NOMBRE DE LA CLAVE A REGISTRAR
   Dim sKeyValue As String ' NOMBRE DEL VALOR A REGISTRAR
   Dim ret& ' ERROR DEVUELTO POR LAS LLAMADAS A LA API
   Dim lphKey& ' HANDLE A LA CREACION DE REGTKEY
   sKeyName = "MyApp"
   sKeyValue = "My Application"
   ret& = RegCreateKey&(HKEY_CLASSES_ROOT, sKeyName, lphKey&)
   ret& = RegSetValue&(lphKey&, "", REG_SZ, sKeyValue, 0&)
   ' CREA UNA ENTRADA EN LA RAIZ LLAMADA .BAR PARA ASOCIALARLA CON "MyApp".
   sKeyName = ".bar" '*
   sKeyValue = "MyApp" '*
   ret& = RegCreateKey&(HKEY_CLASSES_ROOT, sKeyName, lphKey&)
   ret& = RegSetValue&(lphKey&, "", REG_SZ, sKeyValue, 0&)
   ' LINEA DE MANDATO "MyApp".
   sKeyName = "MyApp" '*
   sKeyValue = "notepad.exe %1" '*
   ret& = RegCreateKey&(HKEY_CLASSES_ROOT, sKeyName, lphKey&)
   ret& = RegSetValue&(lphKey&, "shellopencommand", REG_SZ, sKeyValue, MAX_PATH)
End Sub

34
Visual Basic 6.0 e inferiores / Re: Tiempo
« en: Lunes 11 de Agosto de 2003, 19:09 »
Hola!

Puedes utilizar el control Timer que viene con la VB. (Al abrir un nuevo proyecto standard aparece en el cuadro de herramientas).

Bien, este control produce un evento cada cierto tiempo x que tu le especifiques. Podrías hacer que cuando se produzca el evento actualices el valor del grill.

Saludos!

35
Visual Basic 6.0 e inferiores / Para quienes dominan SQL
« en: Jueves 7 de Agosto de 2003, 19:26 »
Buenas!
En el curro tb tenemos ese problema
de momento estamos filtrando los campos y allá dónde aparece un (') estamos poniendo un (´) q no da el problema.

Pero realmente desconocemos si hay una solución mejor

Saludos

36
Visual Basic 6.0 e inferiores / Re: Visual Basic y consultas AYUDA!!!! Es un desafio?
« en: Miércoles 6 de Agosto de 2003, 19:47 »
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.

37
Visual Basic 6.0 e inferiores / Hacer una pausa
« en: Viernes 30 de Mayo de 2003, 19:22 »
Yo creo que lo mejor es crear un recordset temporal

Ejemplo:

Dim Rec as New ADODB.Recordset
Dim Sql as String

Sql = "SELECT ..."
 ' Aquí miras la select para que te devulva todos aquellos registros que contienen en el campo/s deseados la palabra a buscar, haz que te devuelva una clave de la tabla (un campo que identifique univocamente a cada registro)

Rec = Open Sql  ' O similar
rec.movefirst
For n=1 to rec.recordcount
  Reemplazar (CampoUnico, PalabraBuscada, PalabraReemplazar)
  rec.movenext
next n


Ahora te hace falata una rutina de reemplazar

Sub Reemplazar (ID as string, PalabraBuscada as string, PalabraReemplazar as string)

y aquí lanzaría otra Sql contra la base de datos cambiando ese registro

Es una idea, si ves que no manda el código a ver que podemos hacer:suerte:

38
Visual Basic 6.0 e inferiores / Re: COmo Crear recordset temporal
« en: Viernes 30 de Mayo de 2003, 19:00 »
En ADO:

Dim Rec as New ADODB.Recordset

o

Dim Rec as ADODB.Recordset
Set Rec = New ADODB.Recordset

39
Cómo un usuario puede seleccionar una opción de un menú sin hacer un click o una acción que desencadene ese evento?

40
Hola!

Según para que lo quieras te podría servir el evento QueryUnLoad de un formulario (escogido adecuadamente)

Estev evento recibe un argumento UnloadMode que si es igual a 2 significa que va a acabar la sesión abierta

Es de lo más sencillo que se me ocurre:suerte:

41
Visual Basic 6.0 e inferiores / Winsock "ayuda"
« en: Lunes 26 de Mayo de 2003, 18:56 »
Buenas!

Os paso una dirección de un manual que explica esto estupendamente:

http://www.telecable.es/personales/jrub ... p00187.htm

HurryCrack tiene razón en el tema de la matriz de Winsock. Con este manual por referencia he conseguido sin niguna dificultad llevar a cabo un pequeño programita.

Hawk si ves que te haces un lio leelo esta muy bien, me parece que es uno de los últimos capítulos.



:suerte:

42
Gracias Palmiro
Se ha probado y funciona!!!:good:

43
Visual Basic 6.0 e inferiores / ¿Sería necesario un buscador en este foro?
« en: Lunes 26 de Mayo de 2003, 15:49 »
Gracias, me refería a exactamente lo que ya existe:losiento::oops::losiento:

Gracias por el tiempo dedicado J.M.Movilla

Lo siento!

Un afectuoso saludo

44
Majuhemo amigo yo tb lo intenté y no conseguí entrar.

Pueden ver la siguiente:
http://astalavista.box.sk/cgi-bin/robot ... t=+search+

45
Visual Basic 6.0 e inferiores / controles sheridan (Urgente!!!)
« en: Viernes 23 de Mayo de 2003, 20:35 »
Buenas!

Existe un libro Llamado "Base de datos con Visual Basic 6" de Jeffrey P.McManus de la Ed. Prentice Hall en el que trata el tema de estos controles pag web del libro: http://www.redblazer.com/vdbd/

el sitio de los controles que comentas es http://www.shersoft.com

te envio a más un ejemplo extraido de este libro del dropdown

espero que te sea de alguna utilidad
ya explicarás

Pregunta: ¿Realmente sale a cuenta utilizar estos controles?¿Qué ventaja tienen? Gracias y buena suerte:kiss:

46
Visual Basic 6.0 e inferiores / Re: HOMOTESIA
« en: Viernes 23 de Mayo de 2003, 20:09 »
Yo cogería el formulario y lo maximizaría.

En el habría puesto un control image

Habría cargado la imagen del cuadrado con la función loadpicture

ie: Image1.picture=loadpicture("C:Cuadrado.bmp")

Después usaría el arrastre de este objeto
y en el evento del Form_DragDrop
controlaría cuan cerca ha ido a parar el cuadrado del borde del formulario y si es lo suficiente cerca cargaria la imagen del circulo
Image1.picture=loadpicture("C:circulo.bmp")

Si te parece medianamente aceptable esta idea y necesitas algo más de ayuda solo tienes que decirlo

:suerte:

47
Buenas!

Te envio un extracto de la ayuda de MSDN (espero que te sirva, por cierto yo tb vengo de C) Suerte


:suerte:
Crear tipos de datos propios


Se pueden combinar variables de varios tipos diferentes para crear tipos definidos por el usuario (conocidos como structs en el lenguaje de programación C). Los tipos definidos por el usuario son útiles si se quiere crear una única variable que registre varias unidades de información relacionadas.

Puede crear un tipo definido por el usuario con la instrucción Type, que debe colocar en la sección Declaraciones del módulo. Los tipos definidos por el usuario pueden declararse como Private o como Public mediante la palabra clave apropiada. Por ejemplo:

Private Type MiTipoDeDatos
–o bien–

Public Type MiTipoDeDatos

Por ejemplo, podría crear un tipo definido por el usuario que registrara información acerca del sistema de un equipo:

' Declaraciones (de un módulo estándar).
Private Type SystemInfo
   CPU As Variant
   Memory As Long
   VideoColors As Integer
   Cost As Currency
   PurchaseDate As Variant
End Type

Declarar variables de un tipo definido por el usuario
Para el mismo tipo definido por el usuario puede declarar variables locales, variables privadas de módulo o variables públicas de módulo:

Dim MiSistema As SystemInfo, SuSistema As SystemInfo

En la tabla siguiente se ilustra dónde y con qué alcance puede declarar los tipos definidos por el usuario y sus variables.



Procedimiento/Módulo Puede crear un tipo definido por el usuario como... Las variables de un tipo definido por el usuario pueden declararse...
Procedimientos No aplicable Solamente locales
Módulos estándar Privado o público Privadas o públicas
Módulos de formulario Solamente privado Solamente privadas
Módulos de clase Privado o público Privadas o públicas


Nota   Si realiza declaraciones de variables usando la palabra clave Dim, los tipos definidos por el usuario en módulo de clase o estándar serán Public de forma predeterminada. Si quiere que un tipo definido por el usuario sea privado, asegúrese de declararlo usando la palabra clave Private.

Asignar y recuperar valores
Asignar y recuperar los valores de los elementos de esta variable es similar a establecer y obtener propiedades:

MiSistema.CPU = "486"
If MiSistema.PurchaseDate > #1/1/92# Then

También puede asignar una variable a otra si ambas son del mismo tipo definido por el usuario. En la línea de código siguiente se asignan todos los elementos de una variable a los mismos elementos de la otra variable.

SuSistema = MiSistema

Tipos definidos por el usuario que contienen matrices
Un tipo definido por el usuario puede contener una matriz normal (de tamaño fijo). Por ejemplo:

Type SystemInfo
   CPU As Variant
   Memory As Long
   DiskDrives(25) As String   ' Matriz de tamaño fijo.
   VideoColors As Integer
   Cost As Currency
   PurchaseDate As Variant
End Type

También puede contener una matriz dinámica.

Type SystemInfo
   CPU As Variant
   Memory As Long
   DiskDrives() As String      ' Matriz dinámica.
   VideoColors As Integer
   Cost As Currency
   PurchaseDate As Variant
End Type

Puede tener acceso a los valores de una matriz dentro de un tipo definido por el usuario de la misma manera en que tiene acceso a las propiedades de un objeto.

Dim MiSistema As SystemInfo
ReDim MiSistema.DiskDrives(3)
MiSistema.DiskDrives(0) = "1.44 MB"

También puede declarar una matriz de tipos definidos por el usuario:

Dim TodosSistemas(100) As SystemInfo

Siga las mismas reglas para tener acceso a los componentes de esta estructura de datos.

TodosSistemas(5).CPU = "386SX"
TodosSistemas(5).DiskDrives(2) = "SCSI de 100 MB"

Pasar tipos definidos por el usuario a procedimientos
Puede pasar argumentos de procedimiento mediante un tipo definido por el usuario.

Sub FillSystem (UnSistema As SystemInfo)
   UnSistema.CPU = lstCPU.Text
   UnSistema.Memory = txtMemory.Text
   UnSistema.Cost = txtCost.Text
   UnSistema.PurchaseDate = Now
End Sub

Nota   Si desea pasar un tipo definido por el usuario a un módulo de formulario, el procedimiento debe ser privado.

Puede devolver tipos definidos por el usuario desde funciones y puede pasar una variable de un tipo definido por el usuario a un procedimiento como un argumento. Los tipos definidos por el usuario siempre se pasan por referencia, de modo que el procedimiento puede modificar el argumento y devolverlo al procedimiento que lo ha llamado, como se muestra en el ejemplo anterior.

Nota   Debido a que los tipos definidos por el usuario siempre se pasan por referencia, todos los datos contenidos en dichos tipos se pasarán y se devolverán desde el procedimiento. En el caso de tipos definidos por el usuario con matrices de gran tamaño, esto podría originar una reducción de las prestaciones, especialmente en aplicaciones cliente/servidor, en las que el procedimiento se puede ejecutar desde un equipo remoto. En tal caso, es preferible extraer y pasar únicamente los datos necesarios del tipo definido por el usuario.

Para obtener más información   Para obtener más detalles acerca del paso por referencia, vea "Pasar argumentos a procedimientos" en "Fundamentos de programación".

Tipos definidos por el usuario que contienen objetos
Los tipos definidos por el usuario también pueden contener objetos.

Private Type AccountPack
   frmInput as Form
   dbPayRollAccount as Database
End Type

Sugerencia   Como el tipo de datos Variant puede almacenar muchos tipos de datos diferentes, puede usar una matriz Variant en muchas situaciones en las que usaría un tipo definido por el usuario. De hecho, una matriz Variant es más flexible que un tipo definido por el usuario, ya que puede modificar el tipo de los datos almacenados en cada elemento en cualquier momento y puede convertir la matriz en dinámica para modificar su tamaño cuando sea necesario. Sin embargo, una matriz Variant siempre utiliza más memoria que un tipo definido por el usuario equivalente.

Anidar estructuras de datos
El anidamiento de estructuras de datos puede ser tan complejo como se quiera. De hecho, los tipos definidos por el usuario pueden contener otros tipos definidos por el usuario, como se muestra en el ejemplo siguiente. Para hacer que el código sea más legible y fácil de depurar, procure escribir en un único módulo todo el código de los tipos de datos definidos por el usuario.

Type DriveInfo
   Type As String
   Size As Long
End Type

Type SystemInfo
   CPU As Variant
   Memory As Long
   DiskDrives(26) As DriveInfo
   Cost As Currency
   PurchaseDate As Variant
End Type

Dim AllSystems(100) As SystemInfo
AllSystems(1).DiskDrives(0).Type = "Floppy"

48
¿Sería necesario un buscador en este foro que permitiese buscar los temas por palabras sueltas?

Qué pensais?

49
Visual Basic 6.0 e inferiores / Re: Hacer una pausa
« en: Viernes 23 de Mayo de 2003, 18:33 »
Hola Jesuss, ¿Podrías dar más datos de cómo lo estas llevando a cabo?

Dependiendo del método podríamos encontrar diferentes soluciones

Gracias

50
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:

Páginas: 1 [2] 3