ayuda con una consulta en sqlite

Como indica el nombre del foro en el moveremos todos los temas de dudas que se resuelvan con exito .
Este foro no tendra permisos de escritura.
bueno otra ves aqui con este problema que se me presento resulta que hago una consulta en sqlite , desde un input recojo el numero a buscar en la base de datos por ejemplo el RecorID si me hace la consulta bien pero si el el numero esta en la base de datos el detalle esta en que si el numero a buscar no se encuentra almacenado en la columna recorID no hace nada y lo que pretendo es que si ese numero no esta en la base de datos me muestre un mensaje con un dialog (Error el numero de registro a buscar no se encuentra en la base de datos) el codigo que tengo es este
RecordID = Input.GetText("Input1");
for row in db:nrows("SELECT * FROM Cafeteria WHERE Producto ="..RecordID) do         
   
   if row.Producto ~= "" then
 --Aqui pongo el codigo donde me muestra el resultado en un grid si el registro se encuentra en la base de datos; Esto si lo Hace--
   
  else 
  -- Si el registro a buscar no se encuentra en la base de datos me mande este error Esto es lo que no podido hacer--
	 Dialog.Message("Error", "El numero de registro a buscar no se encuentra en la base de datos", MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);
   end
 
 end
prueva esto , aunque veo que las variable recordid debe ser un text y no un indice de la bd.
RecordID = Input.GetText("Input1");
for row in db:nrows("SELECT * FROM Cafeteria WHERE Producto ="..RecordID) do         
   
   if row.Producto ~= nil then
 --Aqui pongo el codigo donde me muestra el resultado en un grid si el registro se encuentra en la base de datos; Esto si lo Hace--
   
  else 
  -- Si el registro a buscar no se encuentra en la base de datos me mande este error Esto es lo que no podido hacer--
         Dialog.Message("Error", "El numero de registro a buscar no se encuentra en la base de datos", MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);
   end
 
 end
rafaxplayer escribió:prueva esto , aunque veo que las variable recordid debe ser un text y no un indice de la bd.
RecordID = Input.GetText("Input1");
for row in db:nrows("SELECT * FROM Cafeteria WHERE Producto ="..RecordID) do         
   
   if row.Producto ~= nil then
 --Aqui pongo el codigo donde me muestra el resultado en un grid si el registro se encuentra en la base de datos; Esto si lo Hace--
   
  else 
  -- Si el registro a buscar no se encuentra en la base de datos me mande este error Esto es lo que no podido hacer--
         Dialog.Message("Error", "El numero de registro a buscar no se encuentra en la base de datos", MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);
   end
 
 end
Hola Rafaxplayer gracias por ayudarme ya havia usado el
 if row.Producto ~= nil then
y tampoco me funciono jejeje No habra otra manera de hacerlo
Esta mal estructurado esto para empezar RecordID es un numero deberías hacer conversión y producto es un text seguramente y tu llamas a consulta de columna producto text con un numero de la columna RecordID , no se si subieras el apz lo miraríamos mejor. 
lo mas correcto es ver el apz así podemos verlo mejor y darte  una mano.,

por que debes de convertir a numero los números y a texto los textos.

tostring, string.tonumber
Hola que Tal tarde en subir al apz puesto que tenia un relajo ya que lo migre a sqlite 3 y bueno la pagina Menu Principal solo funciona el de bebidas que te manda a la pagina bebidas logicamente edad jejeje y en la pagina bebidas lo que hace es que el usuario selecciona el producto y le da a ordenar y le va sacando la cuenta conforme vaya ordenando producto y si le da terminar guarda lo que ordeno en la base de datos.

bueno en la pagina bebidas puse un texto que dice buscar ticket le dan clic ahi y los manda a un DialoEx donde tengo el problema que si buscas un numero de ticket si esta en la base de datos muestra en un grid las ordenes que se hicieron con ese ticket y si no esta ese ticket no hace nada y ahi es donde quiero poner un mensaje de dialog diciendo que no se encuentra en la base de datos.

Bueno dejo el Link para descargarlo

https://rapidshare.com/files/3633928188/Cafeteria.apz
Bueno yo he echo esto a si a primeras porque el filtro row.Numticket no funciona simplemente porque si la consulta no encuentra coincidencia no sigue el codigo y da igual si pones elses o lo que sea , otra cosa es que el valor fuera "NULL" entonces si sirve el if row.NumTicket ~= nil then pero si es otro numero que no coincide , nada.
La mejor solución adaptada a tu codigo que he encontrado en 5 min es esta :

Botón Buscar:
Grid.DeleteNonFixedRows("Grid1", true);
Label.SetText("Total","");
numTicket = Input.GetText("Input1");
if numTicket == "" then
	Dialog.Message("Error", "Escriba el Codigo del Ticket a Mostrar", MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);
