Hola a todos,
Estoy haciendo un proyecto en VB.NET para un Dispostivo Mobil ( Captor de Datos Datalogic Skorpio) que tiene como S.O Windows CE, tengo una base datos SQLITE que se encuentra en el mismo captor, necesito saber cómo me puedo conectar con esta base de datos, la idea es poder hacer consultas a esta base, e buscado por todos lados pero no encuentro nada por favor me pueden ayudar, es urgente.
http://www.connectionstrings.com/sqlite
Primero que nada necesitas http://sourceforge.net/projects/sqlite-dotnet2/ que es el conector nativo .net despues pasate por aqui http://www.sgoliver.net/blog/?p=48 y con eso la haces suerte.
Saludos!!!!!!!!
IT recuerda que el compact framework es algo limitado, por lo que hay que revisar si esa lib anda bien. Obviamente es mucho mejor que darle odbc pero igual tiene la dos opciones. :) Además de que es algo que viene listo, en cambio ese proyecto no se sabe que tan estable sea o si está optimizado para mobile.
Un saludo y está bueno el proyectico ese!
[D4N93R], IT,
Muchachos mil gracias por sus respuestas, el ejemplo que sale en uno de los link que me dajaron eta en C# asi que intente modificar el codigo para Vb pero me da el siguiente error:
"SQLite error
no such table: CMB_USUARIO"
, mi codigo es este:
Imports System
Imports System.Data
Imports System.Data.SQLite
Imports System.Data.SQLite.SQLiteConnection
Imports System.Data.SQLite.SQLiteCommand
Imports System.Data.SQLite.SQLiteTransaction
Imports System.Data.SQLite.SQLiteDataReader
Public Class Form1
Public ruta As String
Public consulta As String
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If USUARIO.Text = "" Or PASSWORD.Text = "" Then
MessageBox.Show("Debe Ingresar Usuario y Contraseña")
Else
Dim cnn As New SQLiteConnection("Data Source=CLAS_MOBILE.db;Version=3;")
Dim Ada As New SQLiteDataAdapter()
Dim Sqlstr As New SQLiteCommand("SELECT USU_USUARIO,USU_ZONA FROM CMB_USUARIO WHERE USU_USUARIO=" & "'" & USUARIO.Text & "'", cnn)
cnn.Open()
Dim dr As SQLiteDataReader = Sqlstr.ExecuteReader(CommandBehavior.CloseConnection)
While dr.Read
Dim value As Object = dr.Item("USU_ZONA")
If value IsNot DBNull.Value Then TextBox1.Text = CStr(value)
End While
dr.Close()
End If
End Sub
End Class
Vale decir que el codigo lo ejecuto directo en el Captor, la base la tengo en mi pc en la carpeta de donde vb.net deja los proyectos, dentro de ella hay una carpeta con el nobre de mi proyecto y dentro de esta una que se llama debug en esta ultima es donde tengo mi base de datos.
En cuanto estabilidad pues yo lo uso siempre en las configuraciones de mis programas para Windows Form, pero no me bajo el instalador si no
http://sourceforge.net/projects/sqlite-dotnet2/files/SQLite%20for%20ADO.NET%202.0/1.0.66.0/SQLite-1.0.66.0-binaries.zip/download
la pagina official del proyecto es:
http://sqlite.phxsoftware.com/
Nota: recien ahora me doy cuenta que en http://www.connectionstrings.com/sqlite hablan de http://sqlite.phxsoftware.com/ entonces son lo mismo jaja
Yo Borraria
Imports System.Data.SQLite.SQLiteConnection
Imports System.Data.SQLite.SQLiteCommand
Imports System.Data.SQLite.SQLiteTransaction
Imports System.Data.SQLite.SQLiteDataReader
No es necesario o por lo menos yo no lo pongo.
En cuanto al error o no te conectaste a la base de datos correctame o la tabla simplemente no existe!!!!!!!! si puedes subir tu base de datos pues te podria ayudar!!!!!!!!
y si no es mucho pedir tu proyecto para poder ayudarte mas rapido ;D
Y Por utlimo en:
Data Source=CLAS_MOBILE.db
Asumes que la base de datos esta en el mismo lugar que el ejecutable a lo mejor no encuentra la base de datos.
Vale!!! IT
en este ftp esta mi proyecto y mi base, ojala puedas ayudarme!!
ftp://200....
en envie un mp con los datos
usuario ftp: xxx
pass ftp: xxxx
desde ya muchas gracias....
"SQLite error no such table: CMB_USUARIO" acabo de probar las fuentes que me mandaste y eh llegado a la conclusión que sencillamente la base de datos no se copia al emulador o en tu caso al dispositivo. Para ello use "File.Exists("CLAS_MOBILE.db")" y siempre me decia que no existe la base de datos
If (File.Exists("CLAS_MOBILE.db")) Then
consulta = String.Format("SELECT USU_USUARIO,USU_ZONA FROM CMB_USUARIO WHERE USU_USUARIO='{0}'", USUARIO.Text)
Dim Ada As New SQLiteDataAdapter()
Dim Sqlstr As New SQLiteCommand(consulta, cnn)
Dim dr As SQLiteDataReader = Sqlstr.ExecuteReader(CommandBehavior.CloseConnection)
While dr.Read
Dim value As Object = dr.Item("USU_ZONA")
If value IsNot DBNull.Value Then TextBox1.Text = CStr(value)
End While
dr.Close()
Else
MessageBox.Show("No existe base de datos", "Error")
End If
Solución:
1° Método que no entendí porque me dio flojera :
visita http://social.msdn.microsoft.com/Forums/es/netfxcompactes/thread/265e4adb-ba0c-440a-808a-f63590ada195 y has lo que hay dicen para poder copiar archivos(tu base de datos entre otras cosas) al emulador o copia directamente al dispositivo en el que estás trabajando y si es posible explícame.
2° Método que yo haría si fuera el caso:
Pues consiste en crear la base de datos con código, para ello has de tomar en cuenta que si al "SQLiteConnection" le enviamos como parámetro "Data Source=CLAS_MOBILE.db" y ejecutamos el método Open() pues no genera ningún error así "CLAS_MOBILE.db" no exista, y tranquilamente ejecutas un CREATE TABLE:
Private Sub CrearTablas(ByVal Cnn As SQLiteConnection)
Using _Cmd As SQLiteCommand = Cnn.CreateCommand
_Cmd.CommandText = "CREATE TABLE CMB_USUARIO (USU_USUARIO VARCHAR (8) NOT NULL,USU_PASS VARCHAR (8) NOT NULL,USU_ZONA VARCHAR (25) NOT NULL)"
_Cmd.ExecuteNonQuery()
_Cmd.CommandText = "INSERT INTO CMB_USUARIO VALUES('usu01','123456','peru')"
_Cmd.ExecuteNonQuery()
End Using
End Sub
despues podrias colocar en el evento load del form lo siguiente:
cnn = New SQLiteConnection("Data Source=CLAS_MOBILE.db;Version=3;")
cnn.Open()
Try
If (Not File.Exists("CLAS_MOBILE.db")) Then
CrearTablas(cnn)
End If
Catch ex As Exception
MessageBox.Show(ex.Message, "Error")
End Try
aquí todo el code:
Imports System
Imports System.Data
Imports System.IO
Imports System.Data.SQLite
Public Class Form1
Public ruta As String
Dim cnn As New SQLiteConnection
Public consulta As String
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
cnn = New SQLiteConnection("Data Source=CLAS_MOBILE.db;Version=3;")
cnn.Open()
Try
If (Not File.Exists("CLAS_MOBILE.db")) Then
CrearTablas(cnn)
End If
Catch ex As Exception
MessageBox.Show(ex.Message, "Error")
End Try
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If USUARIO.Text = "" Or PASSWORD.Text = "" Then
MessageBox.Show("Debe Ingresar Usuario y Contraseña")
Else
Try
If (File.Exists("CLAS_MOBILE.db")) Then
consulta = String.Format("SELECT USU_USUARIO,USU_ZONA FROM CMB_USUARIO WHERE USU_USUARIO='{0}'", USUARIO.Text)
Dim Ada As New SQLiteDataAdapter()
Dim Sqlstr As New SQLiteCommand(consulta, cnn)
Dim dr As SQLiteDataReader = Sqlstr.ExecuteReader(CommandBehavior.CloseConnection)
While dr.Read
Dim value As Object = dr.Item("USU_ZONA")
If value IsNot DBNull.Value Then TextBox1.Text = CStr(value)
End While
dr.Close()
Else
MessageBox.Show("No existe base de datos", "Error")
End If
Catch ex As Exception
MessageBox.Show(ex.Message, "Error")
End Try
End If
End Sub
Private Sub CrearTablas(ByVal Cnn As SQLiteConnection)
Using _Cmd As SQLiteCommand = Cnn.CreateCommand
_Cmd.CommandText = "CREATE TABLE CMB_USUARIO (USU_USUARIO VARCHAR (8) NOT NULL,USU_PASS VARCHAR (8) NOT NULL,USU_ZONA VARCHAR (25) NOT NULL)"
_Cmd.ExecuteNonQuery()
_Cmd.CommandText = "INSERT INTO CMB_USUARIO VALUES('usu01','123456','peru')"
_Cmd.ExecuteNonQuery()
End Using
End Sub
End Class
Nota: Yo usaria un Select Count para comprobar usuario y un ExecuteScalar para recoger el valor devuelto si es cero el usuario no existe y si es 1 pues si.
Saludos y suerte!!!!!!!!!
IT gracias maestro!!!! ;-) ;-) ;-) ;-) ;-) ;-) te pasaste, grande!!!
funciono a la perfecion,,
oye otra consulta, la base de datos se crea en una carpeta del captor que seria como el disco C en un pc, el problema es que cuando a los captores se les agota la bateria se borra todo lo que esta en esta carpeta, lo unico que queda es lo que esta en una carpeta llamada BACKUP dentro del captor, por lo que quiero dejar la base de datos dentro de esta carpeta, intente hacerlo a si que copie la base dentro de esa carpeta y deje el codigo del programa de la siguiente manera, pero me me tomo me dice que la base no existe!!...
codigo:
cnn = New SQLiteConnection("Data Source=\BACKUP\BD\CLAS_MOBILE.db;Version=3;")
En File.Exists() debes pasarle la ruta de la base de datos talves es ese tu problema
;D ;D ;D ;D ;D eso era, Gracias nuevamente!!!