Foros del Web » Programación para mayores de 30 ;) » Programación General »

ayuda por favor

Estas en el tema de ayuda por favor en el foro de Programación General en Foros del Web. holaa tengo un pequeño problema con un programa que cree en visual basic... cree los reportes con data report y funsionan a la perfeccion pero ...

  #1 (permalink)  
Antiguo 01/03/2004, 06:39
 
Fecha de Ingreso: enero-2004
Ubicación: Santiago
Mensajes: 87
Antigüedad: 20 años, 9 meses
Puntos: 0
ayuda por favor

holaa
tengo un pequeño problema con un programa que cree en visual basic...

cree los reportes con data report y funsionan a la perfeccion pero cuando genero el .exe del programa y lo llevo a otro pc, este no funsiona, el programa se cae cada vez que llamo a un reporte....
alguien sabe como puedo solucionar este problema... ayuda

Última edición por prometeo_1; 01/03/2004 a las 07:36
  #2 (permalink)  
Antiguo 01/03/2004, 13:23
 
Fecha de Ingreso: septiembre-2003
Mensajes: 172
Antigüedad: 21 años, 2 meses
Puntos: 0
Hola, seguramente tengas alguna ruta absoluta en el momento de cargar el report o en la conexion que hagas con la bd, repásate eso cambia las rutas absolutas por App.path & "\archivo". Otro problema que puedes tener es si no has creado el instalador, no se si creando el ejecutable es suficiente, cuando se usa Crystal Report no lo es, tenlo en cuenta tb.

Espero te ayude en algo. Saludos!
__________________
Sr.Propio
  #3 (permalink)  
Antiguo 01/03/2004, 13:34
 
Fecha de Ingreso: enero-2004
Ubicación: Santiago
Mensajes: 87
Antigüedad: 20 años, 9 meses
Puntos: 0
el problema es que estoy trabajando con data enviroment y si eso es lo que causa el error ???, quien me puede ayudar a programar los reportes de otra forma sin usar el data enviroment.. se lo agradeceria.. gracias
  #4 (permalink)  
Antiguo 02/03/2004, 02:25
Avatar de pabli  
Fecha de Ingreso: octubre-2003
Mensajes: 381
Antigüedad: 21 años
Puntos: 0
Código:
    Dim cnn1 As ADODB.Connection
    Dim rstEmployees As ADODB.Recordset
    Dim strCnn As String

    ' Abre una conexión.
        strCnn = "Provider=sqloledb;" & _
        "Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=; "
    Set cnn1 = New ADODB.Connection
    cnn1.Open strCnn
    
    ' Abre un conjunto de resultados.
    Set rstEmployees = New ADODB.Recordset
    rstEmployees.CursorType = adOpenKeyset
    rstEmployees.LockType = adLockOptimistic
    rstEmployees.ActiveConnection = cnn1
    rstEmployees.Source = "tu consulta"
    rstEmployees.Open

    Set DataReport1.DataSource = rstEmployees
    DataReport1.Show
prometeo_1,

esto es un ejemplo modificado sacado del MSDN, tienes que adaptarlo, si cierras el recordset se van los datos del informe, también tienes que agregar las referencias de ADO.

Si tienes algún problema, escribe y como dice rafapaskual ten cuidado con las rutas absolutas...

Saludos
Pablo
  #5 (permalink)  
Antiguo 02/03/2004, 08:37
 
Fecha de Ingreso: enero-2004
Ubicación: Santiago
Mensajes: 87
Antigüedad: 20 años, 9 meses
Puntos: 0
perdon pero no entiendo

lo unico que hacemos aqui es añadir la conexion al reporte eso lo entiendo (creo) pero que pasa con el formato del reporte como le digo cuales son los datos y como va el orden o como en el diseño.. no entiendo.. ayuda porfavor me estoy iniciando en lo que son los reportes y no entiendo...
haha otra cosa me consegui el crystal report 9 pero no logro comprenderlo asi que si es mas facil el crystal me ayudan a entenderlo para poder realizar mi trabajito..
  #6 (permalink)  