else
	invalid = ValidateInputs (numTicket,NonNumeralChars);
	if invalid then
		Dialog.Message("Notice", "Ha introducido un carácter no válido. introduzca sólo números", MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);
	else
	Debug.ShowWindow(true);
	Debug.Clear();
	for row in db:nrows("SELECT * FROM Ventas WHERE NumTicket ="..numTicket) do      

		
    if row.NumTicket ~= nil then  
       
        nNombre = row.VentaPruducto
        nPrecio = row.VentaPrecio
        nCantidad = row.Cantidad          
        Grid.InsertRow("Grid1", -1, true);
        Grid.SetRedraw("Grid1", true, true);
    	if nCantidad > 1 then
			nTotal = nPrecio*nCantidad;
    	else
			nTotal = nPrecio;
		end
		local nRows = Grid.GetRowCount("Grid1")-1;
		tTableNewRow = {nNombre,nPrecio,nCantidad,nTotal};
		

		for i=1,4,1 do 
			Grid.SetCellText("Grid1", nRows, i, tTableNewRow[i], true);
		end
	    Grid.SetColumnWidth("Grid1", 1,20, true);
	    Grid.SetColumnWidth("Grid1", 2,60, true);
	    Grid.SetColumnWidth("Grid1", 3,80, true);
	    Grid.SetColumnWidth("Grid1", 4,50, true);
	    enumerate()
	
			local nRowsCount = Grid.GetRowCount("Grid1")-1;
			if nRowsCount > 0 then
			   nTotal =1
			   for count=1,nRowsCount do
				   nTotal = nTotal + tonumber(Grid.GetCellText("Grid1",count,4));
			       Label.SetText("Total",nTotal - 1);
			
			   end
			end
 	end	  
	end 
	if Grid.GetRowCount("Grid1")< 2 then
	       Dialog.Message("Error", "El numero de registro a buscar no se encuentra en la base de datos", MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);	  
	end 
end
end
Otra cosa... el input de num ticket no hace falta que hagas esa función de validate() usa editar mascara del input , con el caracter # solo admite números.

Por cierto te esta quedando muy majo el proyecto.
rafaxplayer escribió:Bueno yo he echo esto a si a primeras porque el filtro row.Numticket no funciona simplemente porque si la consulta no encuentra coincidencia no sigue el codigo y da igual si pones elses o lo que sea , otra cosa es que el valor fuera "NULL" entonces si sirve el if row.NumTicket ~= nil then pero si es otro numero que no coincide , nada.
La mejor solución adaptada a tu codigo que he encontrado en 5 min es esta :

Botón Buscar:
Grid.DeleteNonFixedRows("Grid1", true);
Label.SetText("Total","");
numTicket = Input.GetText("Input1");
if numTicket == "" then
	Dialog.Message("Error", "Escriba el Codigo del Ticket a Mostrar", MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);
else
	invalid = ValidateInputs (numTicket,NonNumeralChars);
	if invalid then
		Dialog.Message("Notice", "Ha introducido un carácter no válido. introduzca sólo números", MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);
	else
	Debug.ShowWindow(true);
	Debug.Clear();
	for row in db:nrows("SELECT * FROM Ventas WHERE NumTicket ="..numTicket) do      

		
    if row.NumTicket ~= nil then  
       
        nNombre = row.VentaPruducto
        nPrecio = row.VentaPrecio
        nCantidad = row.Cantidad          
        Grid.InsertRow("Grid1", -1, true);
        Grid.SetRedraw("Grid1", true, true);
    	if nCantidad > 1 then
			nTotal = nPrecio*nCantidad;
    	else
			nTotal = nPrecio;
		end
		local nRows = Grid.GetRowCount("Grid1")-1;
		tTableNewRow = {nNombre,nPrecio,nCantidad,nTotal};
		

		for i=1,4,1 do 
			Grid.SetCellText("Grid1", nRows, i, tTableNewRow[i], true);
		end
	    Grid.SetColumnWidth("Grid1", 1,20, true);
	    Grid.SetColumnWidth("Grid1", 2,60, true);
	    Grid.SetColumnWidth("Grid1", 3,80, true);
	    Grid.SetColumnWidth("Grid1", 4,50, true);
	    enumerate()
	
			local nRowsCount = Grid.GetRowCount("Grid1")-1;
			if nRowsCount > 0 then
			   nTotal =1
			   for count=1,nRowsCount do
				   nTotal = nTotal + tonumber(Grid.GetCellText("Grid1",count,4));
			       Label.SetText("Total",nTotal - 1);
			
			   end
			end
 	end	  
	end 
	if Grid.GetRowCount("Grid1")< 2 then
	       Dialog.Message("Error", "El numero de registro a buscar no se encuentra en la base de datos", MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);	  
	end 
end
end
Otra cosa... el input de num ticket no hace falta que hagas esa función de validate() usa editar mascara del input , con el caracter # solo admite números.

Por cierto te esta quedando muy majo el proyecto.
Hola que tal Rafaxplayer gracias por ayudarme me sirvio de mucho nunca se me ocurrio hacer una comparacion con el mismo grid me aferre a a hacerlo desde el mismo filtro row.Numticket jejeje a y tambien gracias por la recomendacion del input no me la savia lo de editar mascara ahora mismo lo cambiare y bueno damos por resuelto Este Tema .

Muchisiiiimas Gracias Rafaxplayer