Spanish No me inserta un nuevo registro el SQL

Espinosa4

Active Member
Licensed User
Longtime User
Hola a todos,

Tengo un problema al intentar añadir un registro a una tabla.
Este es el código:


For i = 0 To Cursor2.RowCount - 1
Cursor2.Position = i
If Cursor2.GetString("sDia") = EdtFecha.Text Then
Existe = True
Msgbox("Ya existe un servicio en la base de datos para ese día (" & Cursor2.GetString("sDia") & ")","Atención")
Exit
End If
Next
If Not(Existe) Then
SQL2.BeginTr
ansaction
Try
SQL2.ExecNonQuery("INSERT INTO Horas VALUES('" & EdtFecha.Text & "','" & EditText1.Text.ToUpperCase & "','" & LblHoras.Text & "','" & LblNocturnas.Text & "','" & LblHoras.Text & "')")
SQL2.TransactionSuccessful
Catch
Log(LastException.Message) 'no changes will be made
End Try
SQL2.EndTransaction
VerDiasTrabajados.Refrescar = True
Activity.Finish
End If


En el emulador de Android funciona. Añade el registro pero cuando lo ejecuto en el móvil no consigo que añada ningún registro.

¿Sabéis lo que me puede estar sucediendo?

Saludos
 

Espinosa4

Active Member
Licensed User
Longtime User
Hola vampirbcn
en el Activity_create del modulo principal:

Sub Activity_Create(FirstTime As Boolean)
'Do not forget to load the layout file created with the visual designer. For example:
'Activity.LoadLayout("Layout1")
Activity.LoadLayout("main")
If File.Exists(File.DirInternal,"bd.sql") = False Then
File.Copy(File.DirAssets,"bd.sql",File.DirInternal,"bd.sql")
End If
End Sub


Y en el activity donde intento añadir un registro:

Sub Activity_Create(FirstTime As Boolean)
'Do not forget to load the layout file created with the visual designer. For example:
'Activity.LoadLayout("Layout1")
Activity.LoadLayout("VerDiasTrabajados")
SQuery = "SELECT * FROM Horas"
If SQL1.IsInitialized = False Then
SQL1.Initialize(File.DirInternal, "bd.sql", False)
End If
Refrescar = False
DBload
End Sub
 

vampirbcn

Active Member
Licensed User
Longtime User
Pues la verdad es que no se ve nada raro en el codigo, realizas todos los pasos importantes:

No utilizas el dirassets
Copias la base de datos en el dirinternal
Inicializas la base de datos
La sintaxis de la sentencia SQL parece correcta

Yo solo hecho de menos un Close de la base de datos, pero como no se ve todo el código supongo que ya está

Todo parece correcto????
 

Espinosa4

Active Member
Licensed User
Longtime User
Gracias por tus respuestas.
Investigaré a ver que puede ser. Es raro. En el emulador utilizo la versión de Android 2.3.3 y todo ok. Mi móvil versión Android 4.1.2.

Un saludo y un millón de gracias por tu ayuda!
 

JCO

Active Member
Licensed User
Longtime User
Hola,

me parece que el problema está en esta línea:

B4X:
SQL2.ExecNonQuery("INSERT INTO Horas VALUES('" & EdtFecha.Text & "','" & EditText1.Text.ToUpperCase & "','" & LblHoras.Text & "','" & LblNocturnas.Text & "','" & LblHoras.Text & "')")

No pones los nombres de los campos en los que hay que insertar los valores. entonces, dependiendo del orden de éstos (los campos) en la db, te va a funcionar o no.

Lo mejor (yo diría incluso lo obligatorio) es poner siempre los nombres de los campos (en el mismo orden que los valores después).
Por ejemplo:

B4X:
SQL2.ExecNonQuery("INSERT INTO Horas (campo_fecha, campo_2, campo_horas, campo_nocturnas, campo_otrashoras) VALUES('" & EdtFecha.Text & "','" & EditText1.Text.ToUpperCase & "','" & LblHoras.Text & "','" & LblNocturnas.Text & "','" & LblHoras.Text & "')")

Saludos,

Julio
 

Espinosa4

Active Member
Licensed User
Longtime User
Gracias Julio por tu respuesta.
Esta noche lo pruebo y os cuento.

Saludos
 

Espinosa4

Active Member
Licensed User
Longtime User
Hola,

Ya funciona! Las dos formas de código funcionan correctamente ahora. Parece que en el móvil la base de datos / tabla era distinta, es decir, que en algún momento hice un cambio en la tabla que no la actualicé en el móvil debido a la parte del código en la que dice que si existe que no se copie. Entiendo también que en el emulador de Android si que estaba la tabla actualizada.

Está muy bien escribir los nombres de los campos y luego los valores porque así seguro que tienes menos errores.

Gracias a todos!!
Saludos
 
Top