elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Problema con ListView y DataBase
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Problema con ListView y DataBase  (Leído 12,493 veces)
Skeletron


Desconectado Desconectado

Mensajes: 1.731


A long way to go


Ver Perfil WWW
Problema con ListView y DataBase
« en: 12 Octubre 2009, 03:46 am »

Hola gente, les comentoq ue tengo
La TABLA de la base de datos se crea con el siguiente codigo:
        
Código
  1. Dim SQLconnect As New SQLite.SQLiteConnection()
  2.        Dim SQLcommand As SQLite.SQLiteCommand
  3.        SQLconnect.ConnectionString = "Data Source=" & My.Settings.Database & ";"
  4.        SQLconnect.Open()
  5.        SQLcommand = SQLconnect.CreateCommand
  6.        'SQL query to Create Table
  7.        SQLcommand.CommandText = "CREATE TABLE Movimientos(Fecha CURRENT_DATE, Detalle TEXT, Documento TEXT, Comprobante TEXT, IngEgre BOOLEAN, Monto INTEGER);"
  8.        SQLcommand.ExecuteNonQuery()
  9.        SQLcommand.Dispose()
  10.        SQLconnect.Close()
Como veran, un datos es una FECHA (en cuanto a eso, me gustaria que me recomienden si hay un mejor metodo para guardar FECHAS.. ya que con DATE, me guarda hasta el horario (00:00:00) y no quiero), luego hay un Detalle, Documento y Comprobante que son de TEXT, luego un Boolean que no me esta funcionando.. que dato le tengo que pasar? la palabra: TRUE o FALSE, o 0 o 1??? y un Monto INTEGER...


Envio unas 5 entradas, y los resutaldos estan OK!!!
Miren las fotos:




Ahora Ingreso otra entrada EXACTAMENTE IGUAL a la 1001-10-01 y miren:


Y para empeorar todo:
Ahora agrego una entrada con fecha: 1002-10-10, pero con los detalles de las coolumnas iguales a los del item 1001-10-10 y aparece ésto:



QUieren que le empeore mas las cosas?
Ok...
Para pasar los datos a la tabla esa, tengo el sigueinte codigo:

        
Código
  1. Dim SQLconnect As New SQLite.SQLiteConnection()
  2.        Dim SQLcommand As SQLite.SQLiteCommand
  3.        SQLconnect.ConnectionString = "Data Source=" & My.Settings.Database & ";"
  4.        SQLconnect.Open()
  5.        SQLcommand = SQLconnect.CreateCommand
  6.        SQLcommand.CommandText = "SELECT * FROM Movimientos"
  7.        Dim SQLreader As SQLite.SQLiteDataReader = SQLcommand.ExecuteReader()
  8.        Planilla.Items.Clear()
  9.        While SQLreader.Read()
  10.            Planilla.Items.Add(SQLreader(0))
  11.            'HAY PROBLEMAS
  12.            Planilla.Items(0).SubItems.Add(SQLreader(1))
  13.            Planilla.Items(0).SubItems.Add(SQLreader(2))
  14.            Planilla.Items(0).SubItems.Add(SQLreader(3))
  15.            Planilla.Items(0).SubItems.Add(SQLreader(4))
  16.            Planilla.Items(0).SubItems.Add(SQLreader(5))
  17.            MsgBox(SQLreader(0) & SQLreader(1) & SQLreader(2) & SQLreader(3) & SQLreader(4) & SQLreader(5))
  18.        End While
  19.        SQLcommand.Dispose()
  20.        SQLconnect.Close()

Como veran, siempre modifica el item 0, eso es así porque cada item que va agregando se transofrma en el "CERO" (no se porque, pero bueno.. es así.. muy raro.. o tal vez ahí esta el problema, pero no lo creo..)
HAN VISTO qu tengo un MSGBOX???? y se preguntaran para que es...
Puse ese MSGBOX para que con cada ingreso que hace, me muestre en una cadena de texto lo que va a incertar.. y gente: ME MUESTRA TODOS LOS ITEMS PERFECTAMENTE!!.. TODOS!!!!!!.. O sea.. el problema esta al visualizar la tabla!!!, es como que al mostrarse la tabla, se "eliminan" los datos de los items repetidos.. algo así!!!
Alguien me da una mano?


En línea

seba123neo


Desconectado Desconectado

Mensajes: 3.621



