Una ayudita...

Aquí puedes preguntar o compartir tus dudas y conocimientos acerca del programa
Hola a todos, estoy haciendo una práctica con AMS y SQLite y hay algo que no entiendo.

He creado una página sencilla con:

- dos botones xButton "Guardar" y "Nuevo"
- 2 input llamadas (input 1, input2)
- y en la parte inferior un Listbox.

Lo que pretendo es que se muestre en el Listbox los registros que guardo, pero me da un error de sistasis 30001 near ")" syntax error y no me aparece abajo el registro. No se que estoy haciendo mal y ando loco :hypno: , puede alguien ayudarme :sorry: .

Tengo AMS 8 con el plugin SQLite activado y este es el código que tengo puesto:



Acción On Startup


sDatabaseFile = _SourceFolder.. "\\Autoplay\\Docs\\Autos.db";
db = SQLite.Open(sDatabaseFile);
nLastError = Application.GetLastError()
if nLastError ~= SQLite.OK then
Dialog.Message("Error Apertura de DB", SQLite.GetLastErrorString());
end
SQLite.Query(db, "CREATE Table Ingreso_Autos(RecordID integer primery key, usuario text,contrasena text)");

bNewRecord = true





Evento On Preload de la página


if bNewRecord  then 
Input.SetText("Input1", "")
Input.SetText("Input2", "")

else

tIngreso_Autos = SQLite.QueryToTable(db, "Select * from Ingreso_Autos where RecordID="..nRecordID)

--Relacionar variables con los campos de la tabla

nRecordID = tIngreso_Autos.Data[1]["RecordID"];
sPlaca = tIngreso_Autos.Data[1]["Placa"];
sColor = tIngreso_Autos.Data[1]["Color"];

--establecer el texto de entrada si se ha escrito en ellos

Input.SetText("Input1", sPlaca);
Input.SetText("Input2", sColor);

end

----------------------------------------------------------------

-- Borrar el contenido de todos los elementos del ListBox

ListBox.DeleteItem("lst_Listado", -1);

-- tabla de consulta y almacenar todas las entradas en la tabla Ingreso_Autos

tIngreso_Autos = SQLite.QueryToTable(db,"SELECT * FROM Ingreso_Autos");

nLastError = Application.GetLastError();

if nLastError ~= SQLite.OK then

Dialog.Message("Error", SQLite.GetLastErrorString());

end

-- si no hay errores, continuar, de lo contrario no hacer nada

if nLastError == SQLite.OK then

--recorrer la tabla

for nRow = 1,tIngreso_Autos.Rows do

--obtener el título del registro actual

sItem = tIngreso_Autos.Data[nRow]["Placa"];

--añadir el elemento a la lista con el texto y los datos de Campo == Marca
--Usar el RecordID en los números de columna, para los campos mostrados

ListBox.AddItem("lst_Listado", tIngreso_Autos.Data[nRow]["Placa"],tIngreso_Autos.Data[nRow]["RecordID"]);

end

end






Evento On Click Boton

--relacionar variables con los objetos del formulario

sPlaca = Input.GetText("Input1");
sColor = Input.GetText("Input2");

--Si es primera vez que agregamos este registro realizara esta acción

if bNewRecord then

SQLite.Query(db,"insert into Ingreso_Autos values(NULL, '"..sPlaca.."', '"..sColor.."',)");

nLastError = Application.GetLastError();
end

if nLastError ~= SQLite.OK then

Dialog.Message("Error: " .. nLastError, SQLite.GetLastErrorString());

else -- si no
SQLite.Query(db,"insert or replace into Ingreso_Autos values('".. nRecordID.."', '"..sPlaca.."', '"..sColor.."')");

nLastError = Application.GetLastError();

if nLastError ~= SQLite.OK then

Dialog.Message("Error: " .. nLastError, SQLite.GetLastErrorString());
end
end
-- Luego de haber hecho cualquiera de las 4 condiciones hará un salto de hoja a la mis mahoja

Page.Jump("Page1")




Muchas gracias...

Haber así a simple vista no veo el error , si subes el apz te lo miro mas detenidamente ;)

También te recomiendo que mires ejemplos de de AMSFiles con bases de datos y sqlite 2 ;)

Gracias rafaxplayer ya lo he podido solucionar...

Saludos

