石鑫华视觉论坛

 找回密码
 注册会员
查看: 3764|回复: 3

[有偿] LabVIEW基于sqlite3.dll动态链接库函数操作SQLite数据库

[复制链接]
  • TA的每日心情
    慵懒
    昨天 10:09
  • 签到天数: 3411 天

    连续签到: 13 天

    [LV.Master]2000FPS

    发表于 2022-3-23 18:30:01 | 显示全部楼层 |阅读模式 来自:广东省东莞市 电信

    注册登陆后可查看附件和大图,以及购买相关内容

    您需要 登录 才可以下载或查看,没有账号?注册会员

    x
    LabVIEW基于sqlite3.dll动态库函数操作SQLite数据库

    LabVIEW基于ODBC使用LabSQL操作SQLite数据库
    http://visionbbs.com/thread-28283-1-1.html?fromuid=9
    (出处: 视觉论坛VISIONBBS|视觉之家VISIONHOME)
    上面的帖子中,介绍了使用ODBC方式驱动SQLite数据库,并且使用了LabSQL库来操作SQLite。这里需要配置ODBC,需要对LabSQL也有一定的了解。本主题,将介绍使用sqlite3.dll动态链接库中的函数直接操作SQLite数据库。

    关于本主题中的内容,可以搜索一下《LabVIEW访问SQLite数据库接口研究》文章,有介绍了一下大概要用到sqlite3.dll库中一些基本函数的使用方法,例如open、prepare、step、finalize、close等。

    本示例中,使用到了prepare准备函数,用于编译SQL执行语句。本示例使用的sqlite3.dll是官网下载的最新版本sqlite-dll-win32-x86-3380100/sqlite-dll-win32-x64-3380100,其中包含了sqlite3_prepare、sqlite3_prepare_v2、sqlite3_prepare_v3三个版本的函数。其中sqlite3_prepare和sqlite3_prepare_v2函数可以用于本示例中。但是sqlite3_prepare_v3因为多了unsigned int prepFlags这个参数,所以不适用本示例(可自行修改添加本参数以适用V3版本)。关于三个版本prepare函数的具体定义,参考下面的内容或官方文档。
    int sqlite3_prepare(  
    sqlite3 *db,            /* Database handle */  
    const char *zSql,       /* SQL statement, UTF-8 encoded */  
    int nByte,              /* Maximum length of zSql in bytes. */  
    sqlite3_stmt **ppStmt,  /* OUT: Statement handle */  
    const char **pzTail     /* OUT: Pointer to unused portion of zSql */);

    int sqlite3_prepare_v2(  
    sqlite3 *db,            /* Database handle */  
    const char *zSql,       /* SQL statement, UTF-8 encoded */  
    int nByte,              /* Maximum length of zSql in bytes. */  
    sqlite3_stmt **ppStmt,  /* OUT: Statement handle */  
    const char **pzTail     /* OUT: Pointer to unused portion of zSql */);

    int sqlite3_prepare_v3(  sqlite3 *db,            /* Database handle */  
    const char *zSql,       /* SQL statement, UTF-8 encoded */  
    int nByte,              /* Maximum length of zSql in bytes. */  
    unsigned int prepFlags, /* Zero or more SQLITE_PREPARE_ flags */  
    sqlite3_stmt **ppStmt,  /* OUT: Statement handle */  
    const char **pzTail     /* OUT: Pointer to unused portion of zSql */);
    本示例需要区分LabVIEW32和64位版本。32位的LabVIEW调用32位的sqlite3.dll,64位的LabVIEW则调用64位的sqlite3.dll。不能兼容一起使用,64位的LabVIEW也不能调用32位的sqlite3.dll。这个就没有LabSQL方式使用ODBC驱动来的方便,在使用LabSQL ODBC方式时,编写的示例在32/64位LabVIEW中可以随便切换。但是这种方法有一个好处是可以不用如第三方的SQLiteStudio来创建数据库。在使用sqlite3.dll的Open函数时,对于指定路径的数据库,如果存在,则直接打开;如果不存在,则新建然后再打开。所以,这里是可以不用先创建一个数据库的。只要路径方式符合Windows环境中的路径要求,指定名称,就可以自动的创建一个数据库。然后,再使用创建表等函数,来创建需要的表。另外就是sqlite3.dll函数不能直接返回多行数据,所以要当要读取多行数据时,是使用LabVIEW的for循环来处理的,这样如果读取数据比较多时,可能耗时比较大,具体的没有验证过。不过一般LabVIEW环境中使用数据库,都是只考虑写入,一般不做读取分析。数据分析一般会放到其它应用中来处理。

    本示例,可以针对中文的路径、表名称、字段、内容等。使用方法是将GBK的内容,转换为UTF8的内容。在主要的execute执行函数中,添加了UTF8到TXT,TXT到UTF8等判断。如果数据库没有存在,使用sqlite3.dll的Open函数自动合建时,则该数据库的字符集将是UTF8方式的。这时,需要将表名称、字段名称、内容等涉及中文的,都转换为UTF8方式。而如果是使用第三方的SQLiteStudio创建的数据库,默认是GBK字符集,这时就不需要转换为UTF8。

    本示例演示了查询表、创建表、插入数据、查询数据、更新数据、删除数据等常规的SQL命令。

    下面的是32位LabVIEW的效果:
    32-1.png
    原数据库中的内容
    32-2.png
    插入新的数据
    32-3.png
    更新数据(密码更新,倒转)
    32-4.png
    删除数据

    下面的是64位LabVIEW的效果:
    64-1.png
    原始数据
    64-2.png
    插入数据
    64-3.png
    更新数据(密码更新,倒转)
    64-4.png
    删除数据

    示例下载:
    LabVIEW2020SP1F1x86 32位版本:
    SQLite x86VI.rar (1.24 MB, 下载次数: 114, 售价: 10 元)

    LabVIEW2020SP1F1x64 64位版本:
    SQLite x64VI.rar (2.26 MB, 下载次数: 1, 售价: 10 元)




    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2022-6-30 09:40
  • 签到天数: 3 天

    连续签到: 2 天

    [LV.2]200FPS

    发表于 2022-6-29 19:52:14 | 显示全部楼层 来自:四川省成都市 电信

                                   
    登录/注册后可看大图


    楼主,使用下载的vi做了个简单的试验,prepare执行返回错误1,statement值为零。请问下楼主能帮忙解答一下吗?谢谢
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2022-6-30 09:40
  • 签到天数: 3 天

    连续签到: 2 天

    [LV.2]200FPS

    发表于 2022-6-29 19:56:01 | 显示全部楼层 来自:四川省成都市 电信
    贴的图片好像不能显示,我把vi发你看一下,非常简单。

    未命名 2.vi

    9.37 KB, 下载次数: 0

    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2022-6-30 09:40
  • 签到天数: 3 天

    连续签到: 2 天

    [LV.2]200FPS

    发表于 2022-6-29 19:56:37 | 显示全部楼层 来自:四川省成都市 电信
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册会员

    本版积分规则

    LabVIEW HALCON图像处理入门教程(24.09)
    石鑫华机器视觉与LabVIEW Vision图像处理PDF+视频教程11种全套
    《LabVIEW Vision函数实例详解2020-2024》教程-NI Vision所有函数使用方法介绍,基于NI VISION2020,兼容VDM21/22/23/24

    QQ|石鑫华视觉论坛 |网站地图

    GMT+8, 2024-12-22 15:50

    Powered by Discuz! X3.4

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表