Sacar caracteres aleatorios visual basic 6

Una funcioncita bastante simple que devuelve caracteres aleatorios de una cadena.

'cadena de la que tomamos los caracteres
Private Const c_caracteres = "ABCDEFGHIJKLMNÑOPQRSTUVWXYZ1234567890abcdefghijklmnñopqrstuvwxyz"

'parámetros opcionales'cuantos caracteres necesitas y la ubicación de la cadena de donde sacarlos
Private Function dame_text_rnd(optional cuantos As Integer=1, optional cadena as string=c_caracteres) As String
Dim i As Integer
Dim longitud as integer
longitud=Len(cadena)
Randomize   For i = 1 To cuantos
dame_text_rnd = dame_text_rnd && Mid(cadena, Int((longitud * Rnd) + 1), 1)
Next i
End Function

Share



Crear DSN desde vb 6.0 en tiempo de ejecución

Largo ha sido el camino transitado hasta encontrar la solución a uno de mis grandes dilemas.
Ahora que ya he conseguido hacerlo, lo comparto con el mundo.

El crear DSN’s de forma dinámica en tiempo de ejecución nos permite configurar y utilizar las conexiones de los controles y data reports sin miedo a futuros cambios.

El código lo he organizado en un módulo.

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''' Autor: Roberto Herrero                       '''''''''''''''''''''''''''''''
''' Fecha: 05/Junio/2008                         '''''''''''''''''''''''''''''''
'''        http://blog-indomita.blogspot.com/    '''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''' Origen : Brian Plano Abad                    '''''''''''''''''''''''''''''''
''' Fecha:   20/Dic/2006 (18 Diciembre 2006)     '''''''''''''''''''''''''''''''
'''          bplano@ solingest.com               '''''''''''''''''''''''''''''''
'''          http://www.elguille.info/colabora/vb2006/jesus_Ejemplo_Report_Manager2.htm
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''


Option Explicit

'Constantes
Private Const ODBC_ADD_DSN = 1 ' Nuevo DSN
Private Const ODBC_CONFIG_DSN = 2 ' Modificar DSN
Private Const ODBC_REMOVE_DSN = 3 ' Eliminar DSN
Private Const ODBC_ADD_SYS_DSN = 4 ' Nuevo DSN de sistema
Private Const ODBC_CONFIG_SYS_DSN = 5 ' Modificar DSN de sistema
Private Const ODBC_REMOVE_SYS_DSN = 6 ' Eliminar DSN de sistema
Private Const vbAPINull As Long = 0 ' Null Pointer
Private Const SQL_SUCCESS As Long = 0
Private Const SQL_FETCH_NEXT As Long = 1

'Declaración de funciones de API
Private Declare Function SQLConfigDataSource Lib "ODBCCP32.DLL" (ByVal hwndParent As Long, ByVal fRequest As Long, ByVal lpszDriver As String, ByVal lpszAttributes As String) As Long
Private Declare Function SQLDataSources Lib "ODBC32.DLL" (ByVal henv As Long, ByVal fDirection As Integer, ByVal szDSN As String, ByVal cbDSNMax As Integer, pcbDSN As Integer, ByVal szDescription As String, ByVal cbDescriptionMax As Integer, pcbDescription As Integer) As Integer
Private Declare Function SQLAllocEnv Lib "ODBC32.DLL" (Env As Long) As Integer

'Constantes
'ruta hasta el servidor (ip/nombre/ruta)
Private Const C_Server = "localhost"
'usuario
Private Const C_User = "usuario"
'contraseña
Private Const C_Pass = "contraseña"
'base de datos
Private Const C_BD = "nombre base de datos"
'puerto
Private Const C_Port = 3306
'Nombre ODBC de MySql
'(si no tienes ninguno instalado http://dev.mysql.com/downloads/connector/odbc/5.1.html)
Public Const C_MYSQL_ODBC = "MySQL ODBC 5.1 Driver"



'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''' FUNCIONES
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

'Crea el DSN para las conexiones
'(utiliza las constantes por defecto para conectarse a un servidor MySql)
'Si deseas personalizarlo o dinamizarlo deberás utilizar el resto de funciones
Public Function IniciaDSN(sDSNname As String) As Boolean
    'Comprobamos si existe
    If ExisteDSN(sDSNname) = True Then
        'Si existe lo eliminamos previamente.
        If BorrarDSN(sDSNname, C_MYSQL_ODBC) = False Then
            IniciaDSN = False
            Exit Function
        End If
    End If
    
    'Creamos el nuevo DSN.
    IniciaDSN = MySQLCrearDSN(sDSNname)
End Function
 

'Crea un DSN del sistema.
Public Function CrearDSN(sDSN As String, sDriver As String, sAtributos As String, Optional sHwnd As Long = vbAPINull) As Boolean
    'Creamos el DSN (En vez de vbAPINull, empleamos el hwnd del formulario)
    CrearDSN = CBool(SQLConfigDataSource(sHwnd, ODBC_ADD_SYS_DSN, sDriver, sAtributos))
End Function


'Crea un DSN MySQL con los atributos bien seteados.
Public Function MySQLCrearDSN(sDSN As String, _
 Optional sServer As String = C_Server, Optional sBD As String = C_BD, _
 Optional sUser As String = C_User, Optional sPass As String = C_Pass, _
 Optional sPort As Integer = C_Port) As Boolean
 
    Dim sDriver As String
    Dim sAtributos As String
    
    sDriver = C_MYSQL_ODBC
    sAtributos = "DSN=" & sDSN & Chr(0)
    sAtributos = sAtributos & "SERVER=" & sServer & Chr(0)
    
    sAtributos = sAtributos & "PORT=" & sPort & Chr(0)
    
    sAtributos = sAtributos & "DATABASE=" & sBD & Chr(0)
    
    sAtributos = sAtributos & "USER=" & sUser & Chr(0)
    
    sAtributos = sAtributos & "PASSWORD=" & sPass & Chr(0)
    
    sAtributos = sAtributos & "OPTION=3" & Chr(0)
    
    'Si queremos resetear la conexión de datos, debemos borrarlo antes
    If ExisteDSN(sDSN) Then
        Call BorrarDSN(sDSN, sDriver)
    End If
    
    MySQLCrearDSN = CrearDSN(sDSN, sDriver, sAtributos)

End Function


'Elimina un DSN del sistema.
Public Function BorrarDSN(sDSN As String, sDriver As String, Optional sHwnd As Long = vbAPINull) As Boolean
    Dim sAtributos As String
    ' Borramos el DSN (En vez de vbAPINull, empleamos el hwnd del formulario)
    If ExisteDSN(sDSN) Then
        sAtributos = "DSN=" & sDSN & Chr(0)
        BorrarDSN = CBool(SQLConfigDataSource(sHwnd, ODBC_REMOVE_SYS_DSN, sDriver, sAtributos))
    Else
        MsgBox ExIdioma("ModDSN_Contr1")
        BorrarDSN = False
    End If
End Function


'Comprueba si existe un DSN en el sistema.
Public Function ExisteDSN(sDSN As String) As Boolean
    Dim I As Integer, j As Integer
    Dim sDSNItem As String * 1024
    Dim sDRVItem As String * 1024
    Dim sDSNActual As String
    Dim sDRV As String
    Dim iDSNLen As Integer
    Dim iDRVLen As Integer
    Dim lHenv As Long 'controlador del entorno
    Dim DSNLISTA(100)
    ExisteDSN = False
    For j = 1 To 52
        DSNLISTA(j) = ""
    Next j
    
    j = 1
    If SQLAllocEnv(lHenv) <> -1 Then
        Do Until I <> SQL_SUCCESS
            sDSNItem = Space(1024)
            sDRVItem = Space(1024)
            I = SQLDataSources(lHenv, SQL_FETCH_NEXT, sDSNItem, 1024, iDSNLen, sDRVItem, 1024, iDRVLen)
            sDSNActual = VBA.Left(sDSNItem, iDSNLen)
            sDRV = VBA.Left(sDRVItem, iDRVLen)
            If sDSN <> Space(iDSNLen) Then
                DSNLISTA(j) = sDSN
                If UCase(sDSN) = UCase(sDSNActual) Then
                    ExisteDSN = True
                    Exit Do
                End If
            End If
        Loop
    End If
End Function

Share



Cambiar la contraseña de access desde vb6

Hoy subo una funcioncita que me hice hace bastante tiempo para cambiar la contraseña de una base de datos en access desde visual basic 6.

    'CAMBIA LA PASS DE LA BASE DE DATOS
    Public Sub cambia_pass(NewClave As String, Optional OldClave As String = "")
    On Error GoTo actimel
    Dim sDBTmp As String
    Dim NombreMdb As String

    ' en Proyecto->Referencias: Microsof Jet and Replication objects 2.6 Library
    Dim je As JRO.JetEngine
    Set je = New JRO.JetEngine

    ' BD a la que vamos a poner/modificar la contraseña
    NombreMdb = "mibasededatos.mdb"
    sDBTmp = "DBTemp.mdb" ' creamos una BD temporal
    ' si existe la borramos
    If Len(Dir$(sDBTmp)) Then Kill sDBTmp
    sDBTmp = App.Path && "\" && sDBTmp
    ' compactamos la BD y le asignamos la contraseña
    je.CompactDatabase "Data Source=" && NombreMdb && ";" && _
    "Jet OLEDB:Database Password=" && OldClave && ";" && _
    "Data Source=" && sDBTmp && ";" && _
    "Jet OLEDB:Database Password=" && NewClave

    'eliminamos la BD original y renombramos la temporal
    Kill NombreMdb
    Name sDBTmp As NombreMdb
    Exit Sub
    actimel:
    End Sub

Share



Cambiar Etiquetas e Imágenes en un Data Report en tiempo de ejecución

Ésto es algo bastante sencillo y muy útil para personalizar/dinamizar los encabezados de los datareports desde visual basic 6.0.

'con with evitamos el tener que repetir todo el rato la ruta

'en ReportHeader pones la sección en la que se encuentra el control

With DataReport1.Sections("ReportHeader")

'cualquier etiqueta

.Controls.Item("Etiqueta1").Caption = "loquesea 1"

'etiqueta n

.Controls.Item("Etiquetan").Caption = "loquesea n"

'imagen

Set .Controls("Image1").Picture = LoadPicture("ruta de la imagen")

End With

Share



Generar un informe con tres commands relacionados en Datareport desde Visual Basic 6.0

El artículo actual es la continuación del Tutorial: Generar etiquetas con Datareport desde Visual Basic 6.0 Creamos un nuevo botón en el formulario (con éste ya vamos por el command4) realizamos su evento click.

Private Sub Command4_Click()
'presentamos el datareport con unión triple de las campañas
DataEnvironment1.cmd_campañas
End Sub

Creamos a continuación tres commands en el dataenviroment1 mismamente. Vamos a renombrarlos porque sino va a ser mucho lío. (más que nada para mi que no estoy acostumbrado a esos nombres xD) cmd_campañas, cmd_chicas, cmd_citas mismamente Ahora generamos las consultas con las nuevas tablas que he añadido: campañas, chicas y citas… ejem (solamente tres ya lo se soy un vago pero no tengo ganas de entrelazar siete tablas para un ejemplo sencillito xD) Mirar un poco la estructura de las tablas y veréis que campañas se enlaza con chicas y que chicas con citas. Bueno generemos las consultas (click derecho encima del command/propiedades/… no voy a entrar en detalles) cmd_campañas

SELECT id_temporada, eslogan, ini_fecha, lugar_apertura FROM campañas

cmd_chicas

SELECT nombre, id_chica, descripcion, dato3, dato2, dato1 FROM chicas where temporada=ident_temporada

cmd_citas

SELECT duracion, id_chica, id_cita, tipo, inc_fecha FROM citas WHERE id_chica=ident_chica