Antiguo 02/03/2004, 09:25
 
Fecha de Ingreso: enero-2004
Ubicación: Santiago
Mensajes: 87
Antigüedad: 20 años, 9 meses
Puntos: 0
holaaa yo de nuevo

logre hacerlo pero al queres pasarle parametros me aroja un error de que los tipos no coinciden y es en las fechas.. este es el codigo como lo tengo...

' Abre una conexión.
nDATABASE = "DB1.MDB"
conn1.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path() & "\" & nDATABASE + ";Persist Security Info=False"

' Abre un conjunto de resultados.
Set rst = New ADODB.Recordset
rst.CursorType = adOpenKeyset
rst.LockType = adLockOptimistic
rst.ActiveConnection = conn1

rst.Source = " SELECT * FROM CLIENTES WHERE FECHA_HORA BETWEEN " + fecha1 + " AND " + fecha2 + " AND ALERTA_DESCONOCE_CONTRATO = 'SI' ORDER BY FECHA_HORA "

rst.Open

Set Reporte_desconoce_contrato.DataSource = rst
Reporte_desconoce_contrato.Show

y en donde van las fechas esta el error como puedo hacerlo..
  #7 (permalink)  
Antiguo 02/03/2004, 10:06
Avatar de pabli  
Fecha de Ingreso: octubre-2003
Mensajes: 381
Antigüedad: 21 años
Puntos: 0
prometeo,

crystal es más complejo que el datareport, si estás empezando y lo que necesitas es una report sencilla, no te lo aconsejo.

-Donde te digo:
rstEmployees.Source = "tu consulta"

-aquí defines la consulta que necesites, por ejemplo:
rstEmployees.Source = "SELECT campo1, campo2 FROM TABLA"

-en el diseño del report tendrás que añadir dos textbox en la zona del detalle que tendrás que enlazar con el recordset así:

DataReport1.Sections("sec1").Controls("Texto0").Da taField = "campo1"
DataReport1.Sections("sec1").Controls("Texto1").Da taField = "campo2"

Set DataReport1.DataSource = rstEmployees
DataReport1.Show

Bueno, si tienes dudas escribe...
  #8 (permalink)  
Antiguo 03/03/2004, 07:00
 
Fecha de Ingreso: enero-2004
Ubicación: Santiago
Mensajes: 87
Antigüedad: 20 años, 9 meses
Puntos: 0
gracias por toda la ayuda ahora ando super pero con respecto a la consilta necesito que me ingrasen los parametros o las fechas entre las que se buscara info.. el error

fecha between fecha1 and fecha 2

Última edición por prometeo_1; 03/03/2004 a las 07:21
  #9 (permalink)  
Antiguo 03/03/2004, 07:12
Avatar de pabli  
Fecha de Ingreso: octubre-2003
Mensajes: 381
Antigüedad: 21 años
Puntos: 0
prometeo,

aquí:
Cita:
rst.Source = " SELECT * FROM CLIENTES WHERE FECHA_HORA BETWEEN " + fecha1 + " AND " + fecha2 + " AND ALERTA_DESCONOCE_CONTRATO = 'SI' ORDER BY FECHA_HORA "
si pones * en el report tendrás que poner tantos textbox enlazados como campos tengas en la tabla.

No te he entendido bien con el tema de las fechas, pero si lo que quieres es que el usuario teclee las fechas, pones dos textbox en el formulario que lanzará los report y las recoges en la select:

rst.Source = " SELECT * FROM CLIENTES WHERE FECHA_HORA BETWEEN " + fecha1.txt + " AND " + fecha2.txt + " AND ALERTA_DESCONOCE_CONTRATO = 'SI' ORDER BY FECHA_HORA "

antes de probar nada, la llevas a ACCESS a ver si funciona...

Saludos
Pablo
  #10 (permalink)  
Antiguo 03/03/2004, 07:20
 
