Problemilla con Sqlite !!

Iniciado por TrashAmbishion, 19 Diciembre 2012, 17:23 PM

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

TrashAmbishion

Hola chicos tengo una aplicación donde estoy sacando informacion de una BD Sqlite y la estoy mostrando en una DataGrid sin problemas, la cuestion es que necesito una ves que termine mis modificaciones salvar los datos y no encuentro como, estuve mirando un ejemplo pero me da un error.. aqui les dejo el link... gracias cualquier sugerencia...

http://sqlite.phxsoftware.com/forums/p/2291/9199.aspx

Salu2

Novlucker

¿En mi caso y para empezar, prefiero utilizar SQL Server CE en lugar de SQLite, pero fuera de eso, puedes publicar el código que tienes hasta el momento?

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

TrashAmbishion

#2
Bueno ando mirando el SQL SERVER CE

Mientras este es el código que uso para cargar la información al DataGrid

Código (vbnet) [Seleccionar]


       Public Function RecogerConsulta(ByVal mySql As String) As DataTable
       
       Dim tmpTable As New DataTable

        Try

               cnnl = New SQLiteConnection("Data Source=Clientes.s3db")

               cnnl.Open()

               Ada = New SQLiteDataAdapter(mySql, cnnl)

               Ada.Fill(tmpTable)

               cnnl.Close()

        Catch ex As Exception

               Msgbox(ex.Message, "Error")

        End Try

        Return tmpTable

        End Function

        Private Sub Form1_Load

               datagrid1.DataSource = bd.RecogerConsulta("SELECT * FROM Usuario")

        End Sub



Ahora el codigo que da un error de Tipos es el siguiente.

Código (vbnet) [Seleccionar]


        Dim SQLconnect As New System.Data.SQLite.SQLiteConnection
        Dim dataSet = New DataSet()

        SQLconnect.ConnectionString = "Data Source=Clientes.s3db"

        dataSet = dg1.DataSource

        SQLconnect.Open()

        Dim dataAdapter = New SQLiteDataAdapter("SELECT * FROM Usuario", SQLconnect)

        Dim CB As SQLiteCommandBuilder = New SQLiteCommandBuilder(dataAdapter)

        dataAdapter.UpdateCommand = CB.GetUpdateCommand()
        dataAdapter.InsertCommand = CB.GetInsertCommand()
        dataAdapter.DeleteCommand = CB.GetDeleteCommand()

        [b]dataAdapter.Update(dataSet, "Usuario")[/b]



bueno amigos help

Novlucker

#3
El tag Geshi para vb.net es [code=vbnet][/code] :P

En el segundo código, ¿el update no recibe solamente un parámetro?

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

TrashAmbishion

En la MSDN esta este ejemplo que trabaja con el DataAdapter como tu dices pero obtengo una excepcion y supongo que sea cuando hago

Código (vb.net) [Seleccionar]

    'No se pq esto me parece que esta mal
    dataset = dg1.datasource


Y este es el ejemplo de la MSDN

Código (vb.net) [Seleccionar]


Public Function CreateCmdsAndUpdate(ByVal dataSet As DataSet, _
ByVal connectionString As String, ByVal queryString As String) As DataSet

    Using connection As New OleDbConnection(connectionString)
        Dim adapter As New OleDbDataAdapter()
        adapter.SelectCommand = New OleDbCommand(queryString, connection)
        Dim builder As OleDbCommandBuilder = New OleDbCommandBuilder(adapter)

        connection.Open()

        Dim customers As DataSet = New DataSet
        adapter.Fill(customers)

        ' Code to modify data in DataSet here

        'Supongo que aqui es donde va la linea que creo esta mal
        'que tiene los cambios en memoria. Pero obtengo la excepcion que tambien
        'la explican ahi mismo en la pagina

         'DBConcurrencyException

        dataset = dg1.datasource


        adapter.Update(customers)
        Return customers
    End Using
End Function



La web

http://msdn.microsoft.com/es-es/library/z1z2bkx2%28v=vs.80%29.aspx?cs-save-lang=1&cs-lang=vb#code-snippet-4

Novlucker

Acabo de probar en C# y no tengo problemas :-\
Código (csharp) [Seleccionar]
using System;
using System.Data;
using System.Data.SQLite;
using System.Windows.Forms;

namespace SqliteSharp
{
    public partial class Form1 : Form
    {
        SQLiteDataAdapter adapter;
        DataTable table;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            SQLiteConnection connection = new SQLiteConnection("Data Source=SqliteSharp.sqlite");
            adapter = new SQLiteDataAdapter("select * from Usuarios", connection);
            SQLiteCommandBuilder command = new SQLiteCommandBuilder(adapter);

            table = new DataTable();

            connection.Open();
            adapter.Fill(table);

            dataGridView1.DataSource = table;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            adapter.Update(table);
        }
    }
}


... como verás solamente es un form en el cual en el Load cargo una grilla, y luego tiene un botón que guarda los cambios en la base de datos.

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

TrashAmbishion

#6
Lo que me queda por soltar el VB .NET y pasarme para Csharp es nada..

Lo hice tal cual y mira lo que dice, ando Googleando a ver que sale


Dynamic SQL generation for the UpdateCommand is not supported agains a SelectCommand that does nor return any key column information



Y encontre que tengo que ponerle una llave primaria, echo esto ahora me da otro error:


Concurrency violation: the UpdateCommand affected 0 of the expected 1 records


O sea que no hizo nada sigo Googleando para ver

Novlucker

¿Tu tabla tiene una PK? Con eso debería de ser suficiente :D

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

Novlucker

Cita de: TrashAmbishion en 21 Diciembre 2012, 17:01 PM
Y encontre que tengo que ponerle una llave primaria, echo esto ahora me da otro error:


Concurrency violation: the UpdateCommand affected 0 of the expected 1 records

Tu problema ahora es que tienes valores no nullables a los cuales no les estas asignando nada :P
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

TrashAmbishion

Cita de: Novlucker en 21 Diciembre 2012, 17:24 PM
Tu problema ahora es que tienes valores no nullables a los cuales no les estas asignando nada :P

Increible bueno pues si y no....

Lo que sucede es que tengo un campo de tipo Fecha que al parecer no le estoy pasando el formato de fecha correcto y me esta dando esa violacion, pq todos los tengo puesto como NULL jajajajaja, en cuanto cambie el campo ese por VARCHAR entro que jodia, un millon de gracias sos un barbaro... Dios te bendiga que tengas mucha dicha bro, salu2

Nos vemos orita con mas problemas jajajajaja