Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

no encuentro mi solucion

Estas en el tema de no encuentro mi solucion en el foro de Visual Basic clásico en Foros del Web. Private Sub carga_datos() Dim sql As String Dim criterio As String tbdetallefactura where numfactura= " + txtNroPresupuesto.Text & " " criterio = "numfactura= '" & ...
  #1 (permalink)  
Antiguo 01/10/2008, 09:28
Avatar de gasafonso  
Fecha de Ingreso: septiembre-2008
Mensajes: 357
Antigüedad: 15 años, 7 meses
Puntos: 1
no encuentro mi solucion

Private Sub carga_datos()
Dim sql As String
Dim criterio As String
tbdetallefactura where numfactura= " + txtNroPresupuesto.Text & " "
criterio = "numfactura= '" & txtNroPresupuesto.Text & "'"
dsDetalleFactura.Recordset.FindFirst criterio

For i = 1 To grilla.Rows - 1
dsDetalleFactura.Recordset.MoveFirst

dsDetalleFactura.Recordset.FindFirst criterio
grilla.TextMatrix(i, 0) = dsDetalleFactura.Recordset!cantidad
grilla.TextMatrix(i, 1) = dsDetalleFactura.Recordset!codigoprod
grilla.TextMatrix(i, 3) = dsDetalleFactura.Recordset!precio
grilla.TextMatrix(i, 4) = dsDetalleFactura.Recordset!subtotal
' dsDetalleFactura.Recordset.NextRecordset
Next
-------------------------------------------------------------------------------------
Pero quiero que se repita mientras numfactura= txtNroPresupuesto.Text

numfactura es el campo de una tabla , y quiero cargar todos los items de ese numfactura que estan en un tabla que tiene (numfactura, importe, codiProd, Cantidad)

gracias

PD: Trabajo con ado, quiero reconstituir la factura original,
  #2 (permalink)  
Antiguo 01/10/2008, 11:41
Avatar de Kruzado  
Fecha de Ingreso: marzo-2007
Mensajes: 307
Antigüedad: 17 años, 2 meses
Puntos: 17
Respuesta: no encuentro mi solucion

amigazo, da lo mismo dao o ado.... si para crear un filtro de base de datos da lo mismo, manda el codigo donde abres tu base de datos y tu tabla.... ahi lo amononamos un poco y vemos que sale

para ordenar un poco la casa, estas repitiendo la misma condicion de busqueda dentro del ciclo

dsDetalleFactura.Recordset.FindFirst criterio (esta linea dentro del for)

lo que estas haciendo es cada vez que entra al ciclo estas buscando el primer registro que cumpla con el criterio, entonces SIEMPRE te va a encontrar el mismo registro (el primero), entonces por ejemplo si entra 3 veces al for, en tu grilla te va a mostrar 3 veces el mismo registro.... se entiende?, por eso te aconsejaba usar un ciclo while y recorrer la tabla.... ahora si quieres seguir ocupando tu ciclo for, reemplaza la linea anterior por :

dsDetalleFactura.Recordset.FindNext criterio

cada vez que pase por el ciclo busca el siguiente y no el primero

ahora tu ciclo for lo estas condicionando a la cantidad de lineas que tienes en tu grilla... que pasa si tu grilla tiene 2 lineas y una factura tiene 3 item?, el ultimo item se queda sin ser mostrado, porque recorre solo dos veces tu ciclo, entonces si quieres seguir utilizando el for, debes cambiar la condicion del for por una mas relacionada con la base de datos, por ejemplo la cantidad de registros de la tabla ej

for i=1 to dsDetalleFactura.Recordset.Recordcount

ahora estos son solo consejos, no quiere decir que te funcionen a la primera.... mira analiza y llega a una conclusion, si no puedes, nos avisas y saldremos adelante...

Última edición por Kruzado; 01/10/2008 a las 11:49
  #3 (permalink)  
Antiguo 02/10/2008, 02:25
Colaborador
 
Fecha de Ingreso: enero-2008
Ubicación: Unas veces aquí, otras veces allí
Mensajes: 1.482
Antigüedad: 16 años, 3 meses
Puntos: 37
Respuesta: no encuentro mi solucion

Cita:
Iniciado por gasafonso Ver Mensaje
Private Sub carga_datos()
Dim sql As String
Dim criterio As String
tbdetallefactura where numfactura= " + txtNroPresupuesto.Text & " "
criterio = "numfactura= '" & txtNroPresupuesto.Text & "'"
dsDetalleFactura.Recordset.FindFirst criterio

For i = 1 To grilla.Rows - 1
dsDetalleFactura.Recordset.MoveFirst

dsDetalleFactura.Recordset.FindFirst criterio
grilla.TextMatrix(i, 0) = dsDetalleFactura.Recordset!cantidad
grilla.TextMatrix(i, 1) = dsDetalleFactura.Recordset!codigoprod
grilla.TextMatrix(i, 3) = dsDetalleFactura.Recordset!precio
grilla.TextMatrix(i, 4) = dsDetalleFactura.Recordset!subtotal
' dsDetalleFactura.Recordset.NextRecordset
Next
-------------------------------------------------------------------------------------
Pero quiero que se repita mientras numfactura= txtNroPresupuesto.Text

numfactura es el campo de una tabla , y quiero cargar todos los items de ese numfactura que estan en un tabla que tiene (numfactura, importe, codiProd, Cantidad)

gracias