Fecha de Ingreso: enero-2004
Ubicación: Santiago
Mensajes: 87
Antigüedad: 20 años, 9 meses
Puntos: 0
si la idea es que el usuario ingrese las fechas..
lo que estoy usando son DTPicker donde se muestra un pequeño calendario....
el tipo de consulta que se supone que funciona.. si funciona ya que con el data enviroment si funsionaba pero ahora no me corre por que sale el error

" no coinciden los tipos "

me he fijado que el formato de las fechas en los datos que trae el programa y en la base de datos access son iguales..

aa y gracias por tu ayuda pabli
  #11 (permalink)  
Antiguo 03/03/2004, 07:23
Avatar de pabli  
Fecha de Ingreso: octubre-2003
Mensajes: 381
Antigüedad: 21 años
Puntos: 0
prometeo,

si tienes problemas con las fechas en access, lo miramos a fondo, me pones las fechas que dan error y lo probamos.

Saludos
  #12 (permalink)  
Antiguo 03/03/2004, 07:33
 
Fecha de Ingreso: enero-2004
Ubicación: Santiago
Mensajes: 87
Antigüedad: 20 años, 9 meses
Puntos: 0
Pregunta

no entendi bien eso pero te envio el kodigo que utilizo al hacer la llamada al reporte..ok
Dim conn1 As New ADODB.Connection
Dim rst As ADODB.Recordset
Dim fecha1, fecha2

fecha1 = CDate(DTPicker1.Value)
fecha2 = CDate(DTPicker2.Value)

' Abre una conexión.
nDATABASE = "DB1.MDB"
conn1.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path() & "\" & nDATABASE + ";Persist Security Info=False"

' Abre un conjunto de resultados.
Set rst = New ADODB.Recordset
rst.CursorType = adOpenKeyset
rst.LockType = adLockOptimistic
rst.ActiveConnection = conn1
rst.Source = " SELECT FECHA_HORA, OBSERVACION, N_CONTRATO, TELEFONO, RUT_CLIENTE, NOMBRE_CLIENTE FROM CLIENTES WHERE (FECHA_HORA BETWEEN " + fecha1 + " AND " + fecha2 + ") AND ALERTA_DESCONOCE_CONTRATO = 'SI' ORDER BY FECHA_HORA "
rst.Open

Set Reporte_desconoce_contrato.DataSource = rst
Reporte_desconoce_contrato.Show

asi es como lo estoy intentando ya que en la base de datos tengo nnnn campos, pero solo quiero que selecionen la fecha nada mas..
  #13 (permalink)  
Antiguo 03/03/2004, 08:31
Avatar de pabli  
Fecha de Ingreso: octubre-2003
Mensajes: 381
Antigüedad: 21 años
Puntos: 0
Prueba así:

rst.Source = " SELECT FECHA_HORA, OBSERVACION, N_CONTRATO, TELEFONO, RUT_CLIENTE, NOMBRE_CLIENTE FROM CLIENTES WHERE FECHA_HORA BETWEEN #" + fecha1 + "# AND #" + fecha2 + "# AND ALERTA_DESCONOCE_CONTRATO = 'SI' ORDER BY FECHA_HORA "
rst.Open

con almoadillas y sin paréntesis.
  #14 (permalink)  
Antiguo 03/03/2004, 09:01
 
Fecha de Ingreso: enero-2004
Ubicación: Santiago
Mensajes: 87
Antigüedad: 20 años, 9 meses
Puntos: 0
noup sigue arrojando el mismo error...
  #15 (permalink)  
Antiguo 03/03/2004, 11:09
Avatar de pabli  
Fecha de Ingreso: octubre-2003
Mensajes: 381
Antigüedad: 21 años
Puntos: 0
prometeo,

esta consulta es parecida a la tuya, la he hecho sobre la BBDD Neptuno que la tendrás pues utilizas ACCESS 2000, pruébala:

SELECT * from pedidos
where fechapedido between #01-01-1997# and #31-12-1997#

-Revisa bien el tipo de la columna FECHA_HORA de tu BBDD