Ver Perfil WWW
Re: Problema con ListView y DataBase
« Respuesta #1 en: 12 Octubre 2009, 04:12 am »

Hola, primero algunas preguntas , ¿ porque creas la bases de datos asi con un comando ?, porque no la creas con el administrador de SQL Lite desde el mismo visual studio ? porque me parece que estan mal los tipos de datos creados ahi. para guardar la fecha usas el tipo de dato DateTime en SQL Server. cuando lo guardas lo debes guardar con la funcion Format() formatado a "yyyymmdd", y para mostrarlo en la grilla despues debes en la consulta SQL fomatear tambien la fecha asi te muestra solo la fecha y no todo con el horario.

para el boolean se usa el tipo de dato bit que es 0 o 1...que yo sepa no existe boolean. y el monto deberia ser un tipo de dato como el Double..en SQL Server debe ser algo como real.

lo mejor para trabajar con bases de datos es crear clases y no poner el select asi en los botones o demas controles, deberia ser programación en 3 capas, es lo mejor. de ultima si eso es mucho...deberias hacerte uans clases con metodos para insertar, update, delete , chequeos etc...pero en una clase..sino se desaprovecha la POO de vb net..

eso cuando carga el listview esta mal...por eso estas teniendo problemas...estas poniendo siempre el 0...yo no lo cargo asi y creo que no se carga asi estoy seguro..mirate ejemplos e internet como lo hacen..crean un objeto del tipo ListViewItem y lo cargan desde ahi, van llenando los subitems con los datos y despues a lo ultimo le ahcen el .ADD y añaden toda la fila.

saludos.


En línea

Skeletron


Desconectado Desconectado

Mensajes: 1.731


A long way to go


Ver Perfil WWW
Re: Problema con ListView y DataBase
« Respuesta #2 en: 12 Octubre 2009, 04:19 am »

Lo solucione.. Saben cual era el problema? esa parte que dije que no creía que estaba el error, era ahí.. Porque? porque en las propiedades del ListView, decia que los items se tenían que ordenar... Aparentemente, vb.net los va ordenando mientras los va ingresando.. no hace un Ordenamiento al finalizar... entonces, entre los ordenados, quedaban mal los datos..
Ahora ya le puse que no ordene, y le modifique el codigo así: (vean que irá modificando los SUBDATOS, ya que se irá incrementando "X")

Pero ahora tengo que ordenar los items haciendo click en los "TITULOS" de las columnas... pero.. no funciona ¬¬ y tengo seleccionada la opcion que los elementos se pueden ordenar... todo mal..

Código
  1.        Dim X As Integer = 0
  2.        Dim SQLconnect As New SQLite.SQLiteConnection()
  3.        Dim SQLcommand As SQLite.SQLiteCommand
  4.        SQLconnect.ConnectionString = "Data Source=" & My.Settings.Database & ";"
  5.        SQLconnect.Open()
  6.        SQLcommand = SQLconnect.CreateCommand
  7.        SQLcommand.CommandText = "SELECT * FROM Movimientos"
  8.        Dim SQLreader As SQLite.SQLiteDataReader = SQLcommand.ExecuteReader()
  9.        Planilla.Items.Clear()
  10.        While SQLreader.Read()
  11.            Planilla.Items.Add(SQLreader(0))
  12.            'HAY PROBLEMAS
  13.            Planilla.Items(X).SubItems.Add(SQLreader(1))
  14.            Planilla.Items(X).SubItems.Add(SQLreader(2))
  15.            Planilla.Items(X).SubItems.Add(SQLreader(3))
  16.            Planilla.Items(X).SubItems.Add(SQLreader(4))
  17.            Planilla.Items(X).SubItems.Add(SQLreader(5))
  18.            X += 1
  19.        End While
  20.        SQLcommand.Dispose()
  21.        SQLconnect.Close()
En línea

Skeletron


Desconectado Desconectado

Mensajes: 1.731


A long way to go


Ver Perfil WWW
Re: Problema con ListView y DataBase
« Respuesta #3 en: 12 Octubre 2009, 04:27 am »

Hola, primero algunas preguntas , ¿ porque creas la bases de datos asi con un comando ?, porque no la creas con el administrador de SQL Lite desde el mismo visual studio ? porque me parece que estan mal los tipos de datos creados ahi. para guardar la fecha usas el tipo de dato DateTime en SQL Server. cuando lo guardas lo debes guardar con la funcion Format() formatado a "yyyymmdd", y para mostrarlo en la grilla despues debes en la consulta SQL fomatear tambien la fecha asi te muestra solo la fecha y no todo con el horario.