Que tal solo veo un ligero "error" en tu codigo segun mi gusto y practicidad, la variable boleano bNewRecord NO es necesaria para ingresar nuevos datos a tu Base de Datos, solo te hace escribir mas codigo, te aconsejo que la elimines pues en realidad de nada sirve y hasta cierto punto es un "standar" erroneo y obsoleto, puedes ingresar los datos directamente sin utilizar ese "filtro" y puedes tener la seguridad de que tu DB seguira recibiendo los datos de igual manera.
Aqui te dejo este ejemplo básico para principiantes en SQLite:

HIDE: ON
Hidebb Message Hidden Description


Comparalo con tu codigo y veras que es mas sencillo de esta manera y si aun estas atiempo de corregir tu codigo te aconsejo que lo hagas, solo utiliza variables solidas y si es necesario hazlas locales para evitar conflictos.
De cualquier manera si tienes dudas ve al sitio oficial de SQLite y veras las diversas maneras del verdadero uso del SQLite, ya solo los adaptas segun lo permitido en el plugin que estas utilizando.

Saludos. ;)

no entiendo lo que dices metafunken , la variable supongo que es para verificar si se trata de actualizar un registro o insertar uno nuevo , entonces el query cambia , yo lo que si cambiaría es el insert or replace por un update.

Es sencillo mi buen Rafa, lo unico que hice es darle a vk12 una alternativa para ahorrarse cierto codigo, al menos yo no considero el filtro de la variable bNewRecord necesario para ingresar datos a la DB, o tu si?...

Por cierto, hice de a rapido el ejemplo y hay algunas incongruencias, incongruencias que ya se dara a la tarea vk12 de "pulir"...

Saludos ;)

Gracias
Muchas gracias Metafunken, la verdad que es mucho más claro, sencillo y fácil de comprender el código de la forma en la que está el ejemplo :yes: .... Ahora estoy tratando de averiguar como podría hacer lo siguiente:

Haciendo alusiones a tu ejemplo, cuando seleccionas del Listbox un item y le das al botón get, te completa los inputs Auto y Color con los datos que has seleccionado en el listbox, y si están en blanco o no has seleccionado ninguno te avisa con un Dialog. Hasta ahí todo correcto.

Pero como se haría :SOS: , si quiero completar haciendo doble click sobre un item del Listbox, dos inputs que están situados en otra página distinta "Page2", que es exáctamente iguala a la "Pagina1" pero sin los botones???...

He estado haciendo pruebas y mirando otros ejemplos y plantillas pero no me sale.... :hypno: aunque soy muy cabezón y daré con ello.... ;)

Adjunto dejo el APZ con la modificación que os comento por si le podéis hechar un vistazo...

https://mega.co.nz/#!tltG0aiK!Un7ocX1-E ... adoU_cMC1w


Las acciones que tiene, aunque sean muy básicas para los que tenéis experiencia, a los que no tenemos nos enriquece bastante..

Saludos y gracias a los dos :friends:

vk12 escribió:Pero como se haría :SOS: , si quiero completar haciendo doble click sobre un item del Listbox, dos inputs que están situados en otra página distinta "Page2", que es exáctamente iguala a la "Pagina1" pero sin los botones???...
No hombre, eso es demasiado sencillo, ahi te tienes que apoyar de Global Functions para lograr lo que prentendes, en este caso las Funciones Globales te sirven como "puente" entre las paginas, los dialogos y los "elementos" (ListBox, Input, ComboBox bla bla bla) de AMS, tambien te puedes apoyar de ficheros externos para lograrlo, es cuestion de darle a la imaginacion ;)

Dame chance unas horas (voy de salida) y mas tarde y con mucho gusto te tengo un ejemplillo con tus dudas resueltas.

Saludos ;)

Ahi tienes, de a rapido para que lo mejores:

HIDE: ON
Hidebb Message Hidden Description


Esta poco explicado, trata de explotar tu potencial, si sigues teniendo mas dudas ahi 'ta Rafa, un servidor y quien o quienes mas quieran participar...

Saludos ;)

Muchas gracias por el ejemplo Metafunken :yes: , es una muy buena base de ejemplos de las principales funciones de SQLite......seguiré avanzando en el tema y leeré más tutoriales para ir comprendiendo mejor el funcionamiento. :pc:

Gracias de nuevo.

:yes: .

[MODO ADMIN ON]

TRATAD DE RESPETAR LAS REGLAS Y USAD TITULOS DE POST DESCRIPTIVOS

AQUI OS LAS DEJO PARA QUE NO SE OLVIDEN

http://amsspecialist.com/viewtopic.php?f=2&t=1049

gracias

Interesante ... :yes:
_____ :pc:
Gracias observando

Muy buen aporte, gracias meta y rafa.
Observando