Arrays en VB

Iniciado por TheGhost(Z), 6 Noviembre 2009, 19:07 PM

0 Miembros y 1 Visitante están viendo este tema.

TheGhost(Z)

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
Dim Transmitir As String
Transmitir = Hoja1 &  "|" & Hoja2 & "|" & Hoja3
Winsock1.SendData Transmitir


Cliente
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...

DarkMatrix

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?

Todo aquello que no se puede hacer, es lo que no intentamos hacer.
Projecto Ani-Dimension Digital Duel Masters (Juego de cartas masivo multijugador online hecho en Visual Basic 6.0)

Desing by DarkMatrix

TheGhost(Z)

Bueno he revisado todo. En un lan pasa todo los datos, intentaré de nuevo a traves de internet... ya les comentaré

TheGhost(Z)

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.?

BlackZeroX

#4
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]



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]


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!¡.
The Dark Shadow is my passion.

TheGhost(Z)

OK. Intentaré arreglar todo eso. Luego les comento. como va..

Saludos,

TheGhost(Z)

Hola, ░▒▓BlackZeroҖ▓▒░

Los 100 registros los descargo con un Timer
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

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:

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