para el boolean se usa el tipo de dato bit que es 0 o 1...que yo sepa no existe boolean. y el monto deberia ser un tipo de dato como el Double..en SQL Server debe ser algo como real.

lo mejor para trabajar con bases de datos es crear clases y no poner el select asi en los botones o demas controles, deberia ser programación en 3 capas, es lo mejor. de ultima si eso es mucho...deberias hacerte uans clases con metodos para insertar, update, delete , chequeos etc...pero en una clase..sino se desaprovecha la POO de vb net..

eso cuando carga el listview esta mal...por eso estas teniendo problemas...estas poniendo siempre el 0...yo no lo cargo asi y creo que no se carga asi estoy seguro..mirate ejemplos e internet como lo hacen..crean un objeto del tipo ListViewItem y lo cargan desde ahi, van llenando los subitems con los datos y despues a lo ultimo le ahcen el .ADD y añaden toda la fila.

saludos.

AMigo, Te comento que uso SQLite.. Lo de las funciones FECHA, me gustaria que me lo expliques mejor... Sin administradores me manejo bien.. (por ahora)... Pero esta MUY MAL como lo estoy haciendo???

En cuanto a lo del BOOLEAN, yo leí por ahí que SQLite si tiene el tipo BOOLEAN.. Corrigeme si me equivoco..
En cuanto al DOUBLE, si, es verdad, necesito numeros con COMA, de putno flotante, pero todavia no he mriado bien eso... Me gustaria que em digas cual es el tipo de dato de punto flotante para SQLITE

En cuanto a la programacion de 3 capas, y POO, es verdad, lo pondré en practica... seguramente modifique todo eso mañana..

Y en cuanto a lo del lsitview, era eso, efectivamente, auqnue te comento que lo solucione antes que me lo digas :P
Pero se me presento un problea: Ahora no se ordena automaticamente, proque eso era el problema.. pero, tendria que ordenarlo manualmente entonces, así que puse que el usuario pueda ordenarlo manualmente pero no me funciona.. algo raro pasó.. no quiero preugntarte cual puede ser el problema, porque es algo totalmente ilogico.. per bueno.. seguire probando
En línea

seba123neo


Desconectado Desconectado

Mensajes: 3.621



Ver Perfil WWW
Re: Problema con ListView y DataBase
« Respuesta #4 en: 12 Octubre 2009, 04:33 am »

esta, pero igualmente fijate lo de como cargar el listview en internet, por mas que ande a veces no quiere decir que sea la forma correta y puedas esperimentar problemas mas delante, en lo que yo te digo no tenes que poner indices ni nada por el estilo, fijate que es la mejor forma y la correcta de cargar un listview.

para ordenar el lsitview no es asi nomas con activarle la propiedad , debes escribir una funcion que compare y te devuelva el ordenamiento. basicamente lo basico es hacer algo asi:

Código
  1. If ListView1.Sorting = SortOrder.Ascending Then
  2. ListView1.Sorting = SortOrder.Descending
  3. Else
  4. ListView1.Sorting = SortOrder.Ascending
  5. End If
  6. ListView1.Sort()

pero eso solo sirve si el campo es string, para numeros y fechas no te sirve y vas a tener que escribir codigo...busca en internet que hay miles de como hacerlo y no es mucho codigo.

saludos.
En línea

seba123neo


Desconectado Desconectado

Mensajes: 3.621



Ver Perfil WWW
Re: Problema con ListView y DataBase
« Respuesta #5 en: 12 Octubre 2009, 04:40 am »

acabo de abrir el administrador de sql server lite y no existe el tipo de dato boolean, es bit como dije, los tipos de datos se mantienen en las versiones SQL Server.

deberias poner tambien como "guardas" los datos...

saludos.
En línea

Skeletron


Desconectado Desconectado

Mensajes: 1.731


A long way to go


Ver Perfil WWW
Re: Problema con ListView y DataBase
« Respuesta #6 en: 12 Octubre 2009, 05:10 am »

esta, pero igualmente fijate lo de como cargar el listview en internet, por mas que ande a veces no quiere decir que sea la forma correta y puedas esperimentar problemas mas delante, en lo que yo te digo no tenes que poner indices ni nada por el estilo, fijate que es la mejor forma y la correcta de cargar un listview.

