在MsSQLServer2000上通过调用OLE创建二维条码


在运行MSSQLServer的服务上注册组件,"regsvr32  "........\QRBarcode.ocx""。

函数fn_CreateQRImage:

-- =================================================================
-- 根据字符串产生QR图片,保存到指定的路径中.
-- 返回值: 成功返回图片保存所有的完整路径,否则返回''
-- Create by lenya on 2010/10/10

-- =================================================================

CREATE function [dbo].[fn_CreateQRImage](@uc_Data varchar(100))
returns varchar(255)
as
begin
    declare @hr int, @object int, @result int
    declare @strFilePath varchar(50), @strFileName varchar(100), @strFullFileName varchar(256)
 
    if rtrim(ltrim(@uc_Data)) = '' or @uc_Data is null 
        return ''

    set @strFileName = [dbo].[fn_StrToFileName](@uc_Data)-- 将@uc_Data转换为有效的文件名

    set @strFileName = @strFileName + '.bmp'
    -- set @strFilePath = 'ftp://192.168.1.222/' --不可以写入ftp中
    set @strFilePath = '\\192.168.1.1\qrPic\' --若要修改产生的图片存放的文件夹,修改该字符串.
    set @strFullFileName = @strFilePath + @strFileName

    EXEC @hr = sp_OACreate '{F5E7BFDD-DE8E-47FB-B009-F9230FFF154A}', @object OUTPUT --创建QRBarCode OLE 对象实例
    if @hr <> 0 
    begin
       EXEC sp_OAGetErrorInfo @object
       return ''
    end

    --初始化属性    
    EXEC @hr = sp_OASetProperty @object, 'nLevel', 2            -- 纠错等级
    IF @hr <> 0 RETURN ''
    EXEC @hr = sp_OASetProperty @object, 'nVersion', 1          -- 版本号  
    IF @hr <> 0 RETURN ''
    EXEC @hr = sp_OASetProperty @object, 'nMaskingNo', 7        -- 掩码
    IF @hr <> 0 RETURN ''
    
    EXEC @hr = sp_OAMethod @object, 'CreateQRImage', @result OUTPUT, @uc_Data, @strFullFileName
--     IF @hr <> 0 or @result <> 0 RETURN ''
    IF @hr <> 0 
        RETURN convert(varchar,@hr)
    IF @result <> 0 
        RETURN convert(varchar,@result)

    EXEC @hr = sp_OADestroy @object
    
    RETURN @strFullFileName  -- 成功后返回外部可访问路径(完整路径).

end

上文提及的fn_StrToFileName:

-- =================================================================
-- 将指定字符串转换为有效的文件名,不能包含字符(\/:*?"<>|Tab、换行、回车)之一.
-- 如果遇到不能用作文件名的特殊字符,用'#'代替,并用后缀'_?'标识,
-- 如:'电脑部<开发组>#"网络组"',变更为'电脑部#开发组###网络组#_78066'
-- 返回值: 返回可用作文件名的字符串.

-- Create by lenya on 2010/10/10
-- =================================================================

CREATE function [dbo].[fn_StrToFileName](@str varchar(100))
returns varchar(150)
as
begin
    declare @strFileName varchar(150),
            @suffix varchar(30),
            @start int,
            @len int,
            @letter varchar(2)

    -- 如果不包含特殊字符(\/:*?"<>|Tab、换行、回车),直接返回
    if not exists(select 1 where @str like '%[\/:*?"<>|'+char(9)+char(10)+char(13)+']%')
        return @str
    
    set @suffix = '_'
    set @len = len(@str)
    set @start = 1

    -- 用数字作后缀,标识'特殊'字符,如'电脑部#开发组###网络组#_78066',则可反译出'电脑部<开发组>#"网络组'
    while (@start <= @len)
    begin
        set @letter = substring(@str, @start, 1) 
        set @suffix = @suffix +  
        case @letter
            when '#' then '0'
            when '\' then '1'
            when '/' then '2'
            when ':' then '3'
            when '*' then '4'
            when '?' then '5'
            when '"' then '6'
            when '<' then '7'
            when '>' then '8'
            when '|' then '9'
            when char(9) then 'a'
            when char(10) then 'b'
            when char(13) then 'c'
            else ''
        end        
        set @start = @start + 1
    end

    -- 文件名不能包含下列任何字符之一:\/:*?"<>|Tab、换行、回车
    -- 将这些不允许作为文件名的字符替换为#
    set @str = replace(@str,'\','#')
    set @str = replace(@str,'/','#')
    set @str = replace(@str,':','#')
    set @str = replace(@str,'*','#')
    set @str = replace(@str,'?','#')
    set @str = replace(@str,'"','#')
    set @str = replace(@str,'<','#')
    set @str = replace(@str,'>','#')
    set @str = replace(@str,'|','#')
    set @str = replace(@str,char(9),'#')
    set @str = replace(@str,char(10),'#')
    set @str = replace(@str,char(13),'#')
    
    return @str + @suffix

end


最后创建的sql语句当然就是:SELECT [master].[dbo].[fn_CreateQRImage]('无标题文档---lenya')。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值