• Martes 28 de Febrero de 2017, 10:55

Autor Tema:  Mostrar el ultimo comentario ingresado, de primero en el Tex  (Leído 2306 veces)

baezafr

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Mostrar el ultimo comentario ingresado, de primero en el Tex
« en: Miércoles 17 de Marzo de 2010, 01:54 »
0

Publicidad 
Les comento rapidamente, estoy realizando la modificacion de un programa (en visual basic 6.0) el cual graba una nota como archivo .txt en una base de datos, ya he realizado el añadir que en el mensaje que se ponga aparezca el nombre del usuario que lo escribe y la fecha, ahora me hace falta una cosa no tan dificil pero en realidad no he logrado hacerla, es el ordenar los comentarios de la nota es decir que el ultimo comentario ingresado en la nota aparezca de primero

ejemplo: el usuario franco escribio el 13-03-2010 "esto es un mensaje de prueba"

Franco 13-03-2010 Esto es un mensaje de prueba
el usuario franco escribio el 15-03-2010 "Hola"

la manera en la que actualmente se graban es en orden ascendente dentro del .txt

Franco 13-03-2010 Esto es un mensaje de prueba
Franco 15-03-2010 Hola

pero necesito que aparezcan asi en el textbox

Franco 15-03-2010 Hola
Franco 13-03-2010 Esto es un mensaje de prueba

Repito estos comentarios se agregan a un archivo que he llamado Notadelcliente.txt no importa si dentro del archivo .txt no cambian de posicion, lo unico que quiero es que en el textbox aparezca el ultimo comentario ingresado de primero.


de antemano agradezco cualquier tipo de ayuda ya que hace tiempo que no programaba algo en visual basic




esta es la parte del codigo donde agregue lo de "USUARIO" Y "FECHA"

Private Sub cmdguardarnota_Click() ' ACA AGREGO LOS COMENTARIOS AL TEXTBOX LLAMANDO A NOTAS
Dim oCliente As New cCliente
Dim oCliente1 As New cCliente1
If txtcliente_id.Text <> "" Then
oCliente.Buscar_Nom txtcliente_id.Text
End If
If txtCliente_id1.Text <> "" Then
oCliente1.Buscar_Nom txtCliente_id1.Text
End If
If MsgBox("¿Esta Seguro que Desea Agregar el Comentario a la nota?", vbYesNo, ":::: SISTEMA ²º¹º ::::") = vbYes Then
If (oCliente.nombre = cmbNombre.Text) And (cmbNombre.Text <> "") Then
If Format(oCliente.Notas, "") <> Format(txtlc3.Text, "") Then
If oCliente.Notas = "Nota" Or oCliente.Notas = "" Then
oCliente.Notas = "Fecha " + CStr(Date) + " : " + usuario + " , " + Format(CStr(oCliente.Notas), "$##,##0.00") + " a: " + txtlc3.Text
Else
oCliente.Notas = oCliente.Notas + Chr(13) + Chr(10) + " Fecha " + CStr(Date) + " , " + usuario + " " + txtlc3.Text
End If
txtNotas.Text = oCliente.Notas
oCliente.Actualizar_Limite_Credito Format(txtLC.Text, "00000.00")
oCliente.Notas = oCliente.Notas + " Fecha " + CStr(Date) + " , " + usuario + txtlc3.Text
Else
MsgBox "El comentario se ha agregado a la nota", vbExclamation, ":::: SISTEMA ²º¹º ::::"
End If
Else: MsgBox "La Clave del Cliente no coincide con el Nombre, no Habrá Cambio", vbExclamation, ":::: SISTEMA ²º¹º ::::"
End If

MsgBox "La nota ha sido Guardada", vbInformation, ":::: SISTEMA ²º¹º ::::"
End If
End Sub



Y AQUI LES DEJO DONDE SE GUARDA Y EDITA LA NOTA OSEA EL FORMULARIO DE LA NOTA en un archivo .txt




Dim rs1 As adodb.Recordset
Dim rs2 As adodb.Recordset


Private Sub CmdGrabar_Click()
On Error GoTo Atrapado
Set rs1 = New adodb.Recordset
Set rs2 = New adodb.Recordset

cnn.BeginTrans
rs1.Open "Update CLIENTES Set Notas = ' " & Me.TxtNota.Text & "' where Cliente_Id = " & _
frmCACPC.txtcliente_id.Text, cnn

cnn.CommitTrans

Set rs1 = Nothing
Set rs2 = Nothing

Unload Me