para ordenar el lsitview no es asi nomas con activarle la propiedad , debes escribir una funcion que compare y te devuelva el ordenamiento. basicamente lo basico es hacer algo asi:

Código
  1. If ListView1.Sorting = SortOrder.Ascending Then
  2. ListView1.Sorting = SortOrder.Descending
  3. Else
  4. ListView1.Sorting = SortOrder.Ascending
  5. End If
  6. ListView1.Sort()

pero eso solo sirve si el campo es string, para numeros y fechas no te sirve y vas a tener que escribir codigo...busca en internet que hay miles de como hacerlo y no es mucho codigo.

saludos.
Sería algo así como un "IMPLEMENT COMPARABLE" en Java...
Pero.. has visto que en el explorador de Windows, cuando le ahces click en TIPO DE ARCHIVO, o TAMAÑO.. solo se ordenan... Entiendo que detras de eso hay codigo, pero, tengo que programar ese codigo??? no se hace de manera automatica??

Agrego:
Y vos me decis lo de SQL SERVER LITE, ese es el SQL SERVER de Microsoft, pero LITE... o me equivoco?? Yo te hablo de SQLite http://www.sqlite.org/

Mira:
http://www.sqlite.org/datatypes.html
y
http://www.sqlite.org/datatype3.html


Agrego2:
Y no he visto en ninguna web, que mejor manera hay para agregar items con sus "sub-datos". y es mas, si miras aqui: http://msdn.microsoft.com/es-es/library/wh9a3t2x%28VS.80%29.aspx lo hacen como yo te digo..
« Última modificación: 12 Octubre 2009, 05:12 am por Skeletron » En línea

seba123neo


Desconectado Desconectado

Mensajes: 3.621



Ver Perfil WWW
Re: Problema con ListView y DataBase
« Respuesta #7 en: 12 Octubre 2009, 05:51 am »

si en el explorador de windows se ordenan, pero fijate que se ordenan mal...te lo ordena como string. como el codigo que te puse que es lo basico que tenes que escribir para  que te ordene algo.

yo te hable siempre que tengo el SQL LITE...pero no me baje nada de esa pagina...yo me baje esto:

ADO.NET 2.0/3.5 Provider for SQLite

sirve para el 2005 y 2008 y te pone el administrador para crear tablas,bases etc...hacer consultas ..como si fuera el SQL Server verdadero y ahi en los tipos de datos no hay nada parecido a lo que me pasate en la pagina.

si el ejemplo ese de microsoft esta bien, pero lo que pasa es que hay varias formas de ahcer las cosas y simepre hay una que es mejor que la otra..esa que pasate esta bien pero no creo que es la mejor...sino espera que busco uno y te lo paso.
En línea

seba123neo


Desconectado Desconectado

Mensajes: 3.621



Ver Perfil WWW
Re: Problema con ListView y DataBase
« Respuesta #8 en: 12 Octubre 2009, 06:15 am »

aca esta el ejemplo lo acabo de probar recien:

Código
  1.        Dim vItem As ListViewItem
  2.        While dr.Read
  3.            vItem = New ListViewItem(dr("idestado").ToString)
  4.            vItem.SubItems.Add(dr("nombre"))
  5.            ListView1.Items.Add(vItem)
  6.        End While
  7.        vItem = Nothing

donde "dr" es el datareader...tenes que poner los nobmres de los campos...hay otro metodo llamado .AddRange que mete todo un array de una...pero bueno con eso basta.

« Última modificación: 12 Octubre 2009, 06:21 am por seba123neo » En línea

Skeletron


Desconectado Desconectado

Mensajes: 1.731


A long way to go


Ver Perfil WWW
Re: Problema con ListView y DataBase
« Respuesta #9 en: 12 Octubre 2009, 06:17 am »

Si podes encontrarme algun mejor metodo, mejor.. Yo tambien pensé que hacer 5 lineas para agregar 1 item completo era mucho.. pero bue.. no vi nada diferente..

En cuanto a lo que me preguntaste de como hago con los codigos, aca te paso los datos:

