• Jueves 14 de Noviembre de 2024, 08:03

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 - Moy

Páginas: [1] 2
1
ASP .NET / Re: Componente Aspupload
« en: Jueves 16 de Junio de 2005, 11:54 »
Hm... Retomemos esto.
Mirando la "ayuda" del ASPUpload (Ayuda, por llamarla de alguna manera) he visto una parte que te dice como usarlo en .Net, que como de costumbre, es tan farragosa que nunca sabes si lo has hecho bien y el problema es que realmente no funciona o es que eres un cenutrio y no sabes leer ni las instrucciones de una tostadora.

El primer paso que dice es poner en la etiqueta @Page un trozo para que sea compatible con instrucciones ASP.
Código: Text
  1.  <%@ Page aspCompat="True" other attributes%>
  2.  
Vale, eso no parece complicado.

Segundo paso, meter en una carpeta llamada /Bin en el direcctorio de tu proyecto el fichero ASPUploadlib.dll que encuentras en la carpeta donde lo instalaste.
Ok, sin problema.

En el tercer paso te ponen un ejemplo de una paginuka que debería funcionar, pero... ¡Los muy kbritos me la ponen en C#!
Código: Text
  1.  
  2.  <%@ Page aspCompat="True" %>
  3. <%@ Import Namespace="System.Web" %>
  4. <%@ Import Namespace="System.Reflection" %>
  5. <%@ Import Namespace="ASPUPLOADLib" %>
  6.  
  7. <script runat="server" LANGUAGE="C#">
  8. void Page_Load(Object Source, EventArgs E)
  9. {
  10.    ASPUPLOADLib.IUploadManager objUpload;
  11.    objUpload = new ASPUPLOADLib.UploadManager();
  12.  
  13.    int Count = objUpload.Save("c:\\upload", Missing.Value, Missing.Value);
  14.  
  15.    // iterate through Files collection
  16.    foreach( ASPUPLOADLib.IUploadedFile objFile in objUpload.Files )
  17.    {
  18.       txtFiles.InnerHtml += objFile.Name + "= " + objFile.Path + " (" + objFile.Size + " bytes)<BR>";
  19.    }
  20.  
  21.    // iterate through Form collection
  22.    foreach( ASPUPLOADLib.IFormItem objItem in objUpload.Form )
  23.    {
  24.       txtFormItems.InnerHtml += objItem.Name + "= " + objItem.Value + "<BR>";
  25.    }
  26. }
  27. </script>
  28.  
  29. <html>
  30. <body>
  31. Files:<BR>
  32. <div id="txtFiles" runat="server"/><P>
  33. Form Items:<BR>
  34. <div id="txtFormItems" runat="server"/><P>
  35. </body>
  36. </html>
  37.  
  38.  
Si sé poco de visual .net imaginaos de C#. Voy a ver si creando una página desde cero con ese tocho compruebo si de verdad funciona o me están tomando el pelo.
El problema va a ser pasarla a .Net después si funciona.

2
ASP .NET / Re: Cómo Usar Los Regularexpressionvalidators
« en: Jueves 16 de Junio de 2005, 10:17 »
Ok, genial.  :D
Mira, por una vez el ASP.Net tiene un detalle y me hace la vida más facil en vez de amargármela; aunque me sigue pareciendo que funciona por ósmosis (tengo dos botones en el formulario, uno para guardar una imagen de avatar y el otro para aceptar el registro. ¿Como puñetas sabrá el compilador que los validadores solo hay que comprobarlos con el botón de aceptar el registro y no con el del avatar, si no hay ninguna referencia que enlace los validadores con los botones? Lo dicho, ciencia infusa, ósmosis o que solo hace caso al botón que esté más abajo en el formulario. :blink: )

Mirando una ayuda me salía que [a-zA-Z0-9_] se podía sustituir por \w, asi que al final solo basta con poner:
Código: Text
  1. \w{6,20}
  2.  
Así si que da gusto programar.  B)

Si hubiera un validador para comprobar que el usuario no se registra con un Nick que ya está usado ya sería la caña; pero bueno, no se puede tener todo. Me lo tendré que hacer a mano. :comp:

3
ASP .NET / Cómo Usar Los Regularexpressionvalidators
« en: Miércoles 15 de Junio de 2005, 11:25 »
Ke tal?
Estoy echándole un vistazo a los controles de validación del ASP.Net y aunque por ahora me parece que funcionen por ciencia infusa, no tienen mala pinta y me van a ahorrar mucho código a la hora de comprobar si el usuario ha introducido una direccion de email correcta o si ha confirmado bien la clave de acceso.
La duda que tengo es precisamente con la clave.
Por lo típico, un textbox para que el usuario ponga la clave con la que quiere acceder a una página y debajo otro para que lo confirme.
Con el comparevalidator comparo que las claves coicidan; pero además de eso me gustaria exigir que la clave sea de un tamaño determinado y que solo contenga letras, numeros y la barra de subrayado _
No por nada en especial o porque me vaya a dar errores si meten interrogaciones, pero así queda más profesional.
He mirado ya dos libros y a lo maximo que he llegado es a usar un RegularExpressionValidator con este patron:
[a-zA-Z0-9_]{6}
Esto hace que la clave pueda contener caracteres alfanumericos y la raya esa, pero obliga a que solo pueda tener 6 caracteres.
¿Como podría ponerle para que ese seis sea solo el mínimo de caracteres y te deje hacerlas más largas?

Puede que lo descubra yo mismo, pero alguien que esté empezando podría encontrar interesante este asunto de los validadores (la verdad es que quitan bastante trabajo. Espero que no me salgan rana y luego hagan lo que les de la gana)

4
ASP .NET / Re: Error De Insertado En Tabla Access
« en: Martes 14 de Junio de 2005, 20:33 »
Diox... El que no sabe es como el que no ve...
Ya descubrí cual era el fallo que me ha tenido 3 días estancado en la misma linea de código.

