Visual Basic Foro
Programación => Bases de Datos => Mensaje iniciado por: Bazooka en Enero 06, 2015, 10:08:09 am
-
Hola amigos estoy haciendo una app que funciona tanto en Access como en Mysql (de forma localhost).
Y la cuestion es que tengo una consulta que en Access me funciona correctamente pero no así en el MySql..
esta es la consulta
STRSQL = "SELECT t_Usuarios.Admin From t_Usuarios Where (((t_Usuarios.UserName) = 'Admin') And ((t_Usuarios.Password) = '123'))GROUP BY t_Usuarios.Admin;"
Y esta es la funcion a la que llamo y me devuelve -1 rs.RecordCount
Public Function isRecordExist(STRSQL As String) As Boolean
Call AbrirBase
rs.Open STRSQL, DB, adOpenStatic, adLockOptimistic
If rs.RecordCount < 1 Then
isRecordExist = False
Else
isRecordExist = True
End If
rs.Close
Set rs = Nothing
End Function
ACLARO QUE EL REGISTRO EXISTE CON ESOS DATOS QUE SE ESTAN BUSCANDO
Que es lo que pasa ?
-
Antes de rs.open... agrega esta linea:
rs.CursorLocation = adUseClient
y prueba.
Para que no la repitas la puedes poner dentro de AbrirBase
Saludos
-
Antes de rs.open... agrega esta linea:
rs.CursorLocation = adUseClient
y prueba.
Para que no la repitas la puedes poner dentro de AbrirBase
Saludos
Ok lo pruebo y te digo!!
Imagino que eso quiere decir que se ejecute la consulra en el lado del cliente verdad?
-
Creo que es un pequeño problema de sintaxis, si copiaste literalmente la cadena de STRSQ el GROUP BY debe de ir separado del parentesis. Otra cosa que creo que es el problema es que en mysql con código nunca he puesto el nombre de la tabla.campo solamente campo osea
STRSQL = "SELECT Admin From t_Usuarios Where UserName = 'Admin' And Password = '123' GROUP BY Admin"
Tambien quite el exceso de parentesis y el ; del final que en mysql no es necesario. prueba y me dicen alguna de las dos respuestas te puede servir.
-
Un punto para Yvan y un punto para Luffy al final eran las 2 cosas por que luego de hacer varias pruebas le quite todos los nombre de las tablas.campo como sugirió luffy y no andaba y le coloque la linea de Yvan y BINGO!!!!
GRACIAS AMIGOS
-
solucione un problema y me aparecio otro miren chicos dentro del mismo programa ahora al querer chequear si un usuario existe obtengo este error
y esta es la senctencia con que llamo a la función
(http://snag.gy/t5tPs.jpg)
STRSQL = "SELECT t_Usuarios.* From t_Usuarios WHERE ((Username)='" & txtInput(1).Text & "');"
If isRecordExist(STRSQL) = False Then
....
Public Function isRecordExist(STRSQL As String) As Boolean
If DB = "" Then Call AbrirBase
rs.CursorLocation = adUseClient
rs.Open STRSQL, DB, adOpenStatic, adLockOptimistic
If rs.RecordCount < 1 Then
isRecordExist = False
Else
isRecordExist = True
End If
rs.Close
Set rs = Nothing
End Function
-
En principio no veo nada fuera de lugar.
¿Las variables DB y rs están creadas a nivel global?
¿Probaste llamando a la función "AbrirBase" sin verificar el valor de "DB"?
Jerónimo
-
SI he provado !! y a veces anda y a veces no.!!
Creo que el problema lo estoy teniendo en la apertura y cierre de las base de datos.
SI ESTOY TRABAJANDO CON ACCESS ME CONVIENE ABRIRLA SOLO AL INICIO Y NO VOLVER A CERRARLA HASTA SALIR DEL PROGRAMA ES ASI?
Ahora en MySql es igual si trabajo en MODO local ? No se cierra la conexion cada xx tiempo ? digo por si el soft queda un tiempo inactivo ..
-
Buena pregunta lo de saber que pasa con el MySQL local, no te sabria decir porque nunca tuve experiencia de usar MySQL de forma local, no se como se comporta o donde hay que configurar.
Con Access si estas en local abre una sola vez y no lo cierres hasta que cierres el programa y solo maneja los rs.
Y lo que sucede con el error es que estas cerrando el recordset siendo que aun en algún punto aun lo estas usando.
Mayormente me curaba de espanto no cerrando el recordset y sino antes de volverlo abrir lo cierro de esta forma:
if rs.state then rs.close
rs.open etc etc.
-
También creo que rs.CursorLocation = adUseClient no debería estar en esa función que lo que hace es dar verdadero o falso si existe o no registros, esa inicializacion debiera estar donde declaras la variable rs.
Luego tengo una duda, nada importante, pero... ¿que es mas rapido? preguntar si "algo es menor a" o "algo es igual a". Quiza da lo mismo pero finalmente para evitar error de ojo yo preferiria cambiar esto:
If rs.RecordCount < 1 Then
isRecordExist = False
Else
isRecordExist = True
End If
por esto:
If rs.RecordCount = 0 Then
isRecordExist = False
Else
isRecordExist = True
End If
Saludos
-
Yo lo uso en red local y cierro la conexión cuando se cierra el sistema y nunca tuve problemas.
Jerónimo
-
En efecto en MySQL tienes que abrir y cerrar la conexión cada vez que haces una transacción. En Access pues puedes mantenerlo abierto o de esta misma forma.
Yo en lo personal hago esto.
Creo una clase donde manejo todo lo que es data osea un sub dentro de la clase que se llame conectar y es de forma privada, otro sub público donde le tiro la cadena sql pero aqui abro la conexión, ejecuto el sql y cierro la conexión si hay algún error cierro la conexión y tiro un mensaje de error.
-
Si embarro el tema del hilo con este mensaje, les pido disculpas y que, por favor, lo ignoren.
Luffi: como dije antes, yo abro la conexión cuando se inicia el aplicativo, se hacen todas las transacciones necesarias durante todo el día y, al cerrar el aplicativo, cierro la conexión. Hasta ahora no he tenido ningún problema. ¿Cuáles puedo tener trabajando de esta manera?
Muchas gracias.
Jerónimo
-
Estoy de acuerdo que en un entorno local (red local) se abra la conexión una vez y no se cierre hasta que muera el aplicativo, en realidad así lo hago desde hace años en varios sitios y sin problemas, sin embargo en una conexión por internet si considero que hay que conectarse y desconectarse por cada transacción.
Recuerdo que cuando probé conectar mi aplicativo a un MySQL en hosting abrí la transacción una sola vez y al cabo de unos segundos ya estaba desconectado sin yo haberlo hecho y esto porque en la configuración del MySQL (no recuerdo en que parte hace mucho que no veo eso) estaba especificado el tiempo de conexión, asi que mi aplicativo que se conecta a una BD en hosting si la conecto y desconecto por cada transacción, iba lenta hasta que optimicé las consultas para web y ademas las paginé.
Nunca usé un MySQL en mi PC o red local, entiendo que el amigo Jeronimo lo está haciendo y abriendo la conexión una sola vez... mi pregunta a él es ¿manipulaste o configuraste el tiempo de conexión en alguna parte del MySQL o con algún code desde VB6?.
SAludos
-
Nunca configuré ni manipulé el tiempo de conexión. De hecho, me enteré de que eso se configuraba cuando aquí se planteó lo que comenta Yván acerca del cierre automático de la conexión en servidores web.
Hasta ahora nunca he tocado nada de eso. Y mis aplicativos abren la conexión cuando van a validar el usuario de ingreso y la cierran cuando se sale de ellos.
Pregunté a Luffy acerca de su punto de vista porque a lo mejor nunca me pasó nada de casualidad y estoy con algún riesgo latente de que algo salga mal.
Muchas gracias.
Jerónimo
-
Si lo has venido usando la verdad no creo que halla algún riesgo, creo entonces que en los servidores web ya han configurado para que de forma predeterminada se realice la desconexión pasado X segundos (que era lo que me pasaba) y quizá lo mismo pasa con el autocommit. Es lo único que se me ocurre por lo cual no se te interrumpe la conexión en un entorno LAN.
Ya te iba a preguntar si usas transacciones pero ya estaría desviando mucho el hilo asi que te escribo en mp.
Esperando la venia de Bazzoka
-
Muchas gracias a todos me han servido de mucho este hilo para aprender de sus experiencias.
Asi que me pondre a optimizar mi codigo para que solo habra en un solo lugar y ver si se me terminan esos errores que me viene dando.
Como les comente tengo una const Bolleana configurada a Nivel Global que si decido que trabaje con Mysql la activo y sino lo hace con Access.
Con Aceess me va todo perfecto pero vere si se solucionan estos tragos amargos con el mysql por que me interesa crear un hibrido en BD.
Saludos
-
Muchas gracias muchachos me sirvio mucho lo que aportaron en este hilo y de echo ahora solo abro una vez la base de datos y la cierro al final!!!
Hasta ahora vengo bien solo estoy teniendo este error al intentar eliminar registros :
(http://snag.gy/qSlCq.jpg)
y este es el codigo en cuestion ?
BORRAR_ACTUAL "DELETE * FROM t_Usuarios WHERE Userid ='" & ID_ACTUAL(Index) & "' ;" 'ID_ACTUAL(Index)= "USR-001"
Public Sub BORRAR_ACTUAL(sql As String)
On Error GoTo ErrorBorrar
Dim rsRef As New Recordset
rsRef.Open sql, DB, adOpenKeyset, adLockOptimistic, adCmdText
EXITO = True
Set rsRef = Nothing
ErrorBorrar:
If Err.Number <> 0 Then
MsgBox "Error: " & Err.Number & " - " & Err.Description
End If
End Sub
-
No creo que lo que comentaré sea la solución al error, pero te voy a hacer unas observaciones.
¿Estás usando ADO? Porque si es así, la declaración de la variable para el recordset la uso así:
Dim rsRef AS ADODB.Recordset
Set rsRef = New ADODB.Recordset
rsRef.CursorLocation = AdUseClient
Por otro lado, solo abro un recordset cuando voy a leer datos. Si voy a insertar, modificar (update) o eliminar, lo hago directamente sobre la conexión:
DB.Execute "Insert INTO ..."
DB.Execute "DELETE * FROM..."
DB.Execute "UPDATE ..."
Fijate si te queda mejor así.
Jerónimo
-
Yván: concuerdo con vos.
Ahora leo tu mp.
Jerónimo
-
lo tengo configurado asi!
en un modulo
Public DB As New ADODB.Connection
Public rsRef As Recordset
-
creo que el DELETE * es solo para Access, para MySQL es directemente DELETE FROM tabla
-
creo que el DELETE * es solo para Access, para MySQL es directemente DELETE FROM tabla
GENIAL WALDO !!!
ASI ES EL * (P--- ASTERISCO) habia que quitar !!
GRaciasssssssss!!
-
Bueno mi opinión ya que la has pedido es esta.
Tenemos que tener cuidado cuando vallamos a escoger el tipo de bases de datos que deseamos utilizar por que pasan cosas como estas. MySQL es un motor bastante robusto para bases de datos pero no es Oracle, aunque son de la misma casa comercial Oracle es superior sin lugar a dudas.
1.- Cliente/Servidor
Tenemos en cuenta que MySQL es una base de datos primeramente Cliente/Servidor. Lo que significa que siempre vamos a tener un cliente y un servidor aunque esto signifique que estén en la misma computadora o terminal (En Caso de los dispositivos móviles). Para lo que vamos a tener una cuenta de ROOT y una cliente, muchísimos programadores piensan que es bueno tener la misma cuenta en su cadena de conexión a la base de datos. Es sorprendente, mas del 90% de los desabolladores de perfil bajo y medio tienen la misma cuenta en el servidor y en la cadena de conexión. Esto es un agravioso error. Ya que como lo han de saber si abren su ejecutable con el bloc de notas pueden tener acceso a la cadena de conexión del sistema y muchas formas mas de obtenerlo, osea alguien que sepa principios de ingeniería inversa básica lo hace. Por lo tanto un software se protege en función a lo que es más importante para el, por lo tanto cuando se trata de GESTIÓN DE DATOS (Bases de Datos con Software) se protege más la base de datos que el software.
Como haces esto, bueno te resultará curioso saber que MySQL puede hacer esto por ti si lo sabes configurar, osea las cuentas de usuarios no están de por gusto, MySQL guarda en su LOG si así lo configuras todos los accesos de los usuarios desde donde y cuando. Por lo que significa que deberías tomarte la molestia de crear Usuarios y Privilegios apropiados para tu cliente. Esto sin contar que significa en una pastita más para el desarrollador de vez en cuando el cliente quiera una nueva cuenta. Los mejores sistemas del mundo venden su sistema y cuentas de usuario, por que trabajan en la seguridad de sus aplicaciones.
Un ejemplo digamos que tengo un software local en una empresa que esta tiene 25 trabajadores en 5 departamentos de los cuales en cada departamento hay un administrador o encargado, por lo tanto cuantas ¿cuantas de usuario configuro?. R// Es sencillo, configuras 11 cuentas de usuario, 1 General, 5 para cada uno de los jefes de departamento, 1 cuenta por departamento de usuario final con privilegios limitados osea 5 usuarios finales. En jerarquía con sus privilegios, sin contar con el usuario ROOT por supuesto.
¿Para qué me va a servir esto?. R// Como ya lo explique MySQL si lo configuras guarda que hizo cada usuario en que dirección ip, ejemplo, UsuarioFinalContabilidad en IP 192.168.1.5 utilizo la sentencia "DELETE * FROM" para todos los registros de la compañía. Esto te quita mucho trabajo, realmente por que las empresas quieren saber que hizo que cosa. También tienes que tener en cuenta que la configuración de los privilegios contiene el acceso a tablas, que los usuarios solo utilicen las tablas que realmente tienen que utilizar y nada más. Imagina que alguien utilizo ingeniería inversa para saber tu ConnectionString pero solo tiene acceso a modificar las tablas en las que el trabaja y no puede ver los contenidos de las demás tablas, el motor se va a dar cuenta de la conexión mal influenciada y te va a informar.
2.- MySQL Como Base de Datos Transaccional o No
La verdad es que este es un tema muy pero muy delicado, ya que aquí se centra tu pregunta, lo de la transacción de bases de datos o la forma en la que en General se dice que es correcto tratar con los datos de:
En un Sub
- Abrir la Base de Datos
- Ejecutar la Consulta SQL
- Cerrar la Base de Datos
Es el resultado de las http://es.wikipedia.org/wiki/ACID (http://es.wikipedia.org/wiki/ACID) que en un razonamiento de sentido común te dice que tenes la necesidad de Abrir la conexión, ejecutar tu código, cerrar la conexión, para GARANTIZAR los cambios hechos en la base de datos por motivos transaccionales, al cumplir con esto estas realizando un sistema un SGBD http://es.wikipedia.org/wiki/Transacci%C3%B3n_%28base_de_datos%29 (http://es.wikipedia.org/wiki/Transacci%C3%B3n_%28base_de_datos%29) esto significa que lo que haces es utlizar las propiedades de BEGIN, COMMIT y ROLLBACK. Esto debe de ser configurado con el tipo de base de datos InnoDB, osea no es necesario que manejes estas propiedades de código fuente en tu sistema por que MySQL en InnoDB ya lo hace automáticamente con cada transacción.
Si no quieres utilizar esta parte automática de MySQL en InnoDB debes de desactivarla pero eso es absurdo, ya que MySQL tiene su propia base de datos más rápida para no tener estas propiedades osea MyISAM pero tambien tienes que desactivar las transacciones.
Si mantienes tu "HILO" de bases de datos abierto desde que inicia hasta que finaliza corres el riesgo de esto no se cumpla y que pueda suceder un desbordamiento, un problema de actualización, perdidas indeseadas, etc. MySQL habla mucho al respecto de esto, de tal manera que ha hecho por defecto InnoDB desde MySQL Server 5.0
Recuerda es comprometerte a que la acción o transacción este bien hecha, una por una, no todas al mismo tiempo que te obliga literalmente a manejar las transacciones por código fuente, que es más peligroso. Tambien ten en cuenta que no son los únicos tipos de bases de datos que maneja MySQL, tiene varios más y se van acoplando a tus necesidades como desarrollador y a las necesidades de tus clientes. Esto hace a MySQL posiblemente la mejor herramienta para bases de datos de hosting, es verdaderamente configurable, lee y aprende que tipo de bases de datos necesitas.
Vi a Ivan Acosta mencionar algo de quitar el autocommit, creo que debería de ver también los tipos de bases de datos que tiene MySQL (Comentario Personal) Yo he trabajado con varios Motores de Bases de Datos y MySQL me ha parecido mas manejable.
3.- Sintaxys
Debes de tener en cuenta que la sintaxys de una base de datos Mono/Multi Usuario como access que quiere asemejarse más al motor de SQL Server utilizando así su composición en sus cadenas, no es lo mismo que utilizar SQL, lo cual puedes utilizarlo en un Motor de Bases de Datos Cliente Servidor Transaccional. Te sugiero que en vez de Access utilices SQLite. Te dejo una página donde puedes aprender y practicar Lenguaje SQL. http://www.w3schools.com/ (http://www.w3schools.com/) (Pido Disculpas a los Moderadores por el SPAM)
Te vas al apartado Server Side y la opción Learn SQL.
4.- Desarrollo del Aplicativo y Desarrollo de la Base de Datos.
Hay también un gran problema con este tema por que al desarrollador que se ocupa de hacer Sistemas de Gestión de Bases de Datos (SGBD) debe de saber básicamente 2 lenguajes de programación.
- El Lenguaje del Código Fuente (Vb6, Vb.NET, C, C++, etc.)
- El Lenguaje de Bases de Datos
Lo digo de verdad aquí hay verdaderos genios para utilizar el código fuente a un muy buen porcentaje. Pero en muchos casos (No estoy diciendo nombres y ni tan siquiera que pertenezcan a esta web) no le sacan el potencial a su motor de bases de datos, no a la base de datos si no al motor. Por ejemplo un programador que está guardando una factura de venta debe de guardar solamente los datos de la factura con el monto y el detalle de dicha factura. Los Descargos del inventario, las creación de cuentas contables, etc. deben de hacerse de forma automatica.
Esto nos lleva a las siguientes herramientas de MySQL:
- Store Procedures
- Triggers
- Event Scheduler
- Views
Con el buen uso de estas herramientas podemos minimizar el código fuente en nuestro aplicativo, aumentar el código en nuestra base de datos, pero ahorrar tiempo y dejar de gastar recurso innecesario.
Resumen
En mi humilde opinión con mi estudio y experiencia.
Si no has tenido problemas con tus bases de datos es por que son tan pequeñas que no has llegado hay, espera a que crezcas de verdad.
Debes de Manejar MySQL como debe de ser para sacar su máximo potencial, no lo estas haciendo.
Debes de aprender a configurar bien tu motor de base de datos.
Deberías de pensar en cambiar de Access a SQLite si quieres tener un respaldo de la base de datos en otro motor, por que si lo que quieres es tener un respaldo hay otras formas.
Si vas a seguir manejando Access debes de separar la sintaxis de Access y SQL de MySQL.
Espero no haber molestado a nadie ni mucho menos insultado, si es así me disculpo, si hay algún error con respecto a algo que mencione aquí, puede corregidme abiertamente sin mp y se debate y discute, si estoy equivocado estaré mas que encantado en aprender y corregir mis conocimientos.
-
Muy buena y acertada explicación. Como aporte y dependiendo de que tanto escalara el proyecto se debe decidir entre que y que motor. Aqui (http://database-management.findthebest-sw.com/compare/13-30/Firebird-vs-MySQL) una pequeña comparativa que quizá ayude en esa elección.
Quizá solo agregue como alternativa a Access el uso de Firebird Embebed (No superserver ni classic) para ser usado como monousuario y que no requiere siquiera instalación pero que ofrece toda la potencia de este motor C/S así se use como monousuario, gozando del uso de triggers, sp, ,views, udf, dominios, etc, cabiendo la posibilidad de que el proyecto escale y no habría que hacer migración alguna para trabajarlo incluso en grandes redes.
Tampoco soy fanático y por ello diré que lo malo de Firebird es que no hay hostings webs que sean realmente interesantes que usen Firebird ¿porque? porque llegaron tarde (punto para MySQL), al menos yo no he encontrado ninguno sino ya sabrían cual hubiera sido mi elección :-).
El esquema de manejo de usuario en la BD quizá también depende de la dimensión del proyecto, para proyectos pequeños de pronto basta controlarlo en el aplicativo, todo depende, es cuestión de ver de que proyecto hablamos, hay proyectos pequeños y rentables que por su costo ni vale la pena siquiera hacerle ingeniería inversa y que finalmente un poco de ofuscación ayuda. En proyectos medianos y grandes si vendría a ser necesarios, es mas, esto a veces es parte de la negociación de licencias porque se hacen por usuario, por ejemplo el ERP AX y NAV las licencias se negocian por usuarios recurrentes, mas usuarios mas costo, pero bueno ya es otro rollo.
Vi a Ivan Acosta mencionar algo de quitar el autocommit, creo que debería de ver también los tipos de bases de datos que tiene MySQL (Comentario Personal) Yo he trabajado con varios Motores de Bases de Datos y MySQL me ha parecido mas manejable.
No trabajo con MySQL, es mas, no tengo ningún proyecto con el y ahora solo lo estoy usando para validar licencias por internet de un soft que hice y estoy tocando MySQL porque no me queda de otra ya que mi hosting solo usa MySQL (como la mayoría de hostings), por ello recién me enteré de los sabores de engines (MyISAM y InnoDB) y las pre-configuración que le hicieron al motor en el hosting, termino ese desarrollito y no creo que use MySQL sobretodo porque estoy en otros temas cerrados y también temas ajenos al mundo informático pero definitivamente MySQL es un motor sobresaliente ni que decir.
Por lo demás celebro y agradezco todo el aporte que has dado en este hilo amigo Luffy.
+1
-
No trabajo con MySQL, es mas, no tengo ningún proyecto con el y ahora solo lo estoy usando para validar licencias por internet de un soft que hice y estoy tocando MySQL porque no me queda de otra ya que mi hosting solo usa MySQL (como la mayoría de hostings), por ello recién me enteré de los sabores de engines (MyISAM y InnoDB) y las pre-configuración que le hicieron al motor en el hosting, termino ese desarrollito y no creo que use MySQL sobretodo porque estoy en otros temas cerrados y también temas ajenos al mundo informático pero definitivamente MySQL es un motor sobresaliente ni que decir.
Muy buenas YAcosta, pues me centre en MySQL por que de este motor se trataba la pregunta específicamente, yo también utilizo firebird y tiene muchas ventajas, así como tambien las tiene MySQL. Con respecto a los Hosting que no tienen firebird, existe la forma de instalar en el cpanel y en tu hosting el Firebird y existen hosting solamente del motor de Firebird uno y muy bueno: https://www.inspirohost.com (https://www.inspirohost.com). Aunque mi opción preferida siempre ha sido tener una ip pública y hacer mi hosting propio y solo comprar el dominio.
Otro comentario personal. Muchas Gracias por responder.
-
GUAU!!!
Es mucho para mi esto!!
Agradezco enormemente una explicación de tal magnitud y me he tomado el trabajo de leerla atentamente y sacarle el mayor provecho posible.
Cuando digo que es mucho para mi es porque sólo un programador (yo sólo me di el titulo) independiente y autodidacta ya que jamas fui a ningun sitio (instituto, universidad , etc) asi que todo lo que he aprendido fue a los ponchasos literalmente y de puro constante que soy.
Si bien hoy vivo de esta profesión solo un par de mis aplicaciones utilizan base de datos y muy pequeñas ya que no son empresariales.
Y para terminar este hilo lo he creado por que se me ocurrio nada probar el MySql como alternatiba para esta aplicacion en la que trabajo pueda trabajar a futuro con una BD en la nube.
Gracias por tomarse el tiempo de tratar de dejar lo mejor de cada uno en este excelente Foro que siempre me ha ayudado.
MAE
-
Muy buenas YAcosta, pues me centre en MySQL por que de este motor se trataba la pregunta específicamente, yo también utilizo firebird y tiene muchas ventajas, así como tambien las tiene MySQL. Con respecto a los Hosting que no tienen firebird, existe la forma de instalar en el cpanel y en tu hosting el Firebird y existen hosting solamente del motor de Firebird uno y muy bueno: https://www.inspirohost.com (https://www.inspirohost.com). Aunque mi opción preferida siempre ha sido tener una ip pública y hacer mi hosting propio y solo comprar el dominio.
Otro comentario personal. Muchas Gracias por responder.
A caramba doc, buen dato, no sabia que se podía configurar el Cpanel para instalar Firebird, eso esta muy interesante para un nuevo hilo, voy a ir investigando sobre ello. Y voy a checar el enlace que me alcanzas.
En mi caso bueno no tengo un esquema de negocio que me exija implementar en casa un hosting (ademas de asumir algunas responsabilidades), sin embargo me seduce mucho eso, tengo dominios sueltos, tengo DynDNS con lo cual se podria obviar el ip fijo y publico.... es muy interesante.
Muchas gracias por los datos Doc.