PD: Trabajo con ado, quiero reconstituir la factura original,
Si no encuentas tu solución es porque no haces caso de los consejos que te dan y no miras el código que te ponen.

Siguiendo con tus datos, suponemos que dsDetalleFactura es un control Data de ADO (Adodc) y grilla es un control MSFlexGrid (si no es así, nos lo indicas).
Pues bien, copia el siguiente código (modifica [LaTabla] con el nombre de tu tabla)

Código:
Private Sub carga_datos()
Dim i As Long
dsDetalleFactura.RecordSource = "SELECT * FROM [LaTabla] WHERE numfactura LIKE'%" & txtPresupuesto.Text & "%'"
dsDetalleFactura.Refresh
With grilla
    .Rows = dsDetalleFactura.Recordset.RecordCount
    .Cols = dsDetalleFactura.Recordset.Fields.Count
    i = 1
    Do Until dsDetalleFactura.Recordset.EOF
        .TextMatrix(i, 0) = dsDetalleFactura.Recordset!cantidad
        .TextMatrix(i, 1) = dsDetalleFactura.Recordset!codigoprod
        .TextMatrix(i, 2) = dsDetalleFactura.Recordset!precio
        .TextMatrix(i, 3) = dsDetalleFactura.Recordset!Subtotal
        i = i + 1
        If i = .Rows Then Exit Do
        dsDetalleFactura.Recordset.MoveNext
    Loop
End With
End Sub
Espero que así te funcione y si te dá error, nos indiques el tipo de error y en la línea de código donde lo dá.

  #4 (permalink)  
Antiguo 02/10/2008, 12:45
Avatar de gasafonso  
Fecha de Ingreso: septiembre-2008
Mensajes: 357
Antigüedad: 15 años, 7 meses
Puntos: 1
Respuesta: no encuentro mi solucion

Cita:
Iniciado por Avellaneda Ver Mensaje
Si no encuentas tu solución es porque no haces caso de los consejos que te dan y no miras el código que te ponen.

Siguiendo con tus datos, suponemos que dsDetalleFactura es un control Data de ADO (Adodc) y grilla es un control MSFlexGrid (si no es así, nos lo indicas).
Pues bien, copia el siguiente código (modifica [LaTabla] con el nombre de tu tabla)

Código:
Private Sub carga_datos()
Dim i As Long
dsDetalleFactura.RecordSource = "SELECT * FROM [LaTabla] WHERE numfactura LIKE'%" & txtPresupuesto.Text & "%'"
dsDetalleFactura.Refresh
With grilla
    .Rows = dsDetalleFactura.Recordset.RecordCount
    .Cols = dsDetalleFactura.Recordset.Fields.Count
    i = 1
    Do Until dsDetalleFactura.Recordset.EOF
        .TextMatrix(i, 0) = dsDetalleFactura.Recordset!cantidad
        .TextMatrix(i, 1) = dsDetalleFactura.Recordset!codigoprod
        .TextMatrix(i, 2) = dsDetalleFactura.Recordset!precio
        .TextMatrix(i, 3) = dsDetalleFactura.Recordset!Subtotal
        i = i + 1
        If i = .Rows Then Exit Do
        dsDetalleFactura.Recordset.MoveNext
    Loop
End With
End Sub
Espero que así te funcione y si te dá error, nos indiques el tipo de error y en la línea de código donde lo dá.

Me da el error " 381 en tiempo de ejecucion" dice " NO EXISTE EL SUBINDICE en EL INTERVALO"

Borrando la linea .Rows = dsDetalleFactura.Recordset.RecordCount, no me da error pero carga solo un registro

Prove poniendo un For antes del DO UNTIL for i = 1 to dsDetalleFactura.Recordset.RecordCount pero tampoco

PD : agradeceria urgente infoemacion gracias
  #5 (permalink)  
Antiguo 03/10/2008, 00:37
Colaborador
 
Fecha de Ingreso: enero-2008
Ubicación: Unas veces aquí, otras veces allí
Mensajes: 1.482
Antigüedad: 16 años, 3 meses
Puntos: 37
Respuesta: no encuentro mi solucion

Cita:
Iniciado por gasafonso Ver Mensaje
Me da el error " 381 en tiempo de ejecucion" dice " NO EXISTE EL SUBINDICE en EL INTERVALO"

Borrando la linea .Rows = dsDetalleFactura.Recordset.RecordCount, no me da error pero carga solo un registro

Prove poniendo un For antes del DO UNTIL for i = 1 to dsDetalleFactura.Recordset.RecordCount pero tampoco

PD : agradeceria urgente infoemacion gracias
Si el Grid no tiene encabezado, pon la instrucción así:


.Rows = dsDetalleFactura.Recordset.RecordCount - 1

  #6 (permalink)  
Antiguo 03/10/2008, 09:17
Avatar de gasafonso  
Fecha de Ingreso: septiembre-2008
Mensajes: 357
Antigüedad: 15 años, 7 meses
Puntos: 1
Respuesta: no encuentro mi solucion

Cita:
Iniciado por Avellaneda Ver Mensaje
Si el Grid no tiene encabezado, pon la instrucción así:


.Rows = dsDetalleFactura.Recordset.RecordCount - 1

No me anduvo , no se que mas hacer se te ocurre algo mas ?

yo tengo que entregar el programa mañana

Última edición por gasafonso; 03/10/2008 a las 12:59
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:33.