El error que me saltaba me decía "La consulta debe ser actualizable", cuando lo que los kpullos de microsoft deberían haber puesto era "Mira, que la base de datos Access está puesta como solo lectura para los usuarios y así solo te va a dejar hacer selects."  <_<

Quitándole el "solo lectura" funciona, pero supongo que si en la cadena de conexión me identifico como administrador me dejará sin tener que dejar la base tan desprotegida.

Ke duro es ser programador...  :oops:

5
ASP .NET / Re: Error De Insertado En Tabla Access
« en: Martes 14 de Junio de 2005, 10:23 »
Nada, que sigo sin poder insertar nada en la tabla Access.
¿Qué puede estar fallando?
¿Hay que tener algo en cuenta a la hora de trabajar cin una base de datos access localizada en el servidor?

En vez de insertar he probado meter a mano un par de lineas y de mostrarlas por pantalla, y funciona, por lo que la cadena de conexión no debería ser el problema.
¿Podría ser por la generación automatica de los comandos?

Por si acaso estoy intentando hacer la inserción por medio de comandos, pero tambien me falla y me dice que hay un error en la sentencia Insert into.
Esto es lo que he hecho
Código: Text
  1.  
  2. Dim sql As String
  3. Dim loquesalga as integer
  4.         Try
  5.             sql = "insert into T_perfil(nombre,apellidos,password,email,localidad) "
  6.             sql = sql + "Values('Paco','Garcia','11234','algarroba@hotmail.com','Cuenca')"
  7.  
  8.             Dim Cmd As New OleDbCommand(sql, Cn)
  9.             Cn.Open()
  10.             loquesalga=Cmd.ExecuteNonQuery()
  11.             Cn.Close()
  12.         Catch ex As Exception
  13.             Response.Write("Excepcion:" + ex.ToString())
  14.         End Try
  15.  
  16.  

La instruccion de sql que uso para insertar no debería ser el problema,ya que la he usado tambien a mano en un editor sql y funciona perfectamente.
¿Puede ser porque uso un autonumerico como clave principal?

6
ASP .NET / Error De Insertado En Tabla Access
« en: Viernes 10 de Junio de 2005, 14:29 »
Yo que estoy ya acostumbrado a manejar tablas, datarows y datasets en el .Net, me voy al ASP.Net y tengo que pedir lo tipico, los datos de un tipo para registrarle en un foro (o enviarle correo basura por un tubo) y al intentar hacer el update con el data adapter me revienta el código diciendo que le tengo que pasar una consulta actualizable.
¿Qué coño es eso?

Veamos, yo tengo una base de datos Access llamada Perfiles en el directorio virtual donde estoy trabajando.
La conexión, rellenado del dataset Datos y la creación de los comandos de inserción lo hago así.
Código: Text
  1.  
  2. Dim Ruta As String
  3. Dim CustomCB As OleDbCommandBuilder
  4.  
  5. Ruta = Server.MapPath("/formulario/Perfiles.mdb")
  6. Cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Ruta
  7. Adapt = New OleDbDataAdapter("SELECT id_usuario, nombre, apellidos, password, fecha, email, localidad, genero, foto, permiso FROM T_perfil", Cn)
  8. Datos = New DataSet
  9. Cn.Open()
  10. Adapt.Fill(Datos, "T_Perfil")
  11. TablaPerfil = Datos.Tables("T_perfil")
  12.  
  13. 'Generación de los códigos de modificación
  14. CustomCB = New OleDbCommandBuilder(Adapt)
  15. CustomCB.QuotePrefix = "["
  16. CustomCB.QuoteSuffix = "]"
  17. CustomCB.RefreshSchema()
  18. Cn.Close()
  19.  
  20.  
Hasta ahí todo correcto, espero.
Ahora veamos como creo una nueva fila, la relleno y se la inserto al dataset por donde le quepa.
Código: Text
  1.  
  2. Cn.Open()
  3.  
  4. Ficha = Datos.Tables("T_perfil").NewRow()
  5. Ficha("nombre") = Me.TNombre.Text
  6. Ficha("apellidos") = Me.TApellido.Text
  7. Ficha("password") = Me.TPassword.Text
  8. Ficha("email") = Me.TEmail.Text
  9. Ficha("genero") = Me.RBGenero.SelectedValue
  10. Ficha("localidad") = Me.TLocalidad.Text
  11. If Me.CTerminos.Checked Then
  12.    Ficha("permiso") = True
  13. Else : Ficha("permiso") = False
  14. End If
  15.  
  16. Datos.Tables("T_perfil").Rows.Add(Ficha)
  17. Adapt.Update(Datos, "T_perfil")
  18.  
  19. Datos.AcceptChanges()
  20. Cn.Close()
  21.  
  22.  
Esto sería lo básico, ya me preocuparé de filtrar los errores y demás pasteles cuando funcione, porque al llegar al adapt.update me dice que no le sale de los comandos hacerlo y me suelta el mensaje de que quiere una consulta actualizable.

Yo estoy ya que no veo, asi que por favor, ¿alguno de vosotros logra ver en qué me he equivocado y me puede dar la colleja salvadora que me dirija por el camino correcto?

7
ASP .NET / Re: Componente Aspupload
« en: Viernes 10 de Junio de 2005, 14:02 »
Tu lo has dicho, si funciona.
Pero como no lo hace me entra la psicosis y me dan ganas de desarmarlo.
He dejado apartado ese trozo de código de momento por un problema más grave que me ha salido por otra parte (voy a ver si alguien ha posteado sobre ese mismo problema) y en cuanto lo solucione volveré a por este.

8
ASP .NET / Re: Componente Aspupload
« en: Jueves 9 de Junio de 2005, 15:47 »
Hm... ¿Eso es también hecho con el ASPUpload?
Es que lo que has puesto no se le parece en nada y resulta que con el AspUpload hay una foma muy sencilla de restringir el tamaño de los ficheros (aunque yo necesitaría primero saber como funciona lo básico para poder usarlo)