Exit Sub
Atrapado:
MsgBox Err.Description
End Sub

Private Sub Command1_Click()
Unload Me
End Sub

Private Sub Form_Load()
cnn.Close
If cnn.State <> adStateOpen Then
cnn.CursorLocation = adUseClient
cnn.Open "UBICACION DE LA BASE DE DATOS EN EL SERVIDOR "
End If
If cnn1.State <> adStateOpen Then
cnn1.CursorLocation = adUseClient
cnn1.Open "UBICACION DE LA BASE DE DATOS EN EL SERVIDOR DE ACUERDO AL ODBC Y SU IP"
End If
End Sub

Nebire

  • Miembro HIPER activo
  • ****
  • Mensajes: 670
    • Ver Perfil
Re: Mostrar el ultimo comentario ingresado, de primero en el Tex
« Respuesta #1 en: Miércoles 17 de Marzo de 2010, 15:07 »
0
Los archivos se escriben siempre detrás... no se puede escribir al principio así 'alegremente'. Para hacerlo hay que mover hacia abajo todo el resto del contenido.

Lo cual puede no ser sensato, cuando el archivo adquiere cierto tamaño. Si tenemos un archivo de 40Mb. y deseas añadir Hola al principio, debes mover los 40Mb., 4 caracteres atrás, luego insertar 'Hola' en la 1ª posición... esto es ineficiente. Es lo mismo que si tienes un camión de arena, traes un cubito de arena de la playa y tu quieres que quede debajo del todo, el único modo de hacerlo es tirarlo al suelo y depositar luego todo el camión de arena existente encima de este cubito, no podrás hacerlo sin mover todo el otro contenido, lo cual es desproporcionado.

Puedes hacer algo más útil, puedes crear un fichero tipo índice cuyo contenido es parecido a los chunks de los archivos IFF.
Código: Visual Basic
  1.  
  2. private type Bloques
  3.     Numero as long
  4.     Tamaño as long
  5. end type
  6.  
  7. Nº Comentario Long
  8. TamañoComentario long
  9. Comentario string
  10.  
El chunk, utiliza la estructura para saltar número a numero por el fichero, una vez localizado el chunk deseado, toma el texto asociado... además los chunks pueden estar incluso desordenados, por si eliminas alguno aún sirva el mismo código.
Esta estructura se repite a lo largo del archivo, si tu ahora necesitas acceder al comentario 54, para tomarlo y hacer con él lo que quieras, puedes ir recorriendo el archivo, hasta encontrar el comentario 54... empiezas por el principio o por el punto actual si queda más cerca y los chunks están ordenados

 Aquí, en el código, partimos delas siguientes suposiciones: empezamos por el principio, el fichero existe y está abierto, no sabemos si existe el comentario 54. y el fichero puede tener los chunks desordenados. Por supuesto en ningún caso hay chunks repetidos (el número de bloque es único para cada chunk)

Código: Visual Basic
  1.  
  2. dim ff as integer   ' canal del fichero abierto
  3. public function Buscarcomentario(byval Numcomentario as long) as string
  4.        dim bl as bloque           ' estructura de tipo bloque
  5.        dim puntero as long      ' puntero de avance sobre el fichero.
  6.        dim comen as string    ' contendrá el texto que se ha de devolver
  7.  
  8.       ' esta búsqueda es comenzando desde el punto inicial, que suponemos el byte 1 del fichero
  9.          puntero=-7  ' nótese que al entrar al bucle sumaremos 8, por lo que el será 1, cuando leamos el fichero  
  10.          
  11.         on local error goto sale  
  12.         do while bl.Numero < Numcomentario   ' suponemos numerocomentario basado en 0, si se basa en 1 hacer los cambios pertinentes
  13.                puntero=puntero + bl.Tamaño + 8    ' busca el puntero a la siguiente estructura  
  14.                get  #ff,puntero,bl        ' obtenemos la siguiente estructura del fichero
  15.         loop  
  16.         comen= space$(bl.tamaño)
  17.         get #ff,puntero + 8, comen
  18.         Buscarcomentario = comen
  19.  
  20.         exit function
  21.        sale :   ' el error se producirá cuando se alcancé EOF #ff, no se encontró el número de comentario deseado.
  22.         err.clear    
  23. end function
  24.  
  25.  

Una vez tu tengas fácil acceso a los comentarios, puedes volcarlos a un control (en la interfaz de usuario) delante del todo o donde quieras, porque ya no estarás moviendo tropecientos millones de bytes....
«Ma non troppo»
----> ModoVacaciones = False<----