Página 1 de 1

Guardar numero de serie de disco duro en una db

Publicado: 08 Dic 2013 07:24
por Cael
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);

Publicado: 08 Dic 2013 18:44
por rafaxplayer
Creo que deberias usar la sentencia INSERT no Update

Publicado: 08 Dic 2013 21:05
por Metafunken
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.

Publicado: 09 Dic 2013 06:16
por Cael
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.

Publicado: 09 Dic 2013 07:10
por rafaxplayer
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.

Publicado: 09 Dic 2013 07:17
por Metafunken
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.

Publicado: 09 Dic 2013 07:19
por Metafunken
No vino Rafa???? De haber sabido...

:lol:

Publicado: 09 Dic 2013 10:56
por Cael
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.

Publicado: 09 Dic 2013 14:45
por rafaxplayer
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.

Publicado: 28 Dic 2013 06:37
por tam
thanks

Publicado: 31 Dic 2013 09:21
por lazybones
que que

Publicado: 21 Ene 2014 05:45
por FRAPIDS
Thanks

Publicado: 25 Mar 2014 00:06
por ayoux
:google:

Publicado: 28 Mar 2014 03:49
por a.miguel
interesante

Publicado: 24 Jul 2014 17:03
por Marsupi68
Thanks

Publicado: 30 Jul 2014 02:46
por comprotodo201480
Probando y doy solucion de otro metodo mas adelante..

Publicado: 30 Jul 2014 20:35
por kauster72
thanks

Re: Guardar numero de serie de disco duro en una db

Publicado: 06 Ago 2014 09:14
por kauster72
checkando...

Re: Guardar numero de serie de disco duro en una db

Publicado: 12 May 2017 19:43
por CHACKAL
Alguno tiene un DLL reciente? Quiero conseguir listas de serial number de los discos duros dependiendo su unidad.

Pero nomas no le hallo! xC

Re: Guardar numero de serie de disco duro en una db

Publicado: 13 Sep 2017 17:43
por aeeder6
thnksssssssssssssssssss