Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: TheGhost(Z) en 6 Noviembre 2009, 19:07 pm



Título: Arrays en VB
Publicado por: TheGhost(Z) en 6 Noviembre 2009, 19:07 pm
Hola a todos. solo quería saber cuanta informacion se puede almacenar en cada casilla de una array unidimencional:

Lo que ocurre es que estoy pasando los datos de tres campos por Winsock al cliente. Pero me arroja error en una fila donde los tres campos estan con datos. de ahí que creo que a lo mejor es porque hay mucha informacion?

'Server
Código:
Dim Transmitir As String
Transmitir = Hoja1 &  "|" & Hoja2 & "|" & Hoja3
Winsock1.SendData Transmitir


Cliente
Código:
Dim Transmicion As String
Dim Datos() As String

Winsock1.GetData Transmicion, vbString

Datos = Split(Transmicion, "|")

Text1.Text= Datos(0)
Text2.Text= Datos(1)
Text3.Text= Datos(2)

Hay 20 filas con datos en el primer campo. Solo en la fila 16 los tres campos estan con datos. con información de una hoja Word. Y justo ahi salta un error y pasa a la fila 17. Salta porque capuré el error.

Será porque en la fila 16 hay mucho texto?, ayuda porfa...


Título: Re: Arrays en VB
Publicado por: DarkMatrix en 6 Noviembre 2009, 21:15 pm
Dudo que sea eso ps en una variable tipo string se puede almacenar mucho, que error te manda el vb y que tipo de datos son hoja1, hoja2 y hoja3?


Título: Re: Arrays en VB
Publicado por: TheGhost(Z) en 7 Noviembre 2009, 10:22 am
Bueno he revisado todo. En un lan pasa todo los datos, intentaré de nuevo a traves de internet... ya les comentaré


Título: Re: Arrays en VB
Publicado por: TheGhost(Z) en 10 Noviembre 2009, 17:59 pm
Hola, saben he intentado en una LAN y pasa normal todos los datos, pero cuando lo hago desde internet, trabajo a casa, no llega datos en el campo 3. Lo que estoy pensando es que se pierden datos. Ya, que solo pasa con ese registro donde hay gran cantidad de informacion.

En realidad, lo de arriba es solo un ejemplo. Lo que intento pasar son 100 registros con 10 campos. De esos campos hay 03 con Hoja1, Hoja2, Hoja3, donde guardo comentarios de 20 lineas.

Todos los registros tienen comentarios de 20 lineas en la hoja1. pero en los registros donde tienen comentarios en la hoja2, hoja3 llegan sin datos.

hay, algun limite para pasar datos de un porramos con el Winsock.?


Título: Re: Arrays en VB
Publicado por: BlackZeroX en 10 Noviembre 2009, 20:31 pm
eso seguro es perdida de datos, usa un doevents antes de el sendata

doevents: ws.senddata datos

yen el servidor  o resector ue no tenga nintun doevents en el evento dataarrival (si pones un doevents se volveara el estring: es por esperiencia propia con el winsock ).


otra cosa, no uses el select case en el data arrival, solo usalo para obtener los datos, y usa algo asi como Switch para pasar datos GraNDES


Winsock emisor[/i]

Código:

botonSend ()
{
    ws.senddata "EnvOn" ' //    Peticion para saber si esta listo el resector
}

DataArrival()
{
dim datos as string
dim spli()
    spli = split(datos,"|")
    select case spli(0)
        case "Envon"
            if cbool(spli(1) then
                doEvents: ws.senddata Tramision ' //    Se envian los datos de la variable "Transmison"
                doEvents: ws.sendata "Envoff" ' //    Le indico al resector el termino y la ultilizacion del proceso select case
            end if
        case "Envon"
            if cbool(spli(1) then
                ' //    Me dio weba seguir con el codigo asi ue lo lo demas es cosa tuya
            end if
        ' //    Otros select case etc...
    end select
}

WinSock Receptor[/i]
Código:

DataArrival()
{
    dim datos as string
    static resect as boolean
    ws.getdata datos, vbstring
    if right(datos,len("Envon"))="Envon" then
        resect = true
        Ws.sendata "Envon|" & true
    elseif right(datos,len("Envoff"))="Envoff" then
        resect = false
        Ws.sendata "Envoff|" & true
    else
        call procesodondeestaelselectcase(datos) ' //    en este proceso hacer el split con la variable en el parametro.
    end if
}


Dulces Lunas!¡.


Título: Re: Arrays en VB
Publicado por: TheGhost(Z) en 11 Noviembre 2009, 19:59 pm
OK. Intentaré arreglar todo eso. Luego les comento. como va..

Saludos,


Título: Re: Arrays en VB
Publicado por: TheGhost(Z) en 11 Noviembre 2009, 21:13 pm
Hola, ░▒▓BlackZeroҖ▓▒░

Los 100 registros los descargo con un Timer
Código:
Private Sub Timer1_Timer()
If Winsock1.State = sckConnected Then
    Dim ID As Long
    ID = FuncionMaximo("Registros", "ID")
    ID = ID + 1
    Winsock1.SendData "DESGARGAR" & Format(ID, "0000000000")
    Timer1.Enabled = False
End If
End Sub


Luego en el Server DataArribal

Código:
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim Transmicion As String
Dim Mandato As String

Winsock1.GetData Transmicion, vbString
Mandato = Left(Transmicion, 9)

If Mandato = "DESCARGAR" Then
     RS.Open "", DBConex, adOpenStatic, adLockReadOnly
     If RS.RecordCount > 0 Then
           Dim Trasmitir As String
           Transmitir = Transmitir & RS(0) & "|"
           Transmitir = Transmitir & RS(1) & "|"
           Transmitir = Transmitir & RS(2) & "|"
           Etc, Etc, Etc
           Winsock1.SendData "AGREGARSI" & Transmitir
      Else
           Winsock1.SendData "AGREGARNO" 'Informamos que no hay el registro solicitado.
      End If
      Rs.Close
      Set Rs = Nothing
End IF
End Sub

Nuevamente en el Cliente:

Código:
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim Transmicion As String
Dim Mandato As String
Winsock1.GetData Transmicion, vbString
Mandato = Left(Transmicion, 9)

If Mandato = "AGREGARSI" Then
    'hago el correspondiente Split. Es decir extraido los campos
    'luego los agrego en la base de datos
    'como existe más datos en el server. activo el Timer para que saque el
    'nuevo máximo valor y lo envié para descargar el siguiente
    Timer1.Enabled = True
End If
End Sub

Bueno, eso es el código. Crees que sea por el Do Events. XQ cuanto solicité la descargar de Registros con un FOR en el DataArribal se mesclaban todos los registros; ya que, lo hacía muy rápido. Por eso  el Timer solicitará un nuevo registro una vez se se haya agregado el registro descargado, sino se mantendrá Inactivo.

Más claro, lo que no entiendo si el problema es:
1.) ¿Pido muy rápido el registro a descargar?
2.) ¿Problema con el Split, porque no soporta muchos datos. Por lo que me sugieres que use Switch?

Ayuda, porfa...