Borrar registros en la bd

Aquí puedes preguntar o compartir tus dudas y conocimientos acerca del programa
Buenas de nuevo a todos,

Estoy haciendo un programilla para la empresa para almacenar movimientos de unos productos que no se venden sino que se prestan.

El tema es que, he puesto un botón para eliminar entradas de la bd y me encuentro con un problema.
Este es el código del botón:
sdelete = Dialog.Message("Eliminar Registro","Borrar registro de la base de datos?",MB_YESNO,MB_ICONINFORMATION,MB_DEFBUTTON1);
  
tSelected = ListBox.GetSelected("Lista")
   if tSelected then
    nSelected = tSelected[1]
  nRecordID = String.ToNumber(ListBox.GetItemData("Lista",tSelected[1]));
 
 SQLite.Query(db,"DELETE FROM Info WHERE RecordID="..nRecordID);
    nLastError = Application.GetLastError();
  if nLastError ~= SQLite.OK then
    Dialog.Message("Error:"..nLastError, SQLite.GetLastErrorString());
   end
  end
Imaginad que tengo 3 entradas:
1
2
3

Y borro la entrada 2. Me quedan:
1
3

Pero en la ListBox, la fila 3 que se corresponde con la RecordID 3, pasa a ser la fila 2.
Esto me crea problemas cuando cierro el programa y vuelvo a entrar.
Creo que el tema esta ahi, que se me "deshace" el binomio RecordID-Número de Fila de la ListBox y ya no me coinciden.

A ver si alguien me ayuda y me explica que es lo que hago mal.

Muchas gracias de antemano.
Buenas amigo, ya llevas un tiempo en el foro pero como creo que aun no habías puesto código LUA no sabes que para hacerlo tienes que usar un botón que se llama LUA que usa estos comandos:

Código: Seleccionar todo

-- Aquí dentro el código!!!
Ya te he modificado yo el post pero para la próxima vez que quieras añadir codigo LUA a un post ya lo sabes.. :friends:

Despues me he fijado que tu codigo tiene algunos errores de orden simples y que esta super fatal tabulada... esto ultimo mucha gente piensa que es una tontería pero dime tu que ves mejor esto: (tabulado!)
sdelete = Dialog.Message("Eliminar Registro","Borrar registro de la base de datos?",MB_YESNO,MB_ICONINFORMATION,MB_DEFBUTTON1);

tSelected = ListBox.GetSelected("Lista")
if tSelected then
	nSelected = tSelected[1]
	nRecordID = String.ToNumber(ListBox.GetItemData("Lista",tSelected[1]));
 
	SQLite.Query(db,"DELETE FROM Info WHERE RecordID="..nRecordID);
	nLastError = Application.GetLastError();
	if nLastError ~= SQLite.OK then
		Dialog.Message("Error:"..nLastError, SQLite.GetLastErrorString());
	end
end
o esto: (sin tabular!)
sdelete = Dialog.Message("Eliminar Registro","Borrar registro de la base de datos?",MB_YESNO,MB_ICONINFORMATION,MB_DEFBUTTON1);
 
tSelected = ListBox.GetSelected("Lista")
   if tSelected then
    nSelected = tSelected[1]
  nRecordID = String.ToNumber(ListBox.GetItemData("Lista",tSelected[1]));
 
 SQLite.Query(db,"DELETE FROM Info WHERE RecordID="..nRecordID);
    nLastError = Application.GetLastError();
  if nLastError ~= SQLite.OK then
    Dialog.Message("Error:"..nLastError, SQLite.GetLastErrorString());
   end
  end
eso mas que nada es un consejo, después me he fijado en algunas cosas y las he rectificado.
-- Primero se detecta si existe algun elemento marcado...
tSelected = ListBox.GetSelected("Lista");

if tSelected then
	-- Segundo se pregunta si se desea eliminar...	
	sdelete = Dialog.Message("Eliminar Registro","Borrar registro de la base de datos?", MB_YESNO, MB_ICONINFORMATION, MB_DEFBUTTON1);
	-- Tercero si preguntas algo despues de la pregunta tiene que ir el resultado que va hacer por que preguntar por preguntas :D	
	if (sdelete == IDOK) then
		nSelected = tSelected[1]
		nRecordID = String.ToNumber(ListBox.GetItemData("Lista",tSelected[1]));
	 	SQLite.Query(db,"DELETE FROM Info WHERE RecordID="..nRecordID);
	 	nLastError = Application.GetLastError();
	 	if nLastError ~= SQLite.OK then
	 		Dialog.Message("Error:"..nLastError, SQLite.GetLastErrorString());
	   	end
	end
else
	-- Cuarto al no tener ningun elemento selecionado nos lanza un mensaje informadonos de los tontos que somos :DDDD
	Dialog.Message("Eliminar Registro", "No existe ningun elemento selecionado...", MB_OK, MB_ICONSTOP);	
end
y por ultimo.... decirte yo de bases de datos se francamente se poco seguro que abra maneras rápidas de hacerlo... mira de añadir un contador... "idea,,!"

suerte! :pc:
Muchisimas gracias compañero.
Tomo nota de todos tus consejos ;-)
Lo tuyo tiene una solucion facil , cuando carges en el listbox los datos de la bd , en data usa el recorid de cada dato , y cuando llames en el listbox al dato usa listbox.itemdata y así no hay errores .

No funcionan = el orden en una bd que en listbox , en la bd es autoincremetable y si borras un dato su ID la borras también y ese indice no pasa ningun otro dato, el listbox es una simple cuenta de items cargados.
Muchas gracias por iluminarme.
Poco a poco iré aprendiendo.

Haceis una gran labor.
se hace buenamente lo que se puede! :)