-Pon un punto de interrupción aquí:
Cita:
rst.Open
-y cuando se pare la ejecución te vas a la ventana inmediato y pones
?rst.Source
-enter y posteas lo que te salga, ¡¡¡a ver esa cadena!!!

A ver si lo solucionamos
  #16 (permalink)  
Antiguo 03/03/2004, 12:17
 
Fecha de Ingreso: enero-2004
Ubicación: Santiago
Mensajes: 87
Antigüedad: 20 años, 9 meses
Puntos: 0
pabli el formato de la fecha es 01/01/2004 y funciona pero cuando en la fecha coloco variables aparece el error.. que puede ser.

el error es: "no coinciden los tipos"

Última edición por prometeo_1; 03/03/2004 a las 12:20
  #17 (permalink)  
Antiguo 03/03/2004, 13:16
 
Fecha de Ingreso: septiembre-2003
Mensajes: 172
Antigüedad: 21 años, 2 meses
Puntos: 0
Hola!

Probablemente el problema lo tienes al usar el operador + para concatenar. Si fecha1 y fecha2 son variables de tipo fecha el operador + no lo sabrá añadir a la cadena. He probado el código que has mandado y el error lo da al asignar el valor a rst.Source no al hacer el open, que seria donde lo haria si fuera problema de la bd, por eso supongo que viene de esto el problema. Te recomiendo que uses el operador & para concatenar ya que si la variable no es de tipo string te lo convierte automaticamente, de hecho la propia ayuda del visual lo recomienda para concatenar. Espero te sirva.

Saludos!
__________________
Sr.Propio
  #18 (permalink)  
Antiguo 03/03/2004, 13:45
 
Fecha de Ingreso: enero-2004
Ubicación: Santiago
Mensajes: 87
Antigüedad: 20 años, 9 meses
Puntos: 0
este problemita me esta SACANDO CANAS VERDES .. rafapaskual lo que dijistes me sirvio y corre el programa.... pero en sierta forma noo.. ahora el reporte no me muestra los datos que deberia mostrarme...

El problemin se encuentra en esa sentencia

fecha_hora between "& fecha1 &" and "& fecha2 &"

please ayudaaaa

Última edición por prometeo_1; 03/03/2004 a las 14:08
  #19 (permalink)  
Antiguo 03/03/2004, 14:16
 
Fecha de Ingreso: septiembre-2003
Mensajes: 172
Antigüedad: 21 años, 2 meses
Puntos: 0
Hola otra vez!
Pues no sabria que decirte pq yo tb tengo muchos problemas con las fechas y el access, si ya has probado lo de las # prueba a poner la fecha al reves, creo recordar que tuve un problema con el Acces97 pq ponia el mes antes del dia o algo así. Yo lo que hago para probar es poner una interrupción en la linia donde creo el sql y copiar la cadena que genero en el Acces directamente, es posible que te de mas información... siento no ser de mas ayuda. Saludos!
__________________
Sr.Propio
  #20 (permalink)  
Antiguo 03/03/2004, 15:56
Avatar de pabli  
Fecha de Ingreso: octubre-2003
Mensajes: 381
Antigüedad: 21 años
Puntos: 0
prometeo,

no se si has hecho lo de probar la sentencia SQL directamente en ACCESS, es importante, por que en el momento que te funcione allí lo podrás pasar al código.
Que no se te olvide los #

Pablo
  #21 (permalink)  
Antiguo 04/03/2004, 06:43
 
Fecha de Ingreso: enero-2004
Ubicación: Santiago
Mensajes: 87
Antigüedad: 20 años, 9 meses
Puntos: 0
perdona la ignorancia y la flojera pero como lo hago para darle los parametros a las fechas en access..

ademas ya probe con darle las fechas de manera fija y resulto

rst.Source = " SELECT * FROM CLIENTES WHERE FECHA_HORA between #01/01/1997# and #31/12/1997# AND ALERTA_DESCONOCE_CONTRATO = 'SI'"

lo de arriva si funciona teniendo en cuenta el formato dd/mm /aaaa ... de la fecha

