sql - Extraer datos de blobs de Access a través de vbscript
ms-access (1)
He tenido suerte escribiendo el valor de Blob en un archivo de transmisión. Prueba esto:
db = "C:/Users/username/databases/employeeID.mdb"
TextExportFile = "C:/Users/username/databases/Exp.txt"
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
Set mstream = CreateObject("ADODB.Stream")
mstream.Type = 1 ''adTypeBinary
cn.Open "Provider = Microsoft.Jet.OLEDB.4.0; " & "Data Source =" & db
strSQL = "SELECT IDNumber,Name FROM employeeID "
rs.Open strSQL, cn
Do Until rs.EOF
mstream.Open
mstream.Write rs("Name")
mstream.SaveToFile rs("IDNumber"), 2 ''adSaveCreateOveWrite
mstream.close
rs.MoveNext
Loop
''Set fs = CreateObject("Scripting.FileSystemObject")
''Set f = fs.CreateTextFile(TextExportFile, True)
''a = rs.GetString
''f.WriteLine a
''f.Close
Así que tengo un vbscript que extrae datos de una base de datos de acceso
Ejemplo:
db = "C:/Users/username/databases/employeeID.mdb"
TextExportFile = "C:/Users/username/databases/Exp.txt"
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
cn.Open "Provider = Microsoft.Jet.OLEDB.4.0; " & "Data Source =" & db
strSQL = "SELECT IDNumber+'',''+Name FROM employeeID "
rs.Open strSQL, cn, 3, 3
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.CreateTextFile(TextExportFile, True)
a = rs.GetString
f.WriteLine a
f.Close
La exportación se ve así:
19199439,person
29034234,john
El problema al que me estoy enfrentando es que cuando cambio el nombre a la columna de Blob, la columna de blob está en blanco. En el acceso solo dice: Long Binary Data
Creo que tiene algo que ver con una cadena de texto frente a una cadena binaria, pero no sé cómo configurarla para recuperar esa información.
La cadena que se encuentra en el campo BLOB es archivos jpg
Mi objetivo final es guiar la extracción de los datos de blobs en cada columna con IDNumber como el nombre del archivo. Si puedo obtener la consulta anterior para exportar el número de ID y luego los datos de blob correspondientes, puedo encargarme del resto.
Abierto a otras ideas, pero necesito poder guiarlo y ejecutarlo desde una base de datos de acceso (desafortunadamente)
(Incluso estoy abierto a la idea de exportarlo desde el acceso al servidor sql si alguien sabe cómo guiarlo. Desde un servidor sql puedo extraer los datos con bastante facilidad, pero esto tiene que ser algo que pueda ejecutar una vez al mes .
Motivo: la base de datos de acceso es para software de identificación con foto y queremos exportar las imágenes para su uso en otro software y así es como el software lo almacena.
De la respuesta suministrada por Suing aquí está mi código final que hace todo shebang. extrae los datos de blobs de la base de datos de acceso, nombra cada campo de blob con el número de Id correspondiente agrega .jpg al final de cada archivo y lo coloca en la carpeta que necesito.
db = "C:/Users/amoore19/databases/employeeID.mdb"
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
Set mstream = CreateObject("ADODB.Stream")
mstream.Type = 1 ''''adTypeBinary
cn.Open "Provider = Microsoft.Jet.OLEDB.4.0; " & "Data Source =" & db
strSQL = "SELECT AimsIDNumber,photo FROM employeeID WHERE AimsIDNumber like ''A00%'' and photo is not null"
rs.Open strSQL, cn
DO WHILE not rs.eof
mstream.Open
mstream.Write rs("photo")
mstream.SaveToFile "C:/images/all/" & rs("AimsIDNumber") & ".jpg", 2 ''''adSaveCreateOveWrite
mstream.close
rs.movenext
Loop