Tomar foto desde formulario...
Hola experto que tal como puedo hacer para que desde un botón de mi formulario tomar una foto desde la web cam de antemano agradezco tu ayuda...
1 Respuesta
Respuesta de junio0or
1
1
junio0or, Hola ... Estudio Ingenieria en Sistemas, con experiencia en...
Mmm, mira no es tan fácil necesitas saber como se maneja la cámara, y si esta tiene incorporado la opción como un object, y después generas un objeto y ese objeto ya solo le decís que tome la foto, pero dejame investigar y te cuento ...
A ok bueno yo logre que tirara la foto pero quiero guardarla directamente en la base de datos de mysql pero no se como...
Pues para guardarla entonces es mucho más fácil, lo que tienes que hacer es primero encontrar la ruta del archivo por que de seguro se guarda en la computadora, entonces lo que haces es con filetostr("ruta") y después lo almacenas a un campo blob y listo
Eso es más fácil
Eso es más fácil
Veras buscando información me tope con este código que me permite almacenar las fotos directamente en la base de datos de mysql, la información me muestra tres pasos a seguir
el primer paso que es para la creación de de la tabla que almacenara las fotos,
LOCAL CSQL, NH, CCADENA
lcStringCnxLocal=" "
NH=0
CCADENA=""
lcStringCnxLocal = "DRIVER={MySQL ODBC 3.51 Driver};" + ;
"SERVER=localhost;" + ;
"UID=root;" + ;
"PWD=;" + ;
"DATABASE=SECURITY-SOFT;" + ;
"OPTIONS=131329;"
SQLSETPROP(0,"DispLogin" , 3 )
*CONEXION= SQLSTRINGCONNECT(lcStringCnxLocal)
NH=SQLSTRINGCONNECT(""+lcStringCnxLocal, .T.)
IF NH > 0
SQLSETPROP(NH,'Asynchronous', .T.)
SQLSETPROP(NH,'BatchMode', .T.)
TEXT TO CSQL TEXTMERGE NOSHOW
CREATE TABLE albumfotos (
codigo char(03) NOT NULL default '000',
descripcion varchar(50) default '',
foto longblob,
PRIMARY KEY (codigo))
ENGINE=InnoDB ROW_FORMAT=DYNAMIC
ENDTEXT
SQLPREPARE(NH,""+CSQL)
SQLEXEC(NH)
WAIT WINDOW 'Tabla Creada'
SQLDISCONNECT(NH)
ENDIF
RELEASE lcStringCnxLocal,NH,CCADENA
Utilice este código y me funciono, luego hay que seguir el segundo paso que es para insertar la imagen pero este no me funciona
LOCAL bimagen as blob
bimagen = (0h)
bimagen = FILETOSTR('C:\Documents and Settings\Administrador\Mis documentos\Visual FoxPro Projects\fotos\foto.bmp')
TEXT TO lcStringCnxLocal TEXTMERGE NOSHOW
REPLACE INTO albumfotos
SET codigo = '448',
foto=?bimagen,
descripcion='FOTO-001',
ENDTEXT
no me inserta nada.... no se que puedo estar haciendo mal, llevo un dia entero dandole cabeza pero no se que hacer
el primer paso que es para la creación de de la tabla que almacenara las fotos,
LOCAL CSQL, NH, CCADENA
lcStringCnxLocal=" "
NH=0
CCADENA=""
lcStringCnxLocal = "DRIVER={MySQL ODBC 3.51 Driver};" + ;
"SERVER=localhost;" + ;
"UID=root;" + ;
"PWD=;" + ;
"DATABASE=SECURITY-SOFT;" + ;
"OPTIONS=131329;"
SQLSETPROP(0,"DispLogin" , 3 )
*CONEXION= SQLSTRINGCONNECT(lcStringCnxLocal)
NH=SQLSTRINGCONNECT(""+lcStringCnxLocal, .T.)
IF NH > 0
SQLSETPROP(NH,'Asynchronous', .T.)
SQLSETPROP(NH,'BatchMode', .T.)
TEXT TO CSQL TEXTMERGE NOSHOW
CREATE TABLE albumfotos (
codigo char(03) NOT NULL default '000',
descripcion varchar(50) default '',
foto longblob,
PRIMARY KEY (codigo))
ENGINE=InnoDB ROW_FORMAT=DYNAMIC
ENDTEXT
SQLPREPARE(NH,""+CSQL)
SQLEXEC(NH)
WAIT WINDOW 'Tabla Creada'
SQLDISCONNECT(NH)
ENDIF
RELEASE lcStringCnxLocal,NH,CCADENA
Utilice este código y me funciono, luego hay que seguir el segundo paso que es para insertar la imagen pero este no me funciona
LOCAL bimagen as blob
bimagen = (0h)
bimagen = FILETOSTR('C:\Documents and Settings\Administrador\Mis documentos\Visual FoxPro Projects\fotos\foto.bmp')
TEXT TO lcStringCnxLocal TEXTMERGE NOSHOW
REPLACE INTO albumfotos
SET codigo = '448',
foto=?bimagen,
descripcion='FOTO-001',
ENDTEXT
no me inserta nada.... no se que puedo estar haciendo mal, llevo un dia entero dandole cabeza pero no se que hacer
En lugar de hacer eso pon
Sqlexec(NH,"Insert into albumfotos values('448', 'Foto-001', 'foto')")
Eso ara casi lo mismo
Y recuerda que cambias los valores que te puso como ejemplo, y todo tiene que ser string para enviarlo ...
Sqlexec(NH,"Insert into albumfotos values('448', 'Foto-001', 'foto')")
Eso ara casi lo mismo
Y recuerda que cambias los valores que te puso como ejemplo, y todo tiene que ser string para enviarlo ...
A ok bueno lo estoy intentando pero no resulta pero vamos a ver que puedo hacer cualquier cosa si consigues alguna solución o si tienes algún ejemplo me podrías decir para probar, no me sale ningún tipo de error pero tampoco me guarda los valores, en toda información que busco me sale que se puede hacer con el código de arriba pero a mi no me funciona solo se crea la tabla pero no se guarda la imagen, y no se si pueda existir algún otro modo, yo lo logre guardando la ruta de la imagen y me funciona perfect pero lo que quiero es guardar la imagen en la propia tabla de mysql...
El sqlexec te retorna un valor almacenalo en una variable y mira si te sale mayor a 0 es por que lo hizo bien de lo contrario lo hizo mal ...
Y es por tu bd o como envías la info Saludos
Y es por tu bd o como envías la info Saludos
Tengo dudas con respecto a esto el código de creación de la tabla va en el mismo prg del código de inserción de la imagen, como leí un articulo donde dice que el código de inserción no lleva la conexión a la base de datos, y el de creación de tabla si tiene ese código entonces supongo que no deben ir en el mismo prg pero como inserto la imagen sin no tengo la conexión, de todas formas yo lo intente haciéndolo en el mismo y en diferentes prg pero no me funciono, voy a ver si es que tengo algún error...
Mmm, mira pues si tienes que tener una conexión si o si, eso no hay duda, lo que tal vez te dice el articulo es que posiblemente no tengas que generar la conexión cada ves que quieras hacer algo, y esto no lo haces cuando declaras la conexión con una variable, con esto puedes hacer la conexión sin ninguna problema,
Tengo un código que es el que me permite tomar la foto y guardarla en mis documentos, en mi código coloco lo siguiente:
LOCAL lcFile
lcFile = ""
lcFile = "C:\FOTO001.jpg"
señalandole la dirección y nombre de la imagen, el problema es que quisiera guardar la imagen con diferentes nombres para que no se reemplazen, tienes alguna idea de como poder hacerlo.
LOCAL lcFile
lcFile = ""
lcFile = "C:\FOTO001.jpg"
señalandole la dirección y nombre de la imagen, el problema es que quisiera guardar la imagen con diferentes nombres para que no se reemplazen, tienes alguna idea de como poder hacerlo.
Si va ser solamente un directorio no necesitas hacer cosas así, lo que puedes hacer es lo siguiente
Asignar un correlativo a cada registro que estas insertando, y que la imagen se llame tal como se llama tu registro esto puedo ser un contador que te funcionaria perfecto o incluso si pides datos que son únicos como no de cedula o no de nit o algo así la imagen se puede llamar así ...
Asignar un correlativo a cada registro que estas insertando, y que la imagen se llame tal como se llama tu registro esto puedo ser un contador que te funcionaria perfecto o incluso si pides datos que son únicos como no de cedula o no de nit o algo así la imagen se puede llamar así ...
Me podrías decir como implementar el contador, porque la verdad no se como hacerle, lo he intentado pero no de la manera correcta, porque el debería de guardarse por ejemplo la primera foto que se llame foto1, el debería seguir el correlativo a foto2 y foto3 y así sucesivamente...
va mira ps lo que tienes que hacer es lo siguiente en una tabla o en la tabla donde guardas las fotos, deben de tener un campo que se llame correltivo o no se, no importa como le quieras llamar, lo que tienes que hacer es cada ves que existe una nueva imagen tenes q insertar un registro sumandole 1 entonces esto te tendria que quedar algo asi
select max(campo) as "num" from tabla into cursor prueba
if isnull(prueba.campo)
dato1 = 1
else
dato1 = 1 + prueba.campo
Endif
Después esto lo guardar y cambias el nombre de la imagen ...
select max(campo) as "num" from tabla into cursor prueba
if isnull(prueba.campo)
dato1 = 1
else
dato1 = 1 + prueba.campo
Endif
Después esto lo guardar y cambias el nombre de la imagen ...
Experto tengo una ultima duda si yo quisiera traer una imagen que se encuentra guardada en un campo blob de mysql como podría hacerlo...
Sqlexec(xControl,"select campo from tabla","Cursor_Temp")
Scan
a = strotofile(Cursor_Temp.campo)
A es una imagen o lo que ayas mandado
Endscan
Scan
a = strotofile(Cursor_Temp.campo)
A es una imagen o lo que ayas mandado
Endscan
Hice esto pero me dice que faltan argumentos en el strtofile
sqlexec(CONEXION,"select foto from albumfotos","Cursor_Temp")
scan
a = strtofile(Cursor_Temp.foto)
endscan
thisformset.form2.image1.pictureval=a
sqlexec(CONEXION,"select foto from albumfotos","Cursor_Temp")
scan
a = strtofile(Cursor_Temp.foto)
endscan
thisformset.form2.image1.pictureval=a
Bueno tus datos deben de ser tipo longblob es decir tu campo tipo longblob y finalmente, para extraer usas esto
sqlexec(NH,""+CSQL,"TCURSOR")
SELECT TCURSOR
IF RECCOUNT() > 0
STRTOFILE(TCURSOR.FOTO,"C:\FOTOS\FOTO001.JPG")
Endif
Este es para la primera imagen para hacer varios, tendrías que cambiarlo ... por un scan en lugar del if... Saludos y recuerda que tienes que poner la ruta donde almacenaras el dato ...
sqlexec(NH,""+CSQL,"TCURSOR")
SELECT TCURSOR
IF RECCOUNT() > 0
STRTOFILE(TCURSOR.FOTO,"C:\FOTOS\FOTO001.JPG")
Endif
Este es para la primera imagen para hacer varios, tendrías que cambiarlo ... por un scan en lugar del if... Saludos y recuerda que tienes que poner la ruta donde almacenaras el dato ...
Experto lo hice pero me sale el siguiente error "el valor, tipo o numero de argumentos no es válido para la función" en la siguiente linea
STRTOFILE(Cursor_Temp.FOTO,"C:\FOTOS\FOTO001")
este es mi codigo parea extraer mi imagen
text to csql textmerge
select foto
from albumfotos where codigo='001'
endtext
sqlexec(NH,""+CSQL,"Cursor_Temp")
sqlexec(NH)
select cursor_temp
if reccount() > 0
strtofile(cursor_temp.foto,"C:\fotos\foto001.jpg")
Endif
STRTOFILE(Cursor_Temp.FOTO,"C:\FOTOS\FOTO001")
este es mi codigo parea extraer mi imagen
text to csql textmerge
select foto
from albumfotos where codigo='001'
endtext
sqlexec(NH,""+CSQL,"Cursor_Temp")
sqlexec(NH)
select cursor_temp
if reccount() > 0
strtofile(cursor_temp.foto,"C:\fotos\foto001.jpg")
Endif
Mandame tu correo o agrégame al msn
[email protected]
[email protected]
Hola experto este es mi correo [email protected]
Sera que me pasarías tu código, que usaste para tomar foto ya que una persona quiere hacer lo mismo pero no entiendo lo que le envíe tal vez entienda lo tuyo
Saludos mi correo es [email protected]
Saludos mi correo es [email protected]
- Compartir respuesta
- Anónimo
ahora mismo