A ver... Según el manual del AspUpload deberías usar este código.
Código: Text
  1.  
  2.  <HTML>
  3. <BODY>
  4. <%
  5. Set Upload = Server.CreateObject("Persits.Upload")
  6.  
  7. ' Limita e ltamaño del fichero en 50Kb, lanzando una excepcion si es más grande
  8. Upload.SetMaxSize 50000, True
  9.  
  10. ' Captura todas las excepciones para que controles los mensajes de error
  11. On Error Resume Next
  12.  
  13. 'Lo mas "sencillo", cargar el fichero ¿Com puñetas haran que funcione?
  14. Upload.Save "c:\upload"
  15.  
  16. ' 8 es el numero que te devuelve la excepción de "fichero demasiado grande"
  17. If Err.Number = 8 Then
  18.    Response.Write "Tu fichero es demasiado grande. Usa otro o déjame tranquilo."
  19. Else
  20.    If Err <> 0 Then
  21.       Response.Write "Ha ocurrido un error: " & Err.Description
  22.    Else
  23.       Response.Write "¡Por fin! ¡Funcionó!"
  24.    End If
  25. End If
  26. %>
  27.  
  28. </BODY>
  29. </HTML>
  30.  
  31.  
Qué facil lo pintan...

A mi me gustaría saber como se supone que el Upload.save consigue los datos del fichero que has elegido. ¿Los adivina por la cara? ¿Los captura por ósmosis?