pero cuando quiero hacer lo mismo pero asignandole las fechas que ingresa el usuario, aparece el error..

puede ser en la declaracion no se

between "& fecha1 &" and "& fecha2 &" con esta sentencia no me aroja error y me muestra el reporte en blanco y no me muestra ningun dato....
  #22 (permalink)  
Antiguo 04/03/2004, 12:28
Avatar de pabli  
Fecha de Ingreso: octubre-2003
Mensajes: 381
Antigüedad: 21 años
Puntos: 0
Es dificil explicarse a distancia y por escrito.

Cita:
perdona la ignorancia y la flojera pero como lo hago para darle los parametros a las fechas en access..
cuando hablo de probar en ACCESS me refiero a copiar la cadena SQL directamente en una consulta de la BBDD poniendo las fechas a mano.

ATENCION:
pero lo que nos interesa, en este problema y otros futuros es depurar el programa de la manera más eficiente. Mas arriba te decía la manera de parar el código con un punto de interrupción. Esto no solo es bueno, sino imprescindible, porque, para saber lo que realmente se está enviando a la BBDD a través de ADO, y sobre todo ver los formatos de las fechas que devuelve el DTPicker, que a todas luces es incompatible con la sintaxis que acepta ACCESS, por la configuración regional o lo que sea.

Hay una cosa clara y es que el formato del DTPicker1 es fijo, o sea que el usuario no va a poner la fecha como le apetezca.
Sería muy importante que pararas la ejecución del programa con un punto justo después de:

rst.Source = " SELECT ...

en ese momento, la propiedad "Source" tendrá la sentencia. Cópiala y la vemos a ver que está mal...


Última edición por pabli; 04/03/2004 a las 12:30
  #23 (permalink)  
Antiguo 04/03/2004, 12:39
 
Fecha de Ingreso: septiembre-2003
Mensajes: 172
Antigüedad: 21 años, 2 meses
Puntos: 0
Hola, puedes poner la sentecia tal como la tienes ahora?
__________________
Sr.Propio
  #24 (permalink)  
Antiguo 04/03/2004, 13:07
 
Fecha de Ingreso: enero-2004
Ubicación: Santiago
Mensajes: 87
Antigüedad: 20 años, 9 meses
Puntos: 0
hola

pablo....
el problema es que todo se ve perfecto.. incluso al poner una interrupcion voy al source y me muestra las fechas dtpicker con el mismo formato que le asigne yo al momento de hacer las pruebas anteriores ...

no puedo copiar lo que dice el source pero sale la sentencia

select...bla.bla .. where fecha_hora between 24/02/2004 an...

y rafa..

Dim conn1 As New ADODB.Connection
Dim rst As ADODB.Recordset
Dim fecha1, fecha2

'fecha1 = CDate(DTPicker1.Value)
'fecha2 = CDate(DTPicker2.Value)

' Abre una conexión.
nDATABASE = "DB1.MDB"
conn1.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path() & "\" & nDATABASE + ";Persist Security Info=False"

' Abre un conjunto de resultados.
Set rst = New ADODB.Recordset
rst.CursorType = adOpenKeyset
rst.LockType = adLockOptimistic
rst.ActiveConnection = conn1
rst.Source = " SELECT * FROM CLIENTES WHERE FECHA_HORA BETWEEN " & DTPicker1.Value & " and " & DTPicker2.Value & " AND ALERTA_DESCONOCE_CONTRATO = 'SI'"
rst.Open

Set Reporte_desconoce_contrato.DataSource = rst
Reporte_desconoce_contrato.Show
  #25 (permalink)  
Antiguo 04/03/2004, 13:38
Avatar de pabli  
Fecha de Ingreso: octubre-2003
Mensajes: 381
Antigüedad: 21 años
Puntos: 0
Cita:
rst.Source = " SELECT * FROM CLIENTES WHERE FECHA_HORA BETWEEN " & DTPicker1.Value & " and " & DTPicker2.Value & " AND ALERTA_DESCONOCE_CONTRATO = 'SI'"
Les has quitado las # nooooooooooooooo