Así creo un DATABASE donde el usuario quiera:
        'Save Dialog Box
        Dim f As New SaveFileDialog
        f.Filter = "SQLite 3 (*.db3)|*.db3|All Files|"
        f.ShowDialog()
        'Create Database
        Dim SQLconnect As New SQLite.SQLiteConnection()
        'Database Doesn't Exist so Created at Path
        SQLconnect.ConnectionString = "Data Source=" & f.FileName & ";"
        SQLconnect.Open()
        SQLconnect.Close()

así creo una tabla a un archivo database que hay que seleccionar:
    Dim f As New OpenFileDialog
    f.Filter = "SQLite 3 (*.db3)|*.db3|All Files|*.*"
    If f.ShowDialog() = DialogResult.OK Then
        Dim SQLconnect As New SQLite.SQLiteConnection()
        Dim SQLcommand As SQLiteCommand
        SQLconnect.ConnectionString = "Data Source=" & f.FileName & ";"
        SQLconnect.Open()
        SQLcommand = SQLconnect.CreateCommand
        'SQL query to Create Table
        SQLcommand.CommandText = "CREATE TABLE foo(id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT, description TEXT, image BLOB);"
        SQLcommand.ExecuteNonQuery()
        SQLcommand.Dispose()
        SQLconnect.Close()
    End If


Aca estan las 3 opciones: Insert Update y Delete:
    Dim f As New OpenFileDialog
    f.Filter = "SQLite 3 (*.db3)|*.db3|All Files|*.*"
    If f.ShowDialog() = DialogResult.OK Then
        Dim SQLconnect As New SQLite.SQLiteConnection()
        Dim SQLcommand As SQLiteCommand
        SQLconnect.ConnectionString = "Data Source=" & f.FileName & ";"
        SQLconnect.Open()
        SQLcommand = SQLconnect.CreateCommand
        'Insert Record into Foo
        SQLcommand.CommandText = "INSERT INTO foo (title, description) VALUES ('This is a title', 'This is a Description')"
        'Update Last Created Record in Foo
        SQLcommand.CommandText = "UPDATE foo SET title = 'New Title', description = 'New Description' WHERE id = last_insert_rowid()"
        'Delete Last Created Record from Foo
        SQLcommand.CommandText = "DELETE FROM foo WHERE id = last_insert_rowid()"
        SQLcommand.ExecuteNonQuery()
        SQLcommand.Dispose()
        SQLconnect.Close()
    End If

Y aca la sentencia Select:
    Dim f As New OpenFileDialog
    f.Filter = "SQLite 3 (*.db3)|*.db3|All Files|*.*"
    If f.ShowDialog() = DialogResult.OK Then
        Dim SQLconnect As New SQLite.SQLiteConnection()
        Dim SQLcommand As SQLiteCommand
        SQLconnect.ConnectionString = "Data Source=" & f.FileName & ";"
        SQLconnect.Open()
        SQLcommand = SQLconnect.CreateCommand
        SQLcommand.CommandText = "SELECT * FROM foo"
        Dim SQLreader As SQLiteDataReader = SQLcommand.ExecuteReader()
        lst_records.Items.Clear()
        While SQLreader.Read()
            lst_records.Items.Add(String.Format("ID = {0}, Title = {1}, Description = {1}", SQLreader(0), SQLreader(1), SQLreader(2)))
            'Optionally use the variable names to identify columns
            'De lst_records.Items.Add(String.Format("ID = {0}, Title = {1}, Description = {1}", SQLreader("id"), SQLreader("title"), SQLreader("description")))
        End While
        SQLcommand.Dispose()
        SQLconnect.Close()
    End If


Como verás, a todo eso lo LAMERÉE hace un tiempo :D
Modifico todo lo de tomar un archivo desde un lugar de MI PC, y hago todo con unas variables globales que tengo en la aplicacion... (donde se guadan los datos del string donde esta el archivo database)
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema rellenando ListView
.NET (C#, VB.NET, ASP)
quiqueroal 2 3,401 Último mensaje 3 Mayo 2011, 22:15 pm
por quiqueroal
Problema con listview
Programación Visual Basic
hackertotal22 2 3,359 Último mensaje 13 Julio 2011, 10:25 am
por hackertotal22
(SOLUCIONADO) Problema con Listview
.NET (C#, VB.NET, ASP)
Eleкtro 3 2,796 Último mensaje 6 Agosto 2013, 20:53 pm
por Eleкtro
Extraño problema y conflicto con los ListView
Programación Visual Basic
RiasChan 1 2,206 Último mensaje 15 Junio 2019, 00:36 am
por Serapis
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines