Page 1 of 1

Error sql server

Posted: Fri Nov 20, 2020 8:43 pm
by jpcavagnaro
Hola, buenas tardes, alguien me puede explicar porque la forma de cargar una foto A lo hace perfecto y la B me error

A: oRS1Cli:ADDNEW()
oRs1Cli:Fields( "foto" ):Value := STRTOHEX( MEMOREAD( "foto.jpg"))

B: jj := STRTOHEX( MEMOREAD( "foto.jpg" ))
sqldetl = "INSERT INTO vehiculos_fotos ([Codigo],[foto]) VALUES ('" + xCodigo+ "', '" + jj + "')"
TRY
oCon:Execute( sqldetl )
oCon:Close() ; CATCH oErr
? sqldetl
Alert( "No puedo generar el presupuesto que supera lo 15 art. ", { " Seguir " }, "Atención" )
END TRY

El error que da: No se permite la conversión implícita del tipo de datos varchar(max) a varbinary(max). Utilice la función CONVERT para ejecutar esta consulta.

Saludos
Jorge.

Re: Error sql server

Posted: Fri Nov 20, 2020 9:41 pm
by Rick Lipkin
Jorge

Make sure your Sql Field value in your table is VarBinary(max) There is an easier way of coding inserting pictures, files .. into a Sql VarBinary(max) field .. however this code works for me ..

Code: Select all

// open file //
nHANDLE := FOpen( cFILE )
IF FERROR() <> 0
   SAYING := "Error reading file "+cFILE+CHR(10)
   SAYING += " "+STR(FERROR())+CHR(10)
   MsgInfo( SAYING )
   oDLG:END()
   RETURN(.F.)
ENDIF

// get number of bytes in file
nBYTES := FSEEK( nHANDLE, 0,2 )

// pad the buffer nBytes+1
cBUFFER := SPACE(nBYTES+1)

FSeek( nHANDLE, 0, 0 )
nBytesRead   := FRead( nHANDLE, @cBuffer, nBytes )

FClose( nHANDLE )

if nBytesRead != nBytes
   SAYING := "nBytesRead = "+str(nBYTESREAD)+CHR(10)
   SAYING += "nBytes     = "+str(nBYTES)+CHR(10)
   SAYING += "Error Reading Data"+chr(10)
   MsgInfo( saying )
   oDLG:END()
   RETURN ( .F. )
endif

cEID := _GenEid()
IF cEID = "BOGUS"
   oDlg:End()
   RETURN(.F.)
ENDIF

nDateTime := dtoc(date())//+" "+time()

oRsCh:AddNew()

oRsCh:Fields("doceid"):Value        := cEID
oRsCH:Fields("TFormEid"):Value      := cPROJECTEID
oRsCh:Fields("DImport"):Value       := nDateTime
oRsCh:Fields("importby"):Value      := xLOGIN
oRsCh:Fields("datalen"):Value       := nBYTES
oRsCh:Fields("filename"):Value      := cFILENAME
oRsCh:Fields("notes"):AppendChunk( VTArrayWrapper():New( 17, cBUFFER ) )    // ----------- inserts into "Notes" field which is a VarBinary(Max) 

oRsCh:Update()

 
Rao has a much simpler code to insert a document into a Sql Database .. the above always works for me .

Rick Lipkin

Re: Error sql server

Posted: Fri Nov 20, 2020 10:21 pm
by jpcavagnaro
Hola, gracias por responder, si a mí insertar un registro en un recordset me funciona bien, pero si quiero hacerlo por sentencia sql es donde me da el error.

Lo que quiero hacer es cargar las fotos en una tabla sin tener el recordset.

Saludos
Jorge