He probado en ACCESS por si dieran problema las barras en la fecha 22/11/2004, pero las coge sin problema.

Pon las #:

rst.Source = " SELECT * FROM CLIENTES WHERE FECHA_HORA BETWEEN #" & DTPicker1.Value & "# and #" & DTPicker2.Value & "# AND ALERTA_DESCONOCE_CONTRATO = 'SI'"

  #26 (permalink)  
Antiguo 04/03/2004, 13:56
 
Fecha de Ingreso: enero-2004
Ubicación: Santiago
Mensajes: 87
Antigüedad: 20 años, 9 meses
Puntos: 0
pablo

lo he intentado de todas formas con comillas sin comillas, con gato sin gato (#) ahora pasa como si estubiera bien pero no me rescata ni un solo dato me muestra el reporte en blanco.... y no lo entiendo ya que cuando le puse a la sentencia

fecha_hora between #01/01/2004# and #01/02/2004#

ahi si me muestra los registros que tengo en la bd access

pero ahora nada
  #27 (permalink)  
Antiguo 04/03/2004, 14:01
 
Fecha de Ingreso: enero-2004
Ubicación: Santiago
Mensajes: 87
Antigüedad: 20 años, 9 meses
Puntos: 0
me acabo de dar cuenta de algo raro

tal cual lo tengo funciono ahora pero solo al seleccionar las fechas de un determinado mes...
explico

en las pruebas que he echo tengo informacion solo con fecha del mes de enero..ok

al selecionar las fechas 01/01/2004 hasta 31/01/2004 me muestra la informacion.. osea que esta bien......pero

al seleccionar las fechas 01/04/2004 hasta 01/02/2004 no me muestra nada por que sucede eso...
  #28 (permalink)  
Antiguo 04/03/2004, 14:12
 
Fecha de Ingreso: enero-2004
Ubicación: Santiago
Mensajes: 87
Antigüedad: 20 años, 9 meses
Puntos: 0
otro resultado de pruebas

no entiendo pero solo me entrega la informacion si selecciono
las fechas 01/01/2004 hasta 30/01/2004

y si selecciono 02/01/2004 hasta 30/01/2004 no me muestra ningun dato

Última edición por prometeo_1; 04/03/2004 a las 14:15
  #29 (permalink)  
Antiguo 04/03/2004, 14:26
Avatar de pabli  
Fecha de Ingreso: octubre-2003
Mensajes: 381
Antigüedad: 21 años
Puntos: 0
Cita:
al seleccionar las fechas 01/04/2004 hasta 01/02/2004 no me muestra nada por que sucede eso...
hombre, como te va a mostrar algo:

le pides que te muestre registros que van desde
el 1 de abril de 2004
hasta
el 1 de febrero de 2004

¡¡¡vas hacia atrás!!! errorrrrrrrrrrrrr

con un between la primera fecha menor o igual que la segunda

Cita:
y si selecciono 02/01/2004 hasta 30/01/2004 no me muestra ningun dato
tienes realmente datos después del 2 de enero con este día incluído???
  #30 (permalink)  
Antiguo 04/03/2004, 14:35
 
Fecha de Ingreso: enero-2004
Ubicación: Santiago
Mensajes: 87
Antigüedad: 20 años, 9 meses
Puntos: 0
haber lo del abril y febrero fue erro de dedo al escribir en el foro
y tengo unciclo que me previene de ese error ya que tengo en cuenta que lo van a ocupar usuarios normales..

y la ultima pregunte no te la entendi

otra cosa segui haciendo pruebitas y si selecciono 01/01/2004 hasta cualquier fecha dentro de enero osea hasta el 31 me muestra los datos.. pero
tengo datos solo el dia 6 de enero para pruebas ahora (solo este dia) y si selecciono las fechas 01/01/2004 hasta 05/01/2004 los mustra igual

otra cosa si selecciono 02/01/2004 hasta 31/01/2004 no muestra nada...

realmente me supera por hoy...
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:13.