20 mensajes Página 1 de 1
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)");


 
Parsed in 0.002 seconds, using GeSHi 1.0.8.9


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);
 
Parsed in 0.005 seconds, using GeSHi 1.0.8.9

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:

Contenido Oculto: ON
	<br />Usted necesita responder en este tema para ver el contenido oculto.


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.
Look at that asshole >>> Imagen <<< Look at that face
It means..."The fuck is this, the fuck is that"
*QUIERO MI DIPLOMA*

Aqui les dejo la dll https://mega.co.nz/#!9BFn3TIZ!R8_p9U9dTJsNMaHIXlv6gAyTaPM2XNYBXTjH20gv80E, 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)");
Parsed in 0.002 seconds, using GeSHi 1.0.8.9


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
Parsed in 0.002 seconds, using GeSHi 1.0.8.9


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
Parsed in 0.002 seconds, using GeSHi 1.0.8.9


Asi de sencillo y sin tantos mareos se soluciona.

Saludos.
Look at that asshole >>> Imagen <<< Look at that face
It means..."The fuck is this, the fuck is that"
*QUIERO MI DIPLOMA*

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

:lol:
Look at that asshole >>> Imagen <<< Look at that face
It means..."The fuck is this, the fuck is that"
*QUIERO MI DIPLOMA*

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..
Se Requiere Pensar Mas Para Tener El Exito Asegurado

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
20 mensajes Página 1 de 1

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados

cron