además añadiremos en la pestaña relación: comando primario: cmd_chicas definición de relación: id_chica to ident_chica, agregar, aceptar y listo xD Creamos el data report (DRcampañas) lo asociamos, DataSource=DataEnvironment1 DataMember=cmd_campañas Quitamos forzar a la cuadrícula y le damos a obtener estructura y tenemos un monton de encabezados y pie de grupos xD Posicionamos los campos que queremos mostrar (arrastrandolos desde el dataenviroment mismamente. Cada uno en su posición. Veréis que no os dejará meter los detalles de cmd_citas en encabezados y tal. En cmd_camapañas_header irán los datos de la campaña. En sus propiedades ForcePageBreak le metemos la opción 1- rptPageBreakBefore, para que haga divisiones(saltos de página) por cada campaña diferente. En cmd_chicas_header metemos los datos de las chicas. En cmd_citas_Detail los datos de las chicas y en cmd_chicas_footer meteremos un función count para contar sus citas y una sum para contar sus duraciones globalos mismamente, ave cuál ha soportado a más tios xD Acordaros de poner en el queryclose del data report esto

Private Sub DataReport_QueryClose(Cancel As Integer, CloseMode As Integer)
DataEnvironment1.rscmd_campañas.Close
End Sub

Ala ya hemos terminado, igual hago otro tuto dentro de un par de días en el que enviemos en vez de un parámetro varios y creo que poco más se puede hacer con un data report xD P.D. Visual Basic da un montón de problemas al trabajar con bases de datos y data reports amén de command dialogs de rutas. Ya que se hace la picha un lío y guarda la última ruta que maneja como la raíz del programa. Por lo tango es recomendable guardar la ruta en el load del programa en una variable general o pública si usamos más de un formulario/módulos

Mi_ruta=app.path

y luego al hacer algún cambio en command dialog o al abrir data reports meterle después

ChDir Mi_ruta

Así lograremos que no de problemas, yo en el ejemplo no lo he hecho ya que en los ejemplos de prueba no me ha dado ningún problema xD Subo el códido y el ejemplo: DESCARGAR Ejemplo Data Report Visual Basic 6.0 by RobiHm

Share



Generar etiquetas con Datareport desde Visual Basic 6.0

El artículo actual es la continuación del tutorial Crear Facturas/Pedidos/Etiquetas con Data Report desde Visual Basic 6.0

Bueno vamos a generar una serie de etiquetas de estas que se suelen repartir y tal, tarjetitas xD

Antes de nada decir que data report no es un potente editor y tiene cuatro propiedades… asi que puede resultar bastante básicas sus características, ahí vamos…
Primero vamos a añadir un nuevo command al dataenviroment. Click derecho propiedades, generar consulta y ahí seleccionaremos la tabla proveedores y actividades_proveedor. Las enlazamos por codactividad y seleccionamos los datos junto con el nombre de la actividad. Añadimos el valor que le vamos a pasar, aqui os dejo elegir el que querais, o nombre proveedor o cod proveedor. Yo lo voy a hacer con cod proveedor. (en el campo que deseemos se pone =? y luego se especifica en la pestaña parametros de las propiedades del command agregado xD)

Añadimos un datareport, el datasource a DataEnvironment y el datamember al comand creado. Colocamos únicamente tres o cuatro rectángulos, en detalle sección1, con los datos deseados (se supone que eso van a ser las etiquetas xD).

Para añadir los datos se hace arrastrandolos desde el command del dataenviroment. Para adornarla se le puede añadir todo lo que creáis oportuno.

Se añade el código para evitar errores al reabrir el recordsource en el datareport queryunload

Private Sub DataReport_QueryClose(Cancel As Integer, CloseMode As Integer)
  DataEnvironment1.rsCommand5.Close
End Sub

Ejemplo etiquetas

Se añade un botón en el formulario principal, un DBCombo (click derecho sobre la barra de componentes/componente/pestaña controles/Microsoft Data Bound List Controls 6.0(OLEDB)) y lo asociamos a una oledatabase
(click derecho sobre la barra de componentes/componente/pestaña controles/Microsoft ADO data control 6.0(OLEDB)) .

Asignamos la cadena de conexión al adodc (database).

En su recordsource ponemos en su texto de comando.

select * from proveedores

(realmente solo nos hacen falta 2 campos, codproveedor y nomprovedor pero weno, ésto no lo pongáis eh!! xD)

Ahora asociamos el adodc al dbcombo.

En su propiedad rowsource le ponemos nuestro adodc, en lisfield el campo nombre y en boundcolumn el campo codpro.

Añadimos el siguiente código para que funcione al clicar en el botoncito y listo xD

Private Sub Command3_Click()
  If DataCombo1.BoundText <> “” Then
    DataEnvironment1.Command5 DataCombo1.BoundText
    DataReport3.Show
  Else
   MsgBox “Mamonazo selecciona alguno”, vbInformation, “Selecciona un proveedor xD”
  End If
End Sub

Una vez configurado compilamos y seleccionamos para ver si tira sino… algo has hecho mal o aligual he metido la pata xD

Los ejemplos estan realizados muy deprisa por lo tanto el diseño deja mucho que desear y tal xD

Si os ha sido útil puedo ir añadiendo algunos ejemplillos de hacer etiquetas y alguna cosilla más.

DESCARGAR Ejemplo Data Report Visual Basic 6.0 by RobiHm

P.D.(Para poder ver el environment y tal en agregar componentes, click derecho sobre la barra componentes/componentes/diseñadores/marcamos data report y data environment )

Share



[TUTORIAL] Crear Facturas/Pedidos/Etiquetas con Data Report desde Visual Basic 6.0

Hace tiempo escribí un manual para crear facturas en visual basic 6 y hoy lo recupero y agrego al blog 😀

Bueno visto que mucha gente viene pidiendo como añadir facturas o informes, voy a hacer un pequeño tutorial sobre el uso de data report desde visual basic 6.0.
Solamente hace un par de semanas desde que aprendí a utilizarlo y no creo que domine todo lo que si interfaz engloba.
Pero, dentro de mis limitaciones, voy a intentar explicar básicamente como preparar informes, facturas y etiquetas.

Vamos al lio.

Antes de nada decir que para que funcione hará falta tener una base de datos de la que recabar la información.

Agregar Data Enviroment
Para poder usar el Data Report, agrega un dataenviroment al proyecto (Menú Proyecto/Agregar Data Enviroment).

(Para poder ver el environment y tal en agregar componentes, click derecho sobre la barra componentes/componentes/diseñadores/marcamos data report y data environment )

Vemos que se ha añadido una nueva carpeta llamada Diseñadores a nuestro proyecto.

Lo mejor es cambiarle el nombre por DEFacturas o como quieras ya que DataEnvironment1 me resulta bastante engorroso (yo no voy a cambiar el nombre a nada para que se aprecie mejor el ejemplo).

Definir conexión
Al hacer doble click sobre nuestro dataenviroment, se nos abre una ventanita con un objeto llamado Connection1, cambiarle el nombre si queréis.
Yo voy a establecer la conexión a una base de datos access 2000. Esto variara según la base de datos o procedimiento por el que deséis conectaros a los datos de los que recobraremos la información.

Click derecho sobre connection1, propiedades:
*Proveedor : Microsoft Jet 4.0 OLE Data Provider
(Siguiente)
*Conexión : Seleccionamos la que deseemos, dejando luego solamente el nombre y la extensión de la base de datos (asi podremos utilizar rutas relativas).
Si tienes que rellenar algo más pues lo rellenas xD
(Probamos conexión para comprobarlo)

Creando las consultas
A continuación creamos las consultas con las que recuperaremos la información.
Click derecho sobre Connection1, agregar comando. (recomendable cambiarle el nombre)
El nuevo objeto creado Command1 va a servir para rellenar la cabecera de nuestras facturas.

Click derecho sobre el Command1, propiedades.
Marcamos la casilla instrucción sql, y generamos la consulta con el generador o a pelo.

Explico un poco el generador de consultas.
Se abre una ventanita llamada Vista de datos, de ahí tomamos las tablas. Con doble click sobre alguna te la abre en otra ventanita, si la arrastras y sueltas sobre el generador de consultas te agrega la tabla.
Relacionamos los campos de las tablas que deseemos (por defecto relaciona las claves externas). Se relacionan arrastrando/soltando sobre los campos.

En el ejemplo hemos añadido tres tablas y las hemos relacionado entre si por codprove (para sacar los datos del proveedor) y codactividad (actividad que realiza el proveedor)

Seleccionamos los campos que nos interesen, marcando simplemente el checkbox, abajo se nos añadiran, tendremos la opción de ordenar por ese campo y otras tantas.

Con esto ya tenemos la consulta generada, de forma que nos devuelve todas las cabeceras de las facturas.
Luego explicare como hacerlo para que solamente devuelva una factura.

Relacionando Consultas
Ya tenemos la cabecera de los pedidos, ahora solamente faltan las líneas que forman cada pedido. Para ello vamos a crear otro Command haciendo click derecho sobre la conexión, agregar comando.

Click derecho propiedades, entramos al generador y seleccionamos los campos que deseemos mostrar en la factura/pedido, vamos a añadir también el numpedido puesto que nos hara falta para relacionar el cuerpo con la cabecera de la factura.

Esta vez solo he asociado lineapedidos con modulos.
Una vez seleccionados los campos guardamos, click derecho Command2 propiedades/Relación, marcamos la casilla relacionar con un comando primario, seleccionamos el nombre del command con que deseamos relacionarlo (Command1) y seleccionamos el campo por el cual se seleccionará, numpedido. Agregamos y aceptamos, ahora veremos que el Command2 se encuentra dentro del Command1. Con ésto hemos logrado que por cada línea de la cabecera tengamos todas las líneas del pedido.

Creando el diseño
Ahora vamos a crear el diseño para mostrar los datos, para ello data report presenta un interfaz bastante intuitivo y sencillo de manejar. Eso si, muy limitadito xD

Para agregarlo basta con ir al menú (Protecto/Agregar Data Report)
En la propiedad del data report lo asociamos con el datasource al enviroment que hemos creado y el datamember con el command1.
Clicamos con el botón derecho sobre el diseño y le damos a obtener estructura, aceptamos.
Clicamos con el botón derecho sobre el diseño y le damos a forzar a la cuadrícula, de este modo podremos poner las cosas sin estar obligados por las extrañas dimensiones que te indica el programa xD

Ahora abrimos con doble click nuestro enviroment y arrastramos los campos a sus cabeceras correspondientes.
Command1 al command1_header y command2 al command2_detail.
Cada vez que añades algo se agrega el campo y el nombre del campo. Podéis cambiarles las letritas y poner adornos si queréis xD

Lo recomendable en el command2_detail es solamente poner los valores y los campos de nombre asociados ponerlos en la cabecera del command1_header tal y como se muestra en el ejemplo. De esta manera no repetiréis todo el rato el nombre de los campos.

Vamos a contar también la cantidad de articulos pedidos y su precio total con las funciones que tenemos en la barra de controles del datareport. Es la E con el pergamino (la última).
Añadimos en command1_footer, un control para contar (definir propiedad functiontype) y otro para sumar. Datamember command2 y en datafield el campo sobre el que se aplicara la función.

Si queremos evitar que salgan todos los pedidos seguidos, lo mejor es activar la opción ForcePageBreak (1- rptPageBreakBefore) del command1_header para que separe las facturas por páginas.

Ahora añadiremos algo de código a nuestro datareport para que al salir cierre el recordsource que generará cada vez que lo llamemos.

Private Sub DataReport_QueryClose(Cancel As Integer, CloseMode As Integer)
  DataEnvironment1.rsCommand1.Close
End Sub

Como véis podemos añadir código en el datareport para realizar algunas tareas

Ya tenemos el diseño preparado. Ahora solo falta llamarlo.

Creamos un botón en nuestro formulario y en el evento hacer click ponemos.

Private Sub Command1_Click()
  'aquí llamamos al data enviroment y al método que llena el datareport, no es otro que el nombre de nuestro command de cabecera
  DataEnvironment1.Command1
  'aquí mostramo el datareport deseado
  DataReport1.Show
End Sub

En el ejemplo he sacado una única factura,
para ello he creado otro datareport (datareport2) he añadido lo mismo que antes,
dejando la opción del before por defecto.
He añadido también dos nuevas consultas, command3 en la que la realizo igual que la anterior(command1)
simplemente cambiando las cosillas que os digo a continuación y command4 que es idéntica a command2 (lo mejor es hacer copy paste de la sentencia generada de los anteriores y modificarla).

Para sacar una factura en el paso de generar el encabezado de la consulta (Command1) en nuestro command3
haremos todo igual salvo que deberemos especificar un parámetro,
eso se hace poniendo =? en el campo criterio de la consulta.
Luego click derecho command3 propiedades pestaña Parámetros, le ponemos un nombre, Ejemplo=NumeroFactura.

Para mostrar el datareport2 se le debe llamar con el parámetro.

Añadimos un textbox en el que meteremos el num del pedido que deseamos mostrar y
un botón para realizar las acciones.

  Private Sub Command2_Click()
    dataenviroment1.Command3 Val(Me.Text1.Text)
    datareport2.Show
  End Sub

DESCARGAR Ejemplo Data Report Visual Basic 6.0 by RobiHm

Share