(http://www.vanhan.com.ar/1.jpg)
Bueno como ven en la imágen, mi idea es añadir un separador en esas posiciones, donde estan las lineas en rojo.
Agrega otro campo que relacione por categorias es decir
Para que quede asi:
Codigo | Producto | Fecha | Observacion
1 Prod.1 25/09/2010 Ninguna
2 Prod.2 25/09/2010 Ninguna
3 Prod.3 25/09/2010 Reservado
5 ======= 25/09/2010 ========
4 Prod.4 26/09/2010 Ninguna
Deberas agregar otro campo en tu BDD como es: Agrupacion
Codigo | Producto | Fecha | Observacion | Agrupacion
1 Prod.1 25/09/2010 Ninguna 1
2 Prod.2 25/09/2010 Ninguna 1
3 Prod.3 25/09/2010 Reservado 1
5 ======= 25/09/2010 ======== 0
4 Prod.4 26/09/2010 Ninguna 2
Obviamente en agrupacion pones numeros para que te sea factible lo que pides, y en el ListView o DataGrid o sepa Chachito donde los imprimas, No imprimes hay dicho campo solo te ayudaria a ti en lo que deseas.
Es una forma basica y simple, en mi caso no agregaria dicha linea separador por espacio en la BDD aun que hay otra obtativa y es esta:
Creas una tabla de configuracion
ID | Range
0 1-5,8
1 6,7,10-20
...
N {N,N2,Nx-Nn}
* Es decir que los registro desde 1 hasta 5 y 8, son un grupo
* El siguiente registro es decir 6,7,10 hasta el 20 es otro grupo
Es decir: Cada registro es un grupo y estaria delimitado por tu linea que deberas programar por codigo mas no registrar en la BDD por que seria BASURA, en una BDD gorda de datos este metodo es mas factible que el 1ero, por su simplicidad y reduccion de datos en la misma.
OJO PRECAUCIÓN: Este metodo de relacion de uno a muchos o muchos a muchos, asi que tu codigo de registro debera ser de precision de lo contrario crearas relaciones de muchos a muchos si es que no tienes delimitado tus bases, la ventaja que es Maniobrable /Dinamico la Desventaja que si usas PL/SQL seria mejor usar la 1ra optativa...
* Donde el campo Range es un campo tipo string que dice de forma simplificada un rango dicho:
Puedes usar esta funcion para generar dichos rangos;
GetSimplificNumbers (http://infrangelux.sytes.net/Blog/index.php?option=com_content&view=article&id=10:artgetsimplificnumbers&catid=3:catvariamanager&Itemid=9)
[SRC] Abbreviate_Numeric_Array [by *PsYkE1] (http://foro.elhacker.net/programacion_visual_basic/src_abbreviatenumericarray_by_psyke1-t298689.0.html) <-- Trae la funcion para desabreviar = sirve para mi funcion ya que lo rete a hacer dicha funcion de simplificación.
Ojo si usas este 2da alternativa entonces el campo Agrupacion de la 1ra solucion se desecharia...
Cabe mencionar que esta segunda forma es mas liviana para la BDD y no ocuparia tanto espacio y eso es lo que se busca en una BDD la primera tiene patrones que se pueden omitir con este 2do metodo.
P.D.: lo siento por las faltas de ortografia xP.
Sangriento Infierno Lunar!¡.
.
Vhn puedes utilizar mi clase
cCollectionEx.cls (http://foro.elhacker.net/programacion_visual_basic/src_ccollectionexcls_by_psyke1-t302651.0.html); te puede ser útil para comprobar elementos repetidos y demás... (si es que lo necesitas)
Black, creo que ahora te gano ::)Añadir mi clase cCollectionEx.cls (http://foro.elhacker.net/programacion_visual_basic/src_ccollectionexcls_by_psyke1-t302651.0.html)
Pego el codigo :
'=========================================================
' º Function : Abbreviate_Numeric_Array
' º Author : Mr. Frog ©
' º Mail : vbpsyke1@mixmail.com
' º Recommended Websites :
' http://blog.visual-coders.com.ar/
' http://InfrAngeluX.Sytes.Net/
'=========================================================
Option Explicit
Option Base 0
Rem Añadir mi clase cCollectionEx.cls
Public Function Abbreviate_Numeric_Array(ByRef vNumberList() As Variant) As cCollectionEx
If (Not vNumberList) = -1 Then Exit Function
Dim cExTemp As New cCollectionEx
Dim lActualNumber As Variant
Dim lToTalNumbers As Long
Dim Q As Long
Dim W As Long
lToTalNumbers = UBound(vNumberList())
If lToTalNumbers > 2 Then
Do While Q <= lToTalNumbers
lActualNumber = vNumberList(Q)
W = 0
If (Q < lToTalNumbers) Then
Do While (vNumberList(Q) + 1 = vNumberList(Q + 1)) Or _
(vNumberList(Q) = vNumberList(Q + 1))
Q = Q + 1
W = W + 1
Loop
End If
With cExTemp
If W > 1 Then
.Add lActualNumber & "~" & vNumberList(Q)
Else
.Add lActualNumber
End If
End With
If Not (W = 1) Then Q = Q + 1
Loop
Set Abbreviate_Numeric_Array = cExTemp
End If
End Function
Ejemplo:
Private Sub Form_Load()
Dim Q As Long
Dim dArray() As Variant
Dim sResult As String
dArray() = Array(1, 2, 3, 4, 4, 5, 6, 7, 7, 7, 65, 345, 4545, 4546, 4547, 9999999, 9999999999#)
With Abbreviate_Numeric_Array(dArray)
For Q = 1 To .Count
sResult = sResult & .Item(Q) & "|"
Next Q
End With
Debug.Print sResult
End Sub
Obtengo esto:
Citar
1~7|65|345|4545~4547|9999999|9999999999|
Vhn conectate al msn cuando puedas, tengo que hablar contigo... :-*
DoEvents! :P
.
Cita de: Mr. Frog © en 20 Noviembre 2010, 16:21 PM
.
Vhn puedes utilizar mi clase cCollectionEx.cls (http://foro.elhacker.net/programacion_visual_basic/src_ccollectionexcls_by_psyke1-t302651.0.html); te puede ser útil para comprobar elementos repetidos y demás... (si es que lo necesitas)
Black, creo que ahora te gano ::)
Mi codigo verifica elementos repetidos sin tu clase... ¬¬" que no te has fijado en eso?... ademas tiene la optativa de ordenar el arreglo. ¬¬", lo bueno te tu funcion es que hace corrovoracion de muchos a muchos con este problema, lo malo de la mia es que no lo hace asi, es decir esta secuencia 2,2,2,3,2,2Corregido ahora si lo hacepta solo era agregar
Or Lng_ResNumber& < 0 en:
Public Function GetSimplificNumbers(ByRef ArrayOfNumbers() As Variant) As String()
If (Not ArrayOfNumbers) = -1 Then Exit Function ' // Array entrante, inicializado?.
Dim Lng_ArrayTmp$() ' // Colección de Números Simplificados!¡.
Dim Lng_Ini&, Lng_End&, Lng_Index& ' // Variables para el Bucle.
Dim Lng_AntPosNumber& ' // Indice del Numero anterior (Numero del Array entrante).
Dim Lng_ResNumber& ' // residuo de Lng_Index& - Lng_AntPosNumber&.
Dim Lng_ArrayCount& ' // Contador de las dimensiones de Lng_ArrayTmp$.
Dim Bool_Swith As Boolean ' // swith para saber si se debe simplificar!¡.
'Call Start_QuickSort(ArrayOfNumbers(), AcendetOrder) ' // http://infrangelux.sytes.net/Blog/index.php?option=com_content&view=article&id=14:artquicksortybublesort&catid=2:catprocmanager&Itemid=8
Lng_Ini = LBound(ArrayOfNumbers): Lng_End = UBound(ArrayOfNumbers)
If Not isnumber(ArrayOfNumbers(Lng_Ini)) Then Exit Function
ReDim Lng_ArrayTmp$(Lng_ArrayCount&)
Lng_ArrayTmp$(Lng_ArrayCount&) = ArrayOfNumbers(Lng_Index&)
For Lng_Index& = Lng_Ini + 1 To Lng_End
Lng_ResNumber& = ArrayOfNumbers(Lng_Index&) - ArrayOfNumbers(Lng_Index& - 1)
If Lng_ResNumber& > 1 Then
Cita: GetSimplificNumbers (http://infrangelux.sytes.net/Blog/index.php?option=com_content&view=article&id=10:artgetsimplificnumbers&catid=3:catvariamanager&Itemid=9)
Solo es un simple algoritmo para simplificación de números en un array!¡.
la idea es ingresar números y qué los Simplifique, es decir
1,2,3,4,5,9,10,15,16,17,18,555,342,423,422 los ordena de la siguiente manera:
1~5,9,10,15~18,555,342,423,422
Private Sub Form_Load()
Dim arr() As Variant
Dim Element As Variant
arr() = Array(1, 2, 2, 2, 3, 3, 3, 5, 5, 3, 3, 9, 10, 10, 10, 10, 11, 12, 12, 13, 15, 16, 17, 18, 555, 342, 423, 422, 415, 416, 417)
For Each Element In GetSimplificNumbers(arr())
Debug.Print Element
Next
End Sub
'
' /////////////////////////////////////////////////////////////
' // Autor: BlackZeroX ( Ortega Avila Miguel Angel ) //
' // //
' // Web: http://InfrAngeluX.Sytes.Net/ //
' // //
' // |-> Pueden Distribuir Este Código siempre y cuando //
' // no se eliminen los créditos originales de este código //
' // No importando qué sea modificado/editado o engrandecido //
' // o achicado, si es en base a este código //
' /////////////////////////////////////////////////////////////
Option Explicit
Public Function GetSimplificNumbers(ByRef ArrayOfNumbers() As Variant) As String()
If (Not ArrayOfNumbers) = -1 Then Exit Function ' // Array entrante, inicializado?.
Dim Lng_ArrayTmp$() ' // Colección de Números Simplificados!¡.
Dim Lng_Ini&, Lng_End&, Lng_Index& ' // Variables para el Bucle.
Dim Lng_AntPosNumber& ' // Indice del Numero anterior (Numero del Array entrante).
Dim Lng_ResNumber& ' // residuo de Lng_Index& - Lng_AntPosNumber&.
Dim Lng_ArrayCount& ' // Contador de las dimensiones de Lng_ArrayTmp$.
Dim Bool_Swith As Boolean ' // swith para saber si se debe simplificar!¡.
'Call Start_QuickSort(ArrayOfNumbers(), AcendetOrder) ' // http://infrangelux.sytes.net/Blog/index.php?option=com_content&view=article&id=14:artquicksortybublesort&catid=2:catprocmanager&Itemid=8
Lng_Ini = LBound(ArrayOfNumbers): Lng_End = UBound(ArrayOfNumbers)
If Not isnumber(ArrayOfNumbers(Lng_Ini)) Then Exit Function
ReDim Lng_ArrayTmp$(Lng_ArrayCount&)
Lng_ArrayTmp$(Lng_ArrayCount&) = ArrayOfNumbers(Lng_Index&)
For Lng_Index& = Lng_Ini + 1 To Lng_End
Lng_ResNumber& = ArrayOfNumbers(Lng_Index&) - ArrayOfNumbers(Lng_Index& - 1)
If Lng_ResNumber& > 1 Or Lng_ResNumber& < 0 Then
If Bool_Swith Then
If Lng_AntPosNumber& > 2 Then
Lng_ArrayTmp$(Lng_ArrayCount&) = Lng_ArrayTmp$(Lng_ArrayCount&) & "~" & ArrayOfNumbers(Lng_Index& - 1)
Else
Lng_ArrayCount& = Lng_ArrayCount& + 1
ReDim Preserve Lng_ArrayTmp$(Lng_ArrayCount&)
Lng_ArrayTmp$(Lng_ArrayCount&) = ArrayOfNumbers(Lng_Index& - 1)
End If
End If
Lng_ArrayCount& = Lng_ArrayCount& + 1
ReDim Preserve Lng_ArrayTmp$(Lng_ArrayCount&)
Lng_ArrayTmp$(Lng_ArrayCount&) = ArrayOfNumbers(Lng_Index&)
Bool_Swith = False
ElseIf Lng_ResNumber& = 1 Then
If Not Bool_Swith Then Lng_AntPosNumber& = 0
Bool_Swith = True
If Lng_Index& = Lng_End Then
If Conversion.CBool(InStr(1, Lng_ArrayTmp$(Lng_ArrayCount& - 1), "~")) Then
Lng_ArrayCount& = Lng_ArrayCount& + 1
ReDim Preserve Lng_ArrayTmp$(Lng_ArrayCount&)
Lng_ArrayTmp$(Lng_ArrayCount&) = ArrayOfNumbers(Lng_Index&)
Else
Lng_ArrayTmp$(Lng_ArrayCount&) = Lng_ArrayTmp$(Lng_ArrayCount&) & "~" & ArrayOfNumbers(Lng_Index&)
End If
Else
Lng_AntPosNumber& = Lng_AntPosNumber& + 1
End If
ElseIf Lng_ResNumber& = 0 Then
If Lng_AntPosNumber& > 0 Then
Lng_AntPosNumber& = Lng_AntPosNumber& + 1
Else
Lng_AntPosNumber& = 0
End If
End If
Next
GetSimplificNumbers = Lng_ArrayTmp$
End Function
Dulces Lunas!¡.
Gracias BlackZeroX▓▓▒▒░░ y Mr. Frog actualice el Post asi ven lo que intento hacer.
Salu2
[vHn]