Es que en ningun momento se pasa parametro alguno ni se usan los identificadores del los imput. ¿Como quieren que funcione eso?
Y sin embargo funciona, porque he visto ejemplos ya hechos (desgraciadamente solo en ASP y C#) y tiene una pinta inmejorable. Te puedes crear un tumbnail a la escala que te de la gana, aplicarle un filtro, rotarlo y todo con apenas 20 lineas de código.

Tengo que averiguar como lo hacen...  :ph34r:

9
ASP .NET / Componente Aspupload
« en: Jueves 9 de Junio de 2005, 10:24 »
En el trabajo me han dicho que utilice un componente de ASP llamado ASPUpload que sirve para hacer más facil subir imagenes a un servidor. Por poner un ejemplo, podría utilizarlo para pedir al usuario una imagen que quiera usar como avatar en un foro, comprobar que no sea demasiado grande y guardarla en la carpeta que yo quiera.

El caso es que como no tengo ni idea de ASP y de ASP.NEt estoy aun muy verde, no entiendo muy bien lo que el manual trata de decirme y me parece que son tan solo ejemplos de ASP, ya que al copiarlos y pegarlos en mi proyecto revientan por todas partes o se ejecutan sin hacer absolutamente nada.

Os pongo un ejemplo:
Código: Text
  1.  
  2. <HTML>
  3. <BODY BGCOLOR="#FFFFFF">
  4.  
  5. <FORM METHOD="POST" ENCTYPE="multipart/form-data" ACTION="cargar.asp">
  6. <INPUT TYPE=FILE SIZE=60 NAME="FILE1"><BR>
  7. <INPUT TYPE=FILE SIZE=60 NAME="FILE2"><BR>
  8. <INPUT TYPE=FILE SIZE=60 NAME="FILE3"><BR>
  9. <INPUT TYPE=SUBMIT VALUE="Upload!">
  10. </FORM>
  11.  
  12. </BODY>
  13. </HTML>
  14.  
  15.  
Esto se supone que iría en la parte HTML. Todos los sitios donde he mirado insisten en que es obligatorio poner el ENCTYPE con lo de multipart para que en vez del nombre del fichero, recoga el fichero en si. ¿Seguro que funciona eso? ¿Se puede meter un Form dentro del form que ya tengo hecho o vale con ponerle el ENCTYPE al que engloba todo mi formulario?
El caso es que yo no trabajaría con un fichero "cargar.asp", asi que ya empiezan los problemas.

En dicho fichero supuestamente va este código.
Código: Text
  1.  
  2. <HTML>
  3. <BODY>
  4.  
  5. <%
  6. Set Upload = Server.CreateObject("Persits.Upload.1")
  7. Count= Upload.Save("d:\xvrt\midominio.com\html\upload")
  8. %>
  9. <% = Count %> ficheros subidos.
  10.  
  11. </BODY>
  12. </HTML>
  13.  
  14.  
¿Otro codigo Html? No termino de pillarlo. ¿Como se supone que podría convertir eso en codigo .Net?

Por ahí dicen que es posible, aunque no dicen como. Lo malo es que como es un componente que hay que instalar aparte (y que no es gratuito), la peña en general habrá pasado 27mil kilos de usarla y se habrá hecho sus scripts de petición de imagenes con javascript, que es mas raro que un perro verde.

Si hubiese alguien que sabe como usar en ASP.Net esta cosa, le agradecería que me echase un cable.

PD: Tampoco me vayais a decir "Si, es posible usarlo con ASP.Net" y no me digais siquiera donde encontrar un ejemplo. Hm... Aunque sería peor si no me dijerais absolutamente nada.  :(

10
VB .NET / Re: Crystal Report: Campos Que Acepten Valores Nulos
« en: Jueves 26 de Mayo de 2005, 11:16 »
Un refrán hindú dice:
Si tus problemas tienen solución,
¿De qué te quejas? (Entre lineas, haz lo que hace falta para arreglarlo y dejame de comerme la oreja con tus rollos)
Si tus problemas no tienen solución,
¿De qué te quejas? (Entre lineas, Ajo y Agua; haberte pasado al Linux)

Aun no sé porqué un valor nulo en un campo puede hacer que todo el informe aparezca en blanco, ni me importa, ya que logré evitar este error como de costumbre, con un parche poco elegante pero eficaz, hasta que revienten las costuras por otra parte.
Es duro, pero poco a poco la filosofía Microsoft termina imponiéndose.

Veamos, por ahí vi que no era el único con este problema y que la solución era poner siempre un valor por defecto. El caso es que poner "" como defecto tampoco le gusta al Crystal, asi que al final tuve que ponerle un espacio en blanco (Lo digo como si fuera lo mas sencillo del mundo, pero en realidad casi me vuelvo loco porque al usar Databindings, al hacer un nuevo, todos los campos se establecían a "", eliminando el valor por defecto que venía desde el access y es como si no hubiera hecho nada. No veais hasta que me di cuenta de eso...  :wacko:)

Bueno, tomad precauciones y si sabeis que algun campo que le paseis al Crystal puede ir vacío, obligadle a tener un valor dependiendo del tipo de dato que sea. Si es cadena un string, si es número un cero y si es una imagen, ponedle un fondo blanco o una imagen con un letrero "Imagen no disponible" o "Estamos en obras, dejenme trabajar tranquilo"

Os lo advierto, no caigais en la tentación de obligar al usuario a rellenar absolutamente todos los campos si no son información vital. Eso conlleva al lado oscuro de la programación.

La senda del Crystal Report llena de obstáculos y sinsabores está. Del lado oscuro debeis guardaros.  

PD: Nunca adivinariais qué pelicula acabo de ver.  :lightsabre:

11
VB .NET / Re: Instalador
« en: Miércoles 25 de Mayo de 2005, 14:35 »
En principio con el instalador te ahorrarías el problema de las dll y de tener que trastear con el crystal report más allá de asignarle los datos y crear el esquema en el que se mostrarán los datos.

La precaución más importante que tienes que tener en cuenta es no incluir en tu programa absolutamente ninguna cadena de conexion a una base de datos, o direccion de cualquier otro fichero que no calcules por medio de la función que te localiza el path de la aplicación (que es más facil decirlo que hacerlo)

El instalador se encargaría de incluir todo lo que haga falta para que funcione y además puedes incluir archivos de bases de datos, imagenes, iconos y demás en el mismo instalador y que vaya todo empaquetado dentro, con lo que ganas en limpieza.
Además, puedes especificarle que te cree enlaces de tu programa en el escritorio y en el menu de inicio, como todo un pofesioná.  :P

Al principio es un poco lioso, pero si le pillas el truco puedes instalarlo y desinstalarlo desde el propio visual studio para hacer pruebas con solo pulsar con el boton derecho sobre el icono del proyecto de instalacion del explorador de soluciones.

PD: No es Mov, sino Moy con Y.  :huh:
Es que como está subrayado se confunde.  :D

12
VB .NET / Re: Instalacion Crystal Reports
« en: Miércoles 25 de Mayo de 2005, 12:21 »
Buf... El Crystal te puede fallar por tantos motivos que parece un producto de Microsoft. Tal vez por eso lo han incluido en el .Net, para que no desentone.

Yo tambien me estoy peleando con un crystal que tiene que ir en una aplicación que va a ser instalada en otros equipos.
Los problemas principales que me he encontrado están expuestos en este foro, pero haré una recopilacion:
-Si diseñas el Informe en la ventana de diseño, hay que tener muy en cuenta que la cadena de conexion de la base de datos podría cambiar en el futuro equipo donde se ejecute el programa (aproximadamente hay un 250% de probabilidad), asi que lo más recomendable es trabajar en vez de con bases de datos, que te obliguen a establecerles de antemano una cadena de conexion, con algun dataset incluido dentro de la aplicacion (que tambien se las traen)
-Hablando de los datasets, el Crystal sufre de miopia galopante y solo va a poder ver (que yo sepa, de momento) los Datasets creados en diseño. Ya sé que los creados en código funcionan mejor y son más profesionales, pero profesional es un término que no se puede aplicar al Crystal Report que viene incluido en el Visual Estudio. Tal vez todos estos problemas estén más que solucionados en las versiones de pago, pero si el bolsilo no está como para derroches habrá que tragar con lo que hay.
-El Crystal Report odia los valores nulos (Casi tanto como yo lo odio a él) asi que si detecta uno, reacciona desde pasando de mostrar los campos de una tabla entera (incluyendo los que no sean nulos) hasta mostrarte una fabulosa página con la estructura que le hayas dado pero sin dato alguno, cuando lo unico que falta es el numero del movil de un tipo que por casualidad de la vida no tenía.
La forma de solucionarlo momentaneamente es establecer siempre un valor por defecto, si es una cadena de texto mejor un espacio que poner "", que tampoco le gusta al Crystal. Si es número pon un cero y si es una imagen es mejor que incluyas en tu proyecto una imagen que sea un cuadrado blanco o un rotulo de Imagen no disponible, porque si no las vas a pasar canutas.

Esto es en lo que me ha fallado a mi. Comprueba si coincide alguno de los casos con el tuyo y reza porque no seas el afortunado descubridor de otro fallo más de este programita, que sí, te ahorra el problema de tener que tratar con impresoras y toda la vaina, pero eso que te ahorras te lo hace pagar con sangre.

13
VB .NET / Re: Crystal Report: Establecer Base De Datos Access
« en: Miércoles 25 de Mayo de 2005, 10:46 »
Hm... Si fuese en ASP.Net, todavía, pero en este proyecto no cuento con ningun webconfig y no me apetece crearme un fichero .ini (entre otras razones porque aun no sé como trabajar con ellos en .Net)
Además, me haría un lio para detectar el path de la instalación en el nuevo equipo y guardarlo en el fichero .ini. Tal vez más andelante, cuando esté más curtido, me atreva a lanzarme a ese desafio (Es que llevo demasiado tiempo con este proyecto y ya me corre prisa por terminarlo)
Si el programa fuera para mi no tendría problema alguno; pero es para otra persona a la que ni conozco, y que segun me han dicho, es una persona mayor que no se maneja bien con los ordenadores. Mi intención es hacer el programa autoinstalable, que ejecute el install y quede perfectamente configurado. Si una cosa tengo segura es que a casa de ese señor no voy a ir, asi que no puedo permitirme arreglarlo con parches.

En si, la solución que encontré no va mal, tampoco me voy a volver loco la cabeza; lo unico es que soy ahorrativo por naturaleza (Es decir,  más tacaño que una urraca y más agarrado como un koala) y no me hace gracia malgastar recursos (por muy ínfimos que sean).
Si se pudiese hacer con un solo dataset creado en ejecución no tendría esta molesta sensación de despilfarro.  :unsure:

14
VB .NET / Crystal Report: Campos Que Acepten Valores Nulos
« en: Martes 24 de Mayo de 2005, 10:46 »
No sé si seré el único al que le pasa esto. Resulta que tengo un informe de tipo factura con datos de una empresa y del cliente de la empresa. Entre los datos de la empresa hay un campo Logotipo, que vendría a mostrar el logotipo de la empresa.
El problema es que no es obligatorio que una empresa tenga logotipo, asi que se puede dar el caso de que ese campo esté vacío.
Lo malo es que cuando intento hacer una factura de una empresa sin logotipo, al crystal se le cruzan los cables y no me muestra ningun campo (excepto el numero de factura como por hacerme un favor)
Si lo que faltan son datos del cliente, como su calle o su código postal, desaparecen los campos donde estén contenidos.

Vaya una gracia.

¿Como puedo decirle que no se vuelva loco cuando reciba valores nulos?

En el manual de Crystal Report de 700 páginas fotocopiadas que tengo no se contempla esa posibilidad, y no logro que las MSDN suelten prenda.

¿Alguien sabe por lo menos por qué se produce este error tan raro?

15
VB .NET / Re: Crystal Report: Establecer Base De Datos Access
« en: Martes 24 de Mayo de 2005, 10:18 »
Este post estaba repetido (se me fue el dedo al enviarlo  :losiento: ). Disculpen las molestias, pero no hay forma de borrarlo.

16
VB .NET / Re: Crystal Report: Establecer Base De Datos Access
« en: Martes 24 de Mayo de 2005, 10:13 »
De momento he encontrado una solución temporal en dos pasos. Necesito usar dos DataSets, uno creado en código y el otro en diseño.

Necesito el objeto dataset porque el crystal Report no puede acceder al dataset creado en código (que es con el que trabajo en toda la aplicación) y entonces no puedo acceder a la estructura de las tablas y mucho menos a sus campos para crear el diseño.
Bien, el truco está en crear el dataset con la misma estructura de datos con la que trabajas, sin molestarte en rellenarlo tabla a tabla, asignarselo al informe.
Con esto podrás sacar todos los campos sin muchas dificultades y diseñar la estructura del formulario.

A la hora de llamar al informe, solo hay que asignarle el dataset creado en código (que es el que está relleno con todos los datos) al informe.

Supongamos que tenemos el dataset DS con todos los datos, un informe llamado Reporte.rpt y que le hemos establecido como origen de datos el otro dataset.

El código a grandes rasgos sería este:
Código: Text
  1.  
  2. Dim Informe As ReportDocument
  3.  
  4. Informe = New Reporte
  5. Informe.SetDataSource(DS)
  6. Me.CrystalReportViewer1.ReportSource = Informe
  7.  
  8.  

Ahí está, no hace falta especificar absolutamente ninguna dirección de ninguno de los ficheros del programa, asi que evitamos que nos reviente cuando lo instalemos en el equipo de nuestro cuñao.
Aun así no me termina de convencer este arreglo. Seguro que hay una forma de usar el dataset creado por código y con eso ahorrarse el segundo.

Bueno, de momento dejemoslo así. Ahora solo falta solucionar el extraño fallo que me da si alguno de los campos del formulario recibe un valor nulo.

17
VB .NET / Crystal Report: Establecer Base De Datos Access
« en: Lunes 23 de Mayo de 2005, 11:33 »
El ASP.Net me cae mal porque me ha hecho sus buenas perradas, pero el Crystal Report se lleva la palma. ¡Lo detesto!

Veamos, tengo un programa que tira de una base de datos en Access. Tengo todos los informes hechos, el programa terminado y al ejecutarlo no da ningún problema... en mi ordenador.

Basta que haga un instalador y lo lleve a otro equipo para que los informes dejen de funcionar.
El problema está en que los informes buscan la base de datos en la direccion en la que estaba guardada en mi ordenador.
¿Como puedo hacer para especificarle a mano la direccion donde tiene que encontrar la base?
Tengo una función estupenda que me da esa direccion que he llamado AppPath, pero no tengo ni idea de como cambiar la cadena de conexion de los informes por AppPath & "database.mdb" en la ventana de diseño.

Echadme una mano antes de que le la eche yo al cuello al que inventó el Crystal Report, por favor.  :(

18
VB .NET / Re: Combobox Bloqueado Para Solo Seleccion
« en: Lunes 23 de Mayo de 2005, 11:17 »
Hm... Se está convirtiendo en una costumbre responderme a mi mismo. Bueno, mientras me dé la respuesta al problema por mi encantado; aunque ya me podía haber respondido antes.

El control que establece que no puedas escribir en tu combo no es Locked, que por lo visto ahora controla que no se pueda modificar el tamaño del combo (es lo que tiene sacar un lenguaje a partir de otro. Es "parecido", pero no es lo mismo)
La respuesta está en la propiedad DropDownStyle, que tiene tres valores posibles.
-Simple: No aparece el botón de desplegar el combo, asi que te queda una especie de texbox en la que puedes escribir, pero con las flechas de direccion puedes cambiar entre los valores que tenga.
-DropDown: La opción por defecto. Esto ya parece un combobox con su botón de despliegue y todo, aunque permite que escribas dentro.
-DropDownList: Este es el que vale. Aparece el botón de despliegue, aunque solo para que sepas que es un combobox, ya que pulses donde pulses, se te va a desplegar el combo y, aleluya, no te permite la escritura.

Son estas pequeñas tontunas las que te tienen candote de cabezazos contra el TFT y las tienes delante de tus narices todo el tiempo.

Como suelo decir, el que no sabe es como el que no ve.

19
VB .NET / Combobox Bloqueado Para Solo Seleccion
« en: Viernes 20 de Mayo de 2005, 11:44 »
Os parecerá una tontería, pero no logro que un combobox esté configurado solo para seleccionar y no permita que el usuario escriba lo que se le pase por la cabeza.
He tratado de usar la propiedad locked, pero se la pasa por el forro.
Ni siquiera se queda bloqueado para seleccionar, como si no le hubiese hecho nada.

¿Como podría meter en vereda al rebelde de mi combo?
Es muy facil decir que los combos se pervierten y se dan a la mala vida por culpa de sus programadores, que no han sabido cómo establecer sus propiedades; pero es que por más que lo intento configurar, no me hace caso.  :(

Me trae por la calle de la amargura este combo mio...

20
VB .NET / Re: Instalador
« en: Viernes 20 de Mayo de 2005, 10:29 »
Hm... ¿Con qué estás programando en .Net?
Yo uso el Visual Studio 2003 y ahí si que viene integrado el crystal report (solo necesitas añadirlo como un elemento más al proyecto)
Aparte, ya corregía el fallo que tenía, pero me parece que no va a ser el mismo que tienes tu.
El error que tenía era pensar que a la hora de abrir un reporte, debía usar la función Load que necesita como parametros la direccion física del fichero .rpt y su nombre.
Al estar integrado el Crystal en el Visual Studio, si tienes un reporte con el nombre CRFactura.rpt, para abrirlo solo hay que usar un dim de esta manera.
Código: Text
  1.  
  2. Dim Nueva_factura as new CRFactura
  3.  
  4.  
Así no tienes que especificarle una dirección que podría cambiar cuando lo instales en otro equipo.

Si el problema que tienes es que directamente no puedes incluir el Crystal Report en tu proyecto ya me superaste.  :(

Si ves que es demasiado complicado meter el Crystal en tu proyecto, podrías intentar pasarte al Visual Studio.

21
VB .NET / Re: Instalador
« en: Miércoles 18 de Mayo de 2005, 14:31 »
Hm... Yo tengo un problema parecido. En mi caso se debe a que al cargar el informe con la función Load, no lo encuentra debido a problemas con la forma en que tengo para buscar el Path de la aplicación.

Aun no sé como solucionarlo. Tenía el mismo problema con la base de datos access que uso y lo arreglé metiendola en el direcctorio /bin de la aplicacion donde se genera el .exe de la aplicacion (y que es la direccion que me devuelve la función que busca el lugar de ejecución de la aplicacion.
A la hora de instalar el programa, el directorio /bin se convierte en tu carpeta principal, asi que si tu función busca algun componente que esté fuera de ella, va a pegar la reventada del lustro.
Pero... ¿Es necesario meter los ficheros .rpt dentro de Bin?
Si van incluidos dentro del proyecto, debe haber alguna forma de invocarlos sin tener que usar una direccion que a la hora de instalar el programa va a desaparecer.

Mira a ver si ese es el mismo problema que tienes tu. Si logro dar con la solución la pondré aquí.

22
VB .NET / Problemas Con El Texto Multilineal
« en: Martes 17 de Mayo de 2005, 14:52 »
Tengo un pequeño problema con el Crystal Report. Consulté el manual de instrucciones y aparecía una referencia justo al problema que tenía; pero en vez de dar una solución expusieron, con toda la educacion y asepsia del lenguaje técnico de un manual, que me las podía comer dobladas.

Veamos, debería ser lo mas sencillo del planeta crear un pequeño trozo de una carta o factura que ponga el nombre de una empresa, su direccion, teléfono y CIF tal que así:
GRUMASA S.L.
C/El Cangrejo, nº15, 4º-Izq
Tfn: 9001000010
CIF: 1124341131-P

Por poner un ejemplo, y hacer que cada linea esté centrada.
El problema es que no siempre el nombre es tal corto. Si la empresa se llama GRUMASA Tecnología y Comunicacion entonces es bastante facil que el texto del nombre se te salga del recuadro donde lo has puesto.
Las propiedades del objeto de texto te permiten decirle que si hay desbordamiento, se escriba en multiples líneas, y aquí está el problema.
Al escribirse en varias lineas, el campo del nombre no desplaza hacia abajo a los demás campos, sino que escribe encima directamente, lo cual es una guarrería antiestética que diría poco en favor de la profesionalidad de una empresa que envíe documentos con semejante chapuza.

En el manual dice que para evitar esto, ponga la linea propensa a desbordarse en la parte inferior... ¿Qué clase de solución es esa? ¿Como voy a poner el nombre de la empresa debajo? ¿Tan barata compran la coca los diseñadores de manuales?
(Lo siento, me he pasado un poco con los pobres diseñadores de manuales... Pero no lo retiro)

Por mucho que busco, no veo ningún documento que sufra este fallo, asi que una de dos:
-Tiene solución
-Esa gente pasó de usar Crystal Report

Como yo no puedo prescindir del Crystal Report y no puedo conseguir otra versión que no sea la que viene con el Visual Estudio, tendré fé en que este problema tiene solución.
Ahora bien... ¿Alguien sabe cual podría ser?

Pienso que si pudiese meter todos los datos en un campo fórmula tal vez podría decirle que escriba cada uno debajo del otro y así no se sobre escribiría nada; pero a parte de que no sé como se hace, el nombre de la empresa va con un tamaño mayor que el resto de campos y además va en negrita.
Meter diferentes formatos de texto en la misma fórmula me parece ya un poco más complicado.

PD: Por ahí vi un sitio donde decía que el Crystal es la mejor herramienta para hacer informes del mercado... Qué mal está el mercado entonces...

23
ASP .NET / Ajustar Imagenes A Un Recuadro
« en: Martes 17 de Mayo de 2005, 10:23 »
Bien, imaginaos que teneis un recuadro donde vais a mostrar una serie de imagenes pero que no tienen todas las mismas dimensiones, pudiendo haber algunas con formanto de banner (barra horizontal) y otras en formato de poster (barra vertical).

La intención es mostrar todas las imagenes dentro de un cuadro de 640x480 sin que ninguna se salga de esos márgenes.

La forma más sencilla de fijar el tamaño del recuadro es con un Div (yo hace una semana no sabía ni que existía, asi que en un arranque de empatía lo voy a poner)
Código: Text
  1.  
  2. <DIV id="Recuadro" style="WIDTH: 640px; HEIGHT: 480px" align="center">
  3. <asp:image id="Imagen" runat="server"></asp:image>
  4. </DIV>
  5.  
  6.  
Dentro del Div colocamos la imagen. Como contamos con un buen número de imagenes la imageUrl de la misma es mejor no dejarla establecida, sino cambiarla mediante código (a no ser que querais poner una imagen de portada).
Con el Align del Div conseguimos que la imagen se quede centrada horizontalmente en el recuadro, pero ojo (y esta es la duda que me atormenta) no te centra la imagen verticalmente; por lo que si la imagen no ocupa los 480 pixeles, aparecerá antiestéticamente pegada a la parte superior, dejando un espacio vacío debajo suyo.
Pero eso habrá que solucionarlo después.

Primero hay que detectar si la imagen es vertical, horizontal o si es más pequeña que el recuadro.
En realidad, como el Div ya me soluciona la papeleta centrándome las imagenes verticales, lo unico que hace falta comprobar, de momento, es si la imagen se sale del recuadro establecido y si el ancho es mayor que el alto (lo cual significaría que estamos ante una imagen horizontal).
Para controlar el tamaño de la imagen vamos a usar las propiedades Height y Width, pero solo una a la vez. Si especificamos solo una de ellas, la imagen redimensionará la otra para mantener el aspecto original, lo cual nos viene que ni pintado.

Con esta funcion compruebo las dimensiones de una imagen y devuelvo qué parametro hay que dejar establecido.
Código: Text
  1.  
  2.     ' Obtiene el tamaño de la imagen y ajusta la vertical o la horizontal de la imagen
  3.     ' y devuelve una cadena diciendo si es demasiado alta o demasiado ancha.
  4.     ' La funcion toma el nombre de la imagen de la variable global Direccion
  5.     Function AjustaImagen() As String
  6.  
  7.         Dim Dimension As String
  8.  
  9.         '-- El Alto de la imagen
  10.         Dim iH As Integer = 0
  11.  
  12.         '-- El ancho de la imagen
  13.         Dim iW As Integer = 0
  14.  
  15.         Dim ti As System.Drawing.Image = System.Drawing.Image.FromFile(Server.MapPath(Direccion))
  16.  
  17.         '-- Obtiene la altura y el ancho y le añade un margen
  18.         iH = ti.Height
  19.         iW = ti.Width
  20.  
  21.         If iW > iH  Then 'Ajusta ancho
  22.             Dimension = "WIDTH"
  23.        'Ya que estamos aquí, sacamos el tamaño del margen en una variable exterior
  24.             AnchoMargen = (480 - iH) / 2
  25.         Else 'Ajusta alto
  26.             Dimension = "HEIGHT"
  27.         End If
  28.         Return Dimension
  29.     End Function
  30.  
  31.  

Ahora, cuando querramos cargar la imagen solo tenemo sque pasarle su direcion a este programuko.
Código: Text
  1.  
  2. Private Sub CargaImagen(ByVal ImageDir As String)
  3.  
  4.         Imagen.ImageUrl = ImageDir
  5.         Select Case AjustaImagen()
  6.             Case "WIDTH"
  7.                 imagen.Attributes.Add("width", "640px")
  8.                 imagen.Attributes.Remove("height")
  9.             Case "HEIGHT"
  10.                 imagen.Attributes.Add("height", "480px")
  11.                 imagen.Attributes.Remove("Width")
  12.         End Select
  13.     End Sub
  14.  
  15.  

Esto nos la dejará bien ajustada al tamaño del recuadro, ya sea más grande o mas pequeña que él. Ahora solo falta ajustarla verticalmente.

Pues olvidaos del Div. En vez de eso vamos a cambiarlo por una tabla. La etiqueta <TD> tiene un atributo llamado Valign que controla la alineacion vertical.
Código: Text
  1.  
  2. &#60;TABLE height=&#34;480&#34; width=&#34;640&#34;&#62;
  3. &#60;TR&#62;
  4. &#60;TD vAlign=&#34;middle&#34; align=&#34;center&#34;&#62;
  5. &#60;asp:image id=&#34;Imagen&#34; runat=&#34;server&#34;&#62;&#60;/asp:image&#62;&#60;/TD&#62;
  6. &#60;/TR&#62;
  7. &#60;/TABLE&#62;
  8.  
  9.  

Anda que no me ha costado esto. Que quede aquí grabado en pixeles de fuego para que nadie más vuelva a darse de cabezazos por culpa de una imagen mal alineada.
Hasta la proxima comedera de coco.  :D

24
ASP .NET / Re: Popup Ajustado A Su Contenido
« en: Lunes 16 de Mayo de 2005, 13:14 »
¡Ya está solucionado, probado y va de maravilla!

Un tal Maniac había dado con una solución limpia y profesional al problema.

Primero, en la página Html hay que poner un literal de esta manera (aun no sé lo que es un literal, pero funciona)
Código: Text
  1.  
  2. &#60;div&#62;
  3. &#60;asp:literal id=&#34;PanelLiteral&#34; Runat=&#34;server&#34;&#62;&#60;/asp:literal&#62;
  4. &#60;/div&#62;
  5.  
  6.  

Después crear este pedazo de funcion en la parte Asp
Código: Text
  1.  
  2.     '-- Esto obtiene las dimensiones de la imagen y ajusta la ventana a ellas
  3.     Function getImagePop(ByVal Imagen As String) As String
  4.  
  5.         '-- La clase StringBuilder es para concatenar con más comodidad
  6.         '-- Recuerda añadir Imports System.Text si te dice que no está declarada
  7.         Dim iStr As New StringBuilder
  8.  
  9.         '-- El Alto de la imagen
  10.         Dim iH As Integer = 0
  11.  
  12.         '-- El ancho de la imagen
  13.         Dim iW As Integer = 0
  14.  
  15.         '-- La direccion de las imagenes que no estén en tu proyecto
  16.         'Dim imagePath As String = &#34;&#34;
  17.  
  18.         '-- Comprobrar si la imagen existe (opcional) y si falla mostrar una imagen de error
  19.         'If File.Exists(Server.MapPath(imagePath & imageName)) = False Then imageName = &#34;Error.jpg&#34;
  20.  
  21.         Dim ti As System.Drawing.Image = System.Drawing.Image.FromFile(Server.MapPath(Imagen))
  22.  
  23.         '-- Obtiene la altura y el ancho y le añade un margen
  24.         iH = ti.Height + 60
  25.         iW = ti.Width + 40
  26.  
  27.         '-- Crea la etiqueta de la imagen y el código de resize en javascript
  28.         '-- Nota: Añade + imagePath en la linea 2 antes de Imagen si tus imagenes están en
  29.         '-- otra direccion
  30.         iStr.Append(&#34;&#60;div align=&#34;&#34;center&#34;&#34;&#62;&#34;)
  31.         iStr.Append(&#34;&#60;img src=&#34; + Chr(34) + Imagen + Chr(34))
  32.         iStr.Append(&#34; border=&#34;&#34;0&#34;&#34;&#62;&#60;/div&#62;&#34;)
  33.         iStr.Append(&#34;&#60;script language=javascript&#62;&#34; + vbCrLf)
  34.         iStr.Append(&#34;&#60;!--&#34; + vbCrLf)
  35.         iStr.Append(&#34;window.resizeTo(&#34; + iW.ToString + &#34;,&#34; + iH.ToString + &#34;);&#34; + vbCrLf)
  36.         iStr.Append(&#34;--&#62;&#34; + vbCrLf)
  37.         iStr.Append(Chr(60) + &#34;/script&#34; + Chr(62) + vbCrLf)
  38.         'Else
  39.         'iStr.Append(&#34;No se pudo encontrar la imagen.&#34;)
  40.         'End If
  41.  
  42.         '-- Convierte el StringBuilder a String y devuelve el valor.
  43.         Return iStr.ToString
  44.  
  45.     End Function
  46.  
  47.  

Por ultimo solo hay que poner esto en el load de la página
Código: Text
  1.  
  2. PanelLiteral.Text = getImagePop(Direccion)
  3.  
  4.  
Donde Direccion es la direccion de la imagen a mostrar partiendo del directorio virtual. Es decir, si la direcion completa de tu imagen es http://Localhost/Algarroba/imagenes/Portada.jpg entonces solo tienes que poner imagenes/portada.jpg

Yo usé una variable global para guardar esta direccion, porque no me manejo con los request y la madre que los trajo; pero en el ejemplo lo hacía con request strings y le iba de maravilla (a él, claro está  &lt;_&lt; )

Por si alguien puede darle uso, lo necesario para usar los request es esto:

En la página original poner:
Código: Text
  1.  
  2. &#60;a href=&#34;ImageWindow.aspx?myImage=MyImage1&#34; target=&#34;_blank&#34; onClick='window.open(&#34;ImageWindow.aspx?MyImage=MyImage1&#34;,&#34;_blank&#34;,&#34;menubar=0,status=0,scrollbars=0,resizable=0,toolbar=0&#34;);return false'&#62;&#60;img src=&#34;MyImage1Thumb.jpg&#34; border=&#34;1&#34;&#62;&#60;/a&#62;
  3.  
  4.  
Esto mostraría un boton con la imagen Myimage1Thumb.jpg que al ser pulsado enviaría el nombre de la imagen al formulario Imagewindow.aspx
Aquí da por sentado que sabes de antemano el nombre de la imagen, asi que se lo pasa sin ponerle la terminacion Jpg, que le añade en el load de ImageWindow de esta manera:
Código: Text
  1.  
  2. dim myimage as string
  3.  
  4.  myImage = Request.QueryString(&#34;myImage&#34;)
  5.  
  6.         If Request.QueryString Is String.Empty Then
  7.             '-- no hace nada
  8.         Else
  9.             PanelLiteral.Text = getImagePop(myImage & &#34;.jpg&#34;)
  10.         End If
  11.  
  12.  

Así si que da gusto abrir Popups. Gracias Maniac.

25
ASP .NET / Re: Popup Ajustado A Su Contenido
« en: Lunes 16 de Mayo de 2005, 10:51 »
Buff... No hay forma de sacarlo. :think:

Veamos... Si antes de abrir la nueva ventana, pudiera saber cuales son las dimensiones de la imagen, podría pasarselas en el window.open
¿Hay algun modo de hacerlo en javascript? Porque si es en otro tipo de script luego voy a pasar la pena negra tratando de pasárselo a la funcion Url.

Una cosa que he notado y no me gusta nada es que cuando uso el código Java "self.resize", cualquier página que abra después tendrá ese tamaño. Incluso si abro una página en blanco.
Este efecto secundario me parece espantoso, asi que preferiría no tener que usarlo.

Páginas: [1] 2