我有以下表达式,它转到SQL表(SQL Server 2008 R2)并抓取要打开的文件路径(通常是PDF或照片),格式化为在Access前端中作为超链接。
这是我在VBS文件中所做的事情......
Dim Input
Input = InputBox("Enter your WO#", "PDF Search", "ie. 40900500")
set conn2 = createobject("ADODB.Connection")
conn2.open "Driver={SQL Server}; Server=server; UID=user; PWD=password; Database=db;"
dim sql2
msgbox("Testing fixture connection...")
dim rs2
set rs2 = createobject("ADODB.Recordset")
sql2 = "select Photo from Fixtures where Application = '" & input & "'"
rs2.open sql2, conn2
msgbox("It worked! Your photo is here: " & rs2.fields(0).value)
......最终会回复......
...我需要的只是第一个数字符号之前的文件路径(此消息框只是为了测试连接并显示我正在使用的数据)。
如何从字段值中截断字段值我从SQL返回到第一个数字符号,以便通过在.vbs文件中运行powershell对象来打开文件?
随时欢迎任何帮助! :)
答案 0 :(得分:1)
1)您可以使用以下表达式在第一个#
之前提取文件路径:
sql2 = "select LEFT(Photo, NULLIF(CHARINDEX('#', Photo), 0) - 1) from Fixtures where ..."
如果某些行不包含#
,那么您可以使用:
sql2 = "select LEFT(Photo, ISNULL(NULLIF(CHARINDEX('#', Photo), 0) - 1, 260)) from Fixtures where ..."
测试:
DECLARE @Photo VARCHAR(260)
SET @Photo = 'J:\DRAWINGS\Folder1\File1.jpg#aaa#'
SELECT LEFT(@Photo, NULLIF(CHARINDEX('#', @Photo), 0) - 1) AS T1
-- J:\DRAWINGS\Folder1\File1.jpg
SET @Photo = 'J:\DRAWINGS\Folder1\File1.jpg'
SELECT LEFT(@Photo, ISNULL(NULLIF(CHARINDEX('#', @Photo), 0) - 1, 260)) AS T2
-- J:\DRAWINGS\Folder1\File1.jpg
2)你应该在上面的行
中避免字符串连接sql2 = "select Photo from Fixtures where Application = '" & input & "'"
你应该使用参数化查询=>见SQL Injections。