|
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 - jimmy007
Páginas: [1]
1
« en: Martes 27 de Septiembre de 2005, 04:16 »
Según lo que yo tengo entendido, en el servidor tienes un puerto de escucha, que quiere decir esto, por ese puerto el servidor recibe todos los pedidos de conexion, siempre es uno. Hasta aki estabas bien pero ... Una vez que recibe un pedido de conexion, si lo acepta abre otro puerto que es por el cual se va a comunicar con el cliente que le hizo el pedido. Como ke si lo acepta abre otro puerto ?, claro ke no. Tal vez kiciste decir abre otra conexion pero no puerto, y aun asi no es correcto para el control winsock de VB. El control winsock de VB en modo servidor solo acepta una conexion a la vez por el mismo puerto, si un cliente ya se conecto y un segundo cliente tambien se kiere conectar este segundo cliente no podra conectarse hasta ke se desconecte el primero. La solucion para ke varios clientes se puedan conectar al mismo tiempo por el mismo puerto y con un solo control winsock es crear una matriz de controles del winsock, como lo puse en el post de mas arriba. primero al cargar el form donde esta el control winsock con la propiedad index en 0 en modo servidor se pone a la escucha en el puerto ke kieras, en el ejemplo es el 1001, despues cada cliente ke kiera conectarse al servidor por el puerto 1001 se lanzara el evento ConnectionRequest del winsock ke tiene el parametro index ke es el ke identifica ke control es dentro de la matriz, en este caso sera 0 por ke cada cliente ke se kiere conectar al puerto 1001 index sera 0 porke el control de la posicion 0 es el ke se puso a la escucha en el puerto 1001, entonces en el evento ConnectionRequest se comprueba con el if si el index es cero si si lo es se crea una nueva instancia del control en la posicion ke sigue dentro de la matriz, asi cada instancia creada se encargara de cada cliente ke se conecte y de sus peticiones. En el codigo cada vez ke se crea la nueva instancia en la parte de sckServer(intMax).LocalPort = 0 'aki se le dice con el 0 ke la nueva instancia esta en el mismo puerto original ke se abrio en el caso del ejemplo el 1001. sckServer(intMax).Accept requestID ' aki se acepta la nueva conexion en la nueva instancia.
Espero ke con esto ya kede claro. Saludos.
2
« en: Sábado 24 de Septiembre de 2005, 18:36 »
Aceptar más de una solicitud de conexión con control WinsockEs posible aceptar varias solicitudes de conexión con el mismo control si crea una matriz de controles. En este caso, no necesita cerrar la conexión; basta con crear una nueva instancia del control (estableciendo la propiedad Index) e invocar el método Accept de la nueva instancia. El código que se muestra a continuación presupone que existe un control Winsock en un formulario llamado sckServer y que su propiedad Index tiene el valor 0, por lo que el control forma parte de una matriz de controles. En la sección Declaraciones se declara una variable intMax a nivel de módulo. En el evento Load del formulario, intMax tiene establecido el valor 0 y la propiedad LocalPort del primer control de la matriz tiene el valor 1001. Después, se invoca el método Listen en el control, convirtiéndolo en el control "que escucha". A medida que llega cada solicitud de conexión, el código comprueba si el índice es 0 (el valor del control "que escucha"). Si es así, este control aumenta la variable intMax y utiliza ese número para crear una nueva instancia del control. Esta instancia se utiliza para aceptar la solicitud de conexión. Private intMax As Long Private Sub Form_Load() intMax = 0 sckServer(0).LocalPort = 1001 sckServer(0).Listen End Sub Private Sub sckServer_ConnectionRequest _ (Index As Integer, ByVal requestID As Long) If Index = 0 Then intMax = intMax + 1 Load sckServer(intMax) sckServer(intMax).LocalPort = 0 sckServer(intMax).Accept requestID Load txtData(intMax) End If End Sub
Saludos.
3
« en: Miércoles 21 de Septiembre de 2005, 12:42 »
No se de ke dll's hablan pero si ya tienen el crystal ya con eso tienen para enviar la impresión directo a la impresora.
salu2.
4
« en: Miércoles 21 de Septiembre de 2005, 07:07 »
Para imprimir directo a la impresora es con un metodo de la variable de tipo reporte de crystal reports: CrxReport.PrintOut False, NCopias, , PagIni, PagFin
el False es para ke no muestre ningun diálogo al usuario, el siguiente es el número de copias y los 2 siguientes es el rango de páginas a imprimir, con esto se va directo a la impresora en caliente espero les sirva Saludos.
5
« en: Martes 20 de Septiembre de 2005, 00:38 »
6
« en: Martes 20 de Septiembre de 2005, 00:33 »
El MySQL funciona mejor estando instalado como un servicio en windows de tipo NT como Win 2000 o XP, y en windows 98 no es posible tener servicios en este caso se instala como una aplicacion, lo recomendable es ke centralices la información en un ekipo con win 2000 o xp con mysql instalado y ke los demas ekipos con win 98 o el ke sea se conecten a este por medio de la red.
si las makinas no estan en red y cada una trabaja de forma independiente entonces verifica ke tu makina con win98 tenga el mysql instalado como aplicacion y no como servicio sino es eso verifica tu conector ke me imagino debe ser el de odbc, si no es nada de eso entonces lo mas recomendable y para kitarte de pexs es kitar el nche win98 y pongas win 2000 si la makina ya anda medio vieja o win xp si lo awanta.
Saludos.
7
« en: Jueves 15 de Septiembre de 2005, 12:23 »
Si usas SQL Server esta solucionado, pues es mejor utilizar un procedimiento almacenado con un parametro de tipo cadena y desde VB lo llamas pasandole el parametro por ejemplo: El Porcedimiento almacenado seria mas o menos asi: ------------------------------------------------------------ CREATE PROCEDURE pruebita @nombre varchar(20) AS SELECT * FROM Tabla WHERE nombre = @nombre GO ----------------------------------- para llamarlo desde VB seria: ----------------------------------- Dim cnx As New ADODB.Connection Dim cmd As New ADODB.Command Dim prm As New ADODB.Parameter Dim rst As New ADODB.Recordset cnx.Open "Provider=SQLOLEDB.1; etc." cmd.CommandType = adCmdStoredProc cmd.CommandText = "pruebita" Set prm = cmd.CreateParameter("nom", adVarChar, adParamInput, 20) prm.Value = "Julian's" <----aki como veras no hay problema cmd.Parameters.Append prm cmd.ActiveConnection = cnx Set rst = cmd.Execute <----aki te devuelve el recordset El chiste es utilizar un parametro para no estar concatenando con el apostrofe (') ke es donde esta el problema. Claro esto es con SQL Server, es la ventaja de utilizar un SGBD en regla y no el motor MS JET (access). Saludos.
8
« en: Jueves 15 de Septiembre de 2005, 11:21 »
No podras acceder a los datos de una base de datos de MS JET (access) en remoto ni por FTP ni por ningun otro medio, lo maximo ke se puede hacer en red con una base da datos de jet es compartirlo en una red LAN y nadamas, de ahi para accesar por tcp/ip no lo permite el motor jet, te sugiero ke migres tu base a un SGBD de servidor como lo es MySQL o SQL Server, con estos si podras accesar a los datos atraves de internet. te pongo algunas datos tecnicos por ke por lo ke me doy cuenta hay desconocimiento de esto: Muchas veces se habla de bases de datos Access para referirse a los archivos *.mdb. Estrictamente hablando, esto no es correcto. Access no es quien crea y gestiona directamente los archivos mdb, sino el motor Jet de Microsoft. El motor Jet está formado por una serie de archivos .dll de distribución gratuita que se instalan en el directorio de sistema de Windows. De hecho, es posible crear en Windows un archivo mdb, o incluso llenarlo de tablas y datos aun sin tener Access. Para ello basta con emplear ODBC o ADO en programas hechos en Visual Basic. SQL Server escucha un puerto TCP/IP, y Jet no. SQL Server puede recibir conexiones (clientes que desean manipular datos) desde cualquier computadora conectada a Internet. En este aspecto es igual que un servidor web o un servidor de correo. La diferencia es el número de puerto y, naturalmente, el protocolo con el que se comunicará con el cliente. Un navegador es un cliente para un servidor web, pero no conoce el protocolo para hablar con un servidor de bases de datos. Por ejemplo, Access 2000 o Access XP son clientes para SQL Server. Por el contrario Jet no escucha ningún puerto. Aunque sea posible crear aplicaciones que trabajan en red con archivos .mdb (con Visual Basic o Access), el uso de la red se refiere únicamente a que el archivo mdb resida en una computadora distinta a la aplicación. Sin embargo, todo el procesamiento se realiza en un único equipo. La red sólo actúa aquí únicamente como si fuese otro disco duro. SQL Server admite la programación cliente-servidor, y Jet no. La programación cliente-servidor se utiliza cuando queremos realizar aplicaciones que utilicen redes y que comuniquen entre sí a varias Computadoras. Básicamente consiste en que el programa se divide en dos partes: La parte Cliente, que reside en el equipo donde está el usuario y se encarga de la interacción con éste. La parte Servidor, que reside en un ordenador conectado a la red permanentemente y se encarga de manipular los datos. Ambas partes de la aplicación se comunican entre sí utilizando algún protocolo de red TCP/IP. La justificación de este paradigma es la minimización del tráfico de red, sobre todo para evitar ralentizaciones y economizar el ancho de banda. Espero ke con esto kede claro Saludos.
9
« en: Sábado 10 de Septiembre de 2005, 16:14 »
Hola , yo estoy usando la 10 de Crystal con entorno sql y Vb , tube algunos problemas para hacerlo correr en algunas maquinas pero no es para echarle la culpa el crystal sino a la configuracion del sql y para instalar las dll para su distribucion, con el " package y deployment "que viene incorporado en visual me alcanzo Para mi es muy bueno tenes idea de como refrescar bien los datos? siempre me muestra el resultado de la misma consulta!!!!
saludos.- En el menu 'File' de Crystal desmarca la opcion 'Save Data with Report' kitale la palomita y guarda tu reporte y con eso. Saludos.
10
« en: Jueves 8 de Septiembre de 2005, 06:15 »
Lo ke tienes ke hacer es paginar los resultados, depende tambien de ke base de datos uses si usas MySQL con LIMIT paginas, si estas con SQL Server lo puedes hacer con un SP asi: En el ejemplo extraemos un listado de la base de datos Northwind de productos ordenados por categorías, extraemos los campos ID del producto, nombre del producto y nombre de la categoría. El Stored Procedure recibe dos parámetros: - Index, el número de página que queremos mostrar - NumRegs, el número máximo de registros a mostrar por página. Create Procedure Paginacion_Registros --Número de página a mostrar @index integer -- Total de resgistros por página @NumRegs integer As -- Declaramos dos variables que serán los índices mayor -- y menor del filtro de paginación Declare @Maximo numeric Declare @Minimo numeric -- Y asignamos los valores que le corresponden a cada página -- la asignación de los límites se realiza de la siguiente forma: -- si index = 1 y NumRegs = 10, entonces los registros a mostrar -- son del 1 al 10, si index = 2, los registros a mostrar son del 11 al 20 -- y asi sucesivamente. Select @Maximo = (@index * @NumRegs) Select @Minimo = @Maximo - (@NumRegs - 1) -- Creamos la tabla temporal para la paginación, -- con un campo auto numérico que será el que nos -- sirva de índice a la hora de extraer los registros. Create Table #tmpListado ( nOrden INT IDENTITY(1,1), IDProducto numeric, NombreProducto varchar(40), NombreCategoria varchar(15) ) -- Insertamos en la tabla temporal directamente del select Insert #tmpListado Select Products.ProductID, Products.ProductName, Categories.CategoryName From Products, Categories Where Products.CategoryID = Categories.CategoryID order by Categories.CategoryName -- Una vez tenemos los datos en la tabla temporal los extraemos -- con un select filtrados por los valores de paginación -- @Maximo y @Minimo Select IDProducto, NombreProducto, NombreCategoria FROM #tmpListado WHERE (nOrden BETWEEN @Minimo AND @Maximo) Si pruebas el ejemplo y vas cambiando el valor de index veras como va paginando el Stored Procedure.
--------------------------------------------------------- Tambien puedes paginar desde un recordset, por ejemplo: Este ejemplo utiliza las propiedades AbsolutePage, PageCount y PageSize para mostrar los nombres completos y las fechas de contratación de la tabla Empleados, de cinco en cinco registros. Public Sub AbsolutePageX() Dim rstEmployees As ADODB.Recordset Dim strCnn As String Dim strMessage As String Dim intPage As Integer Dim intPageCount As Integer Dim intRecord As Integer ' Abre un objeto Recordset mediante un cursor del ' cliente para la tabla Empleados. strCnn = "Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=; " Set rstEmployees = New ADODB.Recordset ' Utiliza el cursor del cliente para activar la propiedad ' AbsolutePosition. rstEmployees.CursorLocation = adUseClient rstEmployees.Open "empleado", strCnn, , , adCmdTable ' Muestra los nombres y las fechas de contratación, de cinco ' en cinco registros. rstEmployees.PageSize = 5 intPageCount = rstEmployees.PageCount For intPage = 1 To intPageCount rstEmployees.AbsolutePage = intPage strMessage = "" For intRecord = 1 To rstEmployees.PageSize strMessage = strMessage & _ rstEmployees!fname & " " & _ rstEmployees!lname & " " & _ rstEmployees!hire_date & vbCr rstEmployees.MoveNext If rstEmployees.EOF Then Exit For Next intRecord MsgBox strMessage Next intPage rstEmployees.Close End Sub
Espero te sirva Saludos desde México
11
« en: Miércoles 31 de Agosto de 2005, 01:28 »
Ok Solcito la ultima consulta no esta mal solo te falta ke muestre tambien la fecha y poner un alias al total de la suma de la venta y este alias pornerlo en el order by osea kedaria asi: SELECT TOP 1 Fecha, SUM(monto) AS Totalvta FROM Tabla1 GROUP BY Fecha ORDER BY Totalvta DESC
Saluditos
12
« en: Martes 30 de Agosto de 2005, 03:19 »
Para saber que dia se vendió mas
SELECT TOP 1 count(Fecha) from Tabla1 GROUP BY Fecha Order by 1 DESC
Aqui estas sacando la fecha mas alta osea la ultima fecha de venta y no estas tomando en cuenta el valor de la venta osea no obtienes ke dia vendiste mas y tu consulta asi como la planteaste resumido seria:
SELECT MAX(Fecha) AS UFecha From Tabla1
Para saber que dia se vendi menos:
SELECT TOP 1 count(Fecha) from Tabla1 GROUP BY Fecha Order by 1
Esto es lo mismo ke lo anterior pero la fecha mas baja y resumido seria:
SELECT MIN(Fecha) AS UFecha From Tabla1
Para saber cuanto se vendió en esos dias:
SELECT TOP 1 SUM(monto) FROM Tabla1 GROUP BY Fecha Order By 1 DESC
Esta esta mal tambien, dices ke lo ke se vendio en esos dias si nadamas esta tomando uno y es la suma del ultimo dia de venta
Esos son ejemplos, no miré tu base de datos, igualmente creo que se entiende Cualquier cosa pregunta.
Saludos
Lo siento pero estas mal Solcito la cosa es mas o menos asi: Para el dia o dias ke mas se vendio (pueden ser varios dias en caso de ke hayas vendido la misma cantidad maxima de $ en varias fechas o solo puedes obtener un dia en caso de ke en un solo dia hayas vendido el maximo monto de venta) SELECT Fecha, Montovta FROM Ventas WHERE Montovta = (SELECT MAX(Montovta) AS SMonto FROM Ventas)
Para el dia o dias ke menos se vendio (pueden ser varios dias en caso de ke hayas vendido la misma cantidad minima de $ en varias fechas o solo puedes obtener un dia en caso de ke en un solo dia hayas vendido el minimo monto de venta) SELECT Fecha, Montovta FROM Ventas WHERE Montovta = (SELECT MIN(Montovta) AS SMonto FROM Ventas)
Saludines
Páginas: [1]
|
|
|