Guardar numero de serie de disco duro en una db

Aquí puedes preguntar o compartir tus dudas y conocimientos acerca del programa
Una ayudita con este código el cual pretendo guardar el numero de serie del disco duro, en una db. pero no guarda, me pueden hechar una ayuda a identificar ó corregir algún error.

Actions
sDatabaseFile = _SourceFolder .. "\\AutoPlay\\Docs\\NUMERO.db";

db = SQLite.Open(sDatabaseFile);
nLastError = Application.GetLastError();
if nLastError ~= SQLite.OK then
Dialog.Message("Error al abrir archivo", SQLite.GetLastErrorString());
end


SQLite.Query(db,"CREATE TABLE serie(RecordID integer primary key, SERIES text)");


On Preload
function GetHDDInfo(sDRIVE)
	sDRIVE=String.Replace(sDRIVE,":","",false)
	sDRIVE=String.Replace(sDRIVE,"\\","",false)   
	tbDrives = Drive.Enumerate();
	if tbDrives then
		nHDDCount=0
		for i,v in pairs (tbDrives) do
			if Drive.GetType(v) == 3 then
				cDRIVE=String.Replace(v,":\\","",false)
				cDRIVE=String.Upper(cDRIVE)
				if String.Upper(sDRIVE) == cDRIVE then
					tbRet={}
					tbRet.DriveSerie = DLL.CallFunction("AutoPlay\\Docs\\DriverSer.dll", "DriveSerialNumber", nHDDCount, DLL_RETURN_TYPE_STRING, DLL_CALL_STDCALL);
					
					nHDDCount=nHDDCount+1
				end
			end
		end
	else
		tbRet = 0
	end
	return tbRet
end
tbHDD=GetHDDInfo(_SourceDrive)
test=""  ..tbHDD.DriveSerie.. "\r"
Input.SetText("Input1", test);

-----------------------------------------GUARDAR DATOS EN LA BASE DE DATOS SQL
function FillSitesList()

	tserie = SQLite.QueryToTable(db, "SELECT * FROM serie");
	nLastError = Application.GetLastError();
	if nLastError ~= SQLite.OK then
		Dialog.Message("Error", SQLite.GetLastErrorString());
	end
	

	if nLastError == SQLite.OK then

		for nRow = 1,tserie.Rows do

	    	sSERIES = tserie.Data[nRow]["SERIES"];

	    	Label.SetText("SQL", tserie.Data[nRow]["SERIES"]);
	    end
	end
end
FillSitesList();
----------------------------------------------------ACTUALIZAR NUEVO REGISTRO
sSerie = Input.GetText("Input1");
SQLite.Query(db,"UPDATE serie SET SERIES='"..sSerie.."' WHERE RecordID=1");
nLastError = Application.GetLastError();
        if nLastError ~= SQLite.OK then
                Dialog.Message("Error", SQLite.GetLastErrorString());
        else
               Dialog.Message("Ok", "Serie Guardada!");
        end
        FillSitesList();
        SQLite.Close(db);

Creo que deberias usar la sentencia INSERT no Update

Hola, a simple vista los errores son bastante obvios...

Aqui te dejo un ejemplo basado en tu script:

HIDE: ON
Hidebb Message Hidden Description

Solo le hice algunos arreglos y cambie algunos parametros, no cuento con la .dll que mencionas en tu script, pero si tu .dll funciona bien seguro podras ejecutar este ejemplo a la perfeccion.

Nota:

No lo hice 100% funcional porque no se de lo que "hablas", pero es cuestion de que tu lo adaptes a tus necesidades y conforme a tu proyecto.

Espero tu comentario, si te ha funcionado o no.

Saludos.

Aqui les dejo la dll https://mega.co.nz/#!9BFn3TIZ!R8_p9U9dT ... TjH20gv80E, corri tu ejemplo amigo Metafunken, pero no hace la funcion, lo unico que deseo es obtener el numero de serie y guardarlo en una .db no requiero tanto llenado de datos y demás cosas solo guardar el numero de serie.

yo he realizado un ejemplo en mi makina que función perfectamente , la cosa no tiene mucho misterio...

On StartUp:
sDatabaseFile = _SourceFolder .. "\\AutoPlay\\Docs\\NUMERO.db";

db = SQLite.Open(sDatabaseFile);
nLastError = Application.GetLastError();
if nLastError ~= SQLite.OK then
	Dialog.Message("Error : ", SQLite.GetLastErrorString());
end


SQLite.Query(db,"CREATE TABLE serie(RecordID integer primary key, SERIES text)");
He utilizado un plugin comboexplorer con la opción "onlyDrives" para seleccionar el Disco duro, pero esto es lo de menos ,el caso es que el formato de sPath debe ser "C:" o "C:\" como salida.
Boton guardar:
sPath = ExplorerCombo.GetPath("Plugin1");-- El formato de salida debe ser "C:" o "C:\"  

if (sPath ~= "") then
sSerial = Drive.GetInformation(sPath).SerialNumber;--como dice en el ayuda si es un Floppy o CD_ROM y no contien disco sera null
	if sSerial ~= nil then
		SQLite.Query(db,"INSERT INTO serie (RecordID,SERIES) VALUES (NULL ,'"..sSerial.."')");
		nLastError = Application.GetLastError();
		if nLastError ~= SQLite.OK then
			Dialog.Message("Error : ", SQLite.GetLastErrorString());
		end
	end
end
Nota: seria bueno acostumbrarse a sqlite3 aunque sea mas fácil de manejar sqlite2 en ams pero este ya se esta quedando obsoleto.

Mira, la .dll que dices parece haber sido diseñada para Sistemas anteriores, al menos en Windows 8 me tira errores...

Para obtener el serial solo cambia el llamado a tu .dll por esto:
Serial = Drive.GetInformation(sDRIVE).SerialNumber;
if(Serial == "") then
	Serial = "Not serial!";
end
Asi de sencillo y sin tantos mareos se soluciona.

Saludos.

No vino Rafa???? De haber sabido...

:lol:

Una pregunta rafaxplayer el numero que genera es muy distinto al que obtendría en cmd con la orden vol, la que me genera con tu ejemplo, que se podría decir que es, bueno me quede con la duda?, en otras computadoras el numero generado seria distinto?, bueno yo busco el resultado ID de disco duro y lo guarde en una db. con un solo registro para actualizar y no crear mas de 1 registro por eso ocupo Update.

Bueno eso ya tu mismo , usa el source que quieras .

Esta claro que en otras makinas el disco duro es otro por lo tanto el numero sera distinto.

thanks

que que

Thanks

:google:

interesante

Thanks

Probando y doy solucion de otro metodo mas adelante..

thanks
checkando...
Alguno tiene un DLL reciente? Quiero conseguir listas de serial number de los discos duros dependiendo su unidad.

Pero nomas no le hallo! xC
thnksssssssssssssssssss