关于ODBC数据源连接文本

odbc|数据|数据源

关于ODBC数据源连接文本

  在《外部数据库的连接原理》一讲中我们说过,ODBC提供对多种数据库的支持,如dBase、Access、MS SQL Server及Oracle,也就是说运用ODBC数据源中所提供的连接代码,我们可以实现对多种数据库的连接。以连接Access数据库为例,ODBC数据源连接文本的格式是:
  “Driver={数据库驱动程序};Dbq=数据库文件;”

  在以上连接文本中,如果数据库跟程序在同一目录下,或者用变量DefaultDir指定了数据库所在目录,则数据库文件可以不用全路径名,如下即可:

  “ODBC;DBQ=MSAccess.mdb;Driver={Microsoft Access Driver (*.mdb)};”

  如下也可:

  “ODBC;DBQ=MSAccess.mdb;DefaultDir=d:\Downloads\e21;Driver={Microsoft Access Driver (*.mdb)};”

  如果数据库跟程序不在同一目录下,或者没有用变量DefaultDir指定数据库所在目录,则数据库文件需要用全路径名,如下:

  “ODBC;DBQ=E:\Quake III Arena\MSAccess.mdb;Driver={Microsoft Access Driver (*.mdb)};”

  以上所说的是连接Access数据库的格式,那么连接其他数据库的ODBC数据源连接文本又是怎样的?连接不同类型的数据库要使用不同的对应驱动程序,没忘记吧!不同的驱动程序当然它们的参数组合也就不同了,每一种不同驱动程序都有其特定的的参数形式:

  ⑴、MS Access ODBC DSNless 连接:

  ☆、参数:Driver 设置值:{Microsoft Access Driver (*.mdb)}
  ☆、参数:Dbq 设置值:实际路径文件名称
  ☆、例句:
  “Driver={Microsoft Access Driver (*.mdb)};Dbq=c: omepath\dbname.mdb;Uid=Admin;Pwd=pass; ”

  ⑵、dBase ODBC DSNless 连接:

  ☆、参数:Driver 设置值:{Microsoft dBASE Driver (*.dbf)}
  ☆、参数:Dbq 设置值:实际路径文件名称
  ☆、例句:
  “Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq=c: omepath\dbname.dbf; ”

  ⑶、Oracle ODBC DSNless 连接:

  ☆、参数:Driver 设置值:{Microsoft ODBC for Oracle}
  ☆、参数:Dbq 设置值:实际路径文件名称
  ☆、例句:
  “Driver={Microsoft ODBC for Oracle};Server=OracleServer.world;Uid=admin;Pwd=pass; ”

  ⑷、MS SQL Server DSNless 连接:

  ☆、参数:Driver 设置值:{SQL Server};
  ☆、参数:Server 设置值:服务器名称
  ☆、参数:Database 设置值:数据表名称
  ☆、参数:Uid 设置值:用户名称
  ☆、参数:Pwd 设置值:密码
  ☆、例句:
  “Driver={SQL Server};Server=servername;Database=dbname;Uid=sa;Pwd=pass; ”

  ⑸、MS Text Driver DSNless 连接:

  ☆、参数:Driver 设置值:{Microsoft Text Driver (*.txt; *.csv)}
  ☆、参数:Dbq 设置值:实际路径文件名称
  ☆、例句:
  “Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=c: omepath\;Extensions=asc,csv,tab,txt;Persist Security Info=False; ”

  ⑹、Visual Foxpro DSNless 连接:

  ☆、参数:Driver 设置值:{Microsoft Visual FoxPro Driver}
  ☆、参数:SourceType 设置值:DBC
  ☆、参数:SourceDB 设置值:实际路径文件名称
  ☆、例句:
  “Driver={Microsoft Visual FoxPro Driver};SourceType=DBC;SourceDB=c: omepath\dbname.dbc;Exclusive=No;”

  ⑺、MySQL DSNless 连接:

  ☆、参数:Driver 设置值:{mysql}
  ☆、参数:database 设置值:数据表名称
  ☆、参数:uid 设置值:用户名称
  ☆、参数:pwd 设置值:密码
  ☆、例句:
  “driver={mysql}; database=yourdatabase;uid=username;pwd=password;option=16386”

*******************************************************************

SQL语言简介

  在上一讲中我们介绍了连接外部数据库的方法,那么连接之后怎样对外部数据库进行读取、显示、增删、更新、查询等操作呢?这些操作需要通过外部数据库等对象调用SQL指令才能完成。
  ㈠、什么是SQL语言

  SQL(Structure Query Languge,结构化查询语言)是一种数据库专用的计算机语言,不管是Oracle、MS SQL 、Access、MySQL或其他公司的数据库,也不管数据库建立在大型主机或个人计算机上,都可以使用SQL语言来访问和修改数据库的内容。虽然不同公司的数据库软件多多少少会增加一些专属的SQL语法,但大体上,它们还是遵循ASNI(美国国家标准协会)制定的SQL标准。因为SQL语言具有易学习及阅读等特性,所以SQL逐渐被各种数据库厂商采用,而成为一种共通的标准查询语言。只要你学会SQL,即可操作各种数据库如Visual Foxpro、Access、dBase等等。总之,SQL语言是各种数据库都可以使用的数据库查询语言。
  SQL语言不仅仅具有查询数据库的功能,而且可以对数据库完成选取、增删、更新与跳转等各种操作。

  ㈡、SQL语言的组成

  SQL语言是由命令(函数)、子句、运算符、加总函数及通配符等组成,分述如下:

  1、命令
  SQL的命令可分成数据定义语言与数据操作语言,数据定义语言可用来建立新的数据库、数据表、字段及索引等,本教程不予介绍;另一为数据操作语言,可用来建立查询表、排序、筛选数据、修改、增删等动作。数据定义语言命令常用的有选择、添加、删除和修改这四种:

  ⑴、命令:SELECT
  中文意思:选择
  说明:用于找出合乎条件的记录
  ⑵、命令:INSERT
  中文意思:插入
  说明:用于增加一笔记录或合并两个数据表
  ⑶、命令:UPDATE
  中文意思:更新
  说明:用于更正合乎条件的记录
  ⑷、命令:DELETE
  中文意思:删除
  说明:用于删除合乎条件的记录

  2、子句
  子句是用于设定命令要操作的对象(即参数),SQL所用的子句如下:

  ⑴、子句:FROM
  中文意思:数据表
  说明:用于指定数据表
  ⑵、子句:WHERE
  中文意思:条件
  说明:用于设定条件
  ⑶、GROUP BY
  中文意思:分组(合并)
  说明:用于设定分组
  ⑷、ORDER BY
  中文意思:排序
  说明:用于设定输出的顺序及字段

  3、运算符
  子句参数中的运算符使子句构成不同的语法格式,如“字段1=''100''”、“字段1>''100''”等。运算符又分逻辑运算符与比较运算符。
  ◇逻辑运算符如下:

  ⑴、运算符:AND
  中文意思:并且
  说明:逻辑且
  ⑵、运算符:OR
  中文意思:或者
  说明:逻辑非
  ⑶、运算符:NOT
  中文意思:取反
  说明:逻辑非或逻辑反

  ◇比较运算符如下:

  ⑴、运算符:< 说明:小于
  ⑵、运算符:≤ 说明:小于等于
  ⑶、运算符:≥ 说明:大于等于
  ⑷、运算符:> 说明:大于
  ⑸、运算符:= 说明:等于
  ⑹、运算符:<> 说明:不等于
  ⑺、运算符:BETWEEN 说明:用于设定范围 中文意思:在...之间
  ⑻、运算符:LIKE 说明:用于通配设定 中文意思:如同
  ⑼、运算符:IN 说明:用于集合设定 中文意思:在...之内

  4、加总函数
  加总函数常常运用在命令的参数中,如:“SELECT SUM(数学),AVG(数学) FROM 成绩单”。
  ⑴、加总函数:AVG
  中文意思:平均
  说明:用于求指定条件的平均
  ⑵、加总函数:COUNT
  中文意思:数量
  说明:用于求指定的数量
  ⑶、加总函数:SUM
  中文意思:和
  说明:用于求指定条件的和
  ⑷、加总函数:MAX
  中文意思:最大值
  说明:用于求指定条件的最大值
  ⑸、加总函数:MIN
  中文意思:最小值
  说明:用于求指定条件的最小值

  5、通配符

  ⑴、通配符:% 意义:任何长度的字符串(包括0)
  ⑵、通配符:_ 意义:下划线表示任何一个字符
  ⑶、通配符:[] 意义:中括号表示某个范围内的一个字符

  在下一讲将说明SQL语言是怎样把命令(函数)、子句、运算符、及加总函数等组合在一起的。

*************************************************************************

嵌入式SQL的应用

  SQL语句可以单独在数据库系统本身中执行,但如果运用在其他编程工具所编制的程序中,一般不能单独执行,而要把SQL语句嵌入到高级语言(如易语言)中使用,通过高级语言的命令和方法来调用之,此时SQL称为嵌入式SQL。调用SQL语句的程序称为宿主程序,在易语言中一般是把SQL语句作为宿主程序的唯一参数来直接处理。嵌入式SQL在使用上有一些规定,在易语言中目前的版本规定如下:
  ⑴、在程序中要区分SQL语句和宿主语言的语句。在易语言中好区分,因为SQL语句形式是英文的,而易语言是中文的,但在实际应用时仍然有可能会混乱,所以易语言要把SQL语句转化为文本型才能调用,即嵌入式SQL语句两边要用双引号来标示。

  ⑵、允许SQL语句使用宿主程序的变量,但使用时要将宿主程序的变量跟外部数据库中表格的字段名区别开来,区别方法如下:
  ①、在易语言中要将变量类型转化为文本型变量才能被SQL文本相加使用,比如下面的例子中有一个叫“数字1”的整数类型变量,插入到SQL文本中是这样表达:

  外部数据库1.查询 (“select * from chj where ” + 组合框1.内容 + “=” + 到文本 (数字1))

  ②、包含字段名的SQL文本两边加双引号,变量名不能在双引号内,如上例。

  ⑶、要将字段名跟字段值区别开来,区别方法如下:
  ①、对于文本类型的字段,在其字段值两边要加上“''”号标示其文本值,代表语法是:字段名称=‘文本值’。如下:

  外部数据库1.查询 (“select * from chj where 姓名=''山大王''”)

  又如下面“查找编辑框.内容”中的字段值是文本型,嵌入式SQL语句如下:

  外部数据库1.查询 (“select * from chj where 姓名==” + “''” + 查找编辑框.内容 + “''”)

  ②、对于数字类型的字段,在SQL语句中表示其字段值,两边不加符号标示,代表语法是:字段名称=数字值。如下两例:

  外部数据库1.查询 (“select * from chj where ” + 组合框1.内容 + “=” + 查找编辑框.内容)

  外部数据库1.查询 (“select * from chj where 学号=17”)

  ③、对于日期时间类型的字段,在其字段值两边要加上“#”号标示其时间值,代表语法是:字段名称=#时间值#。如下两例:

  外部数据库1.查询 (“select * from chj where 入学时间 BETWEEN #2001-01-01# and #2002-01-01#”)

  外部数据库1.查询 (“select * from chj where ” + 组合框1.内容 + “=” + “#” + 查找编辑框.内容 + “#”)

  ④、也可以将SQL语句中的字段名(尤其是中文名)可用中括号括住,如:[字段名]。

  
  ⑷、SQL语句要用半角输入法输入,否则可能会出错。

  那么在易语言中怎样调用SQL语句呢?一般是在外部数据库对象(控件)的方法中调用,试概括如下:
  ⑴、对外部数据库进行查询的方法。
  对外部数据库的查询就是在对外部数据库不加编辑改动的前提下,只通过记录集来对数据库进行显示、查询、筛选、排序和记录集的合并等操作。
  所有查询类的方法起源于下面这个语句,其他查询类语句是对这个语句的调用(将此语句作为唯一的参数),该语句如下:

  外部数据库.查询 (查询类SQL语句)

  也可这样表达:

  外部数据库.查询 (“SELECT...FROM...[WHERE]...[GROUP BY]...[ORDER BY]... ”)

  该方法是对当前被打开数据库进行数据查询,返回的结果称为“记录集句柄”(即记录集的标记)。注意当不再使用此记录集时,必须使用“关闭记录集”将其关闭,如果失败,返回0。在易语言中,将以上语句等同于记录集句柄以作为其他查询类语句的参数。为了使该参数在所有子程序中都能应用,我们一般把它设置为整数型全局变量,并将其值设置如下:

  记录集句柄=外部数据库.查询 (查询类SQL语句)

  由于易语言要把SQL语句转化为文本型才能调用,所以嵌入式SQL语句两边要有双引号,例句:
  记录集句柄 = 外部数据库1.查询 (“select * from chj ”)
  ※ “chj”是外部数据库中一个表的名称

  又如,欲得到排序的记录集,应象下面这样赋值:

  记录集句柄 = 外部数据库1.查询 (“SELECT * FROM chj ORDER BY 语文 DESC”)

  现将外部数据库控件中其他的查询类方法列举如下:

  ①、外部数据库.重新查询 (记录集句柄) 即:
  外部数据库.重新查询 (外部数据库.查询 (查询类SQL语句))

  例句:外部数据库1.重新查询 (外部数据库1.查询 (“select * from chj ”))

  ②、外部数据库.首记录前 (记录集句柄) 即:
  外部数据库.首记录前 (外部数据库.查询 (查询类SQL语句))

  例句:外部数据库1.首记录前 (记录集句柄)

  ③、外部数据库.尾记录后 (记录集句柄)
  ④、外部数据库.到首记录 (记录集句柄)
  ⑤、外部数据库.到尾记录 (记录集句柄)
  ⑥、外部数据库.到前一记录 (记录集句柄)
  ⑦、外部数据库.到后一记录 (记录集句柄)
  ⑧、外部数据库.读 (记录集句柄,字段名称或位置)

  例句:语文编辑框.内容 = 到文本 (外部数据库1.读 (记录集句柄, “语文”))

  ⑵、对外部数据库进行编辑的方法。
  所谓对外部数据库的编辑,就是变更改动外部数据库本身,包括添加、更新、删除等,对数据库进行编辑不必通过记录集。所有非查询类SQL语句都嵌入下面这个语句来执行:

  外部数据库.执行 (非查询类SQL语句)

  ①、添加记录,其语法如下:

  外部数据库.执行 (“insert into 表名称(字段1,字段2...) values (字段值1,字段值2...) ”)

  例句:
  外部数据库1.执行 (“INSERT INTO chj ” + “(学号,姓名,语文,数学,英语)” + “ valueS ” + “(” + 学号编辑框.内容 + “,''” + 姓名编辑框.内容 + “'',''” + 语文编辑框.内容 + “'',''” + 数学编辑框.内容 + “'',''” + 英语编辑框.内容 + “'')”)

  ②、更新记录,其语法如下:

  外部数据库.执行 (“UPDATE 表名称 SET 字段1=字段值1,字段2=字段值2...WHERE 条件式”)

  例句:
  外部数据库1.执行 (“UPDATE chj SET 学号=” + “''” + 学号编辑框.内容 + “'',” + “姓名=” + “''” + 姓名编辑框.内容 + “'',” + “语文=” + “''” + 语文编辑框.内容 + “'',” + “数学=” + “''” + 数学编辑框.内容 + “'',” + “英语=” + “''” + 英语编辑框.内容 + “'' ” + “WHERE 姓名=” + “''” + 姓名1 + “'' ” + “AND 语文=” + 语文1 + “AND 数学=” + 数学1 + “AND 英语=” + 英语1 + “AND 学号=” + 学号1)

  ③、删除记录,其语法如下:

  外部数据库.执行 (“DELETE * FROM 表名称 WHERE 条件式”)

  例句:
  外部数据库.执行 (“外部数据库1.执行 (“DELETE * FROM chj ” + “WHERE 姓名=” + “''” + 姓名1 + “'' ” + “AND 语文=” + 语文1 + “AND 数学=” + 数学1 + “AND 英语=” + 英语1 + “AND 学号=” + 学号1)”)

时间: 2024-08-21 14:02:43

关于ODBC数据源连接文本的相关文章

使用ODBC数据源连接错误

问题描述 第一次使用oracle,在本机装了oracle11g,将数据库添加到了ODBC数据源,开了VS以后添加连接测试成功,如图但是添加连接字符串之后报错:OdbcConnectionconn=newOdbcConnection("Dsn=Test;uid=scott;pwd=*******");conn.Open();报错:"System.AccessViolationException"类型的未经处理的异常在System.Data.dll中发生其他信息:尝试读

用ODBC数据源连接为啥老失败?

问题描述 packagedcxt.util;importjava.sql.*;publicclassDataBase{publicConnectionconn;publicStatementstmt;publicResultSetrs=null;publicStringsqlStr="";publicDataBase(){this.connect();}publicbooleanconnect(){try{Class.forName("sun.jdbc.odbc.JdbcOd

win7 64位下 excel 连接odbc 数据源报错,32位下可以正常

问题描述 win7 64位下 excel 连接odbc 数据源报错,32位下可以正常 odbc数据源32位 excel 32位 配置的odbc数据源如图所示 在excel中 连接到odbc数据源 这种错误怎么解决 解决方案 你选错驱动了,这是Oracle的驱动,不是Access的. 解决方案二: WIN7 64位 ODBC连接Oracle 32位报错问题

ORACLE 10G ODBC数据源已添加成功,在VS2013的水晶报表里为何不能连接成功?

问题描述 ORACLE10GODBC数据源已添加成功,在VS2013的水晶报表里为何不能连接成功?系统是64位的 解决方案 解决方案二:你的项目生成目标系统的版本是32还是64?下载对应位的odbc驱动试试?解决方案三: 解决方案四:如果你想通过ODBC去连接ORACLE,要设置电脑的ODBC数据源解决方案五:控制面板->管理工具->数据源(ODBC)

php连接odbc数据源并保存与查询数据的方法_php技巧

本文实例讲述了php连接odbc数据源并保存与查询数据的方法.分享给大家供大家参考. 具体实现代码如下: 复制代码 代码如下: $connstr = "driver=microsoft access driver (*.mdb);dbq=".realpath("db.mdb");     $connid = odbc_connect($connstr,"","",sql_cur_use_odbc); $odbc_exec =

几种注册 ODBC数据源的方法

odbc|数据|数据源 几种注册 ODBC数据源的方法 国防科大 丁 浩 ODBC(Open Database Connectivity,开放式数据库互连)是一种应用程序接口 (API) 规范.它定义了一个标准例程集,使用它们应用程序可访问数据源中的数据.应用程序通过引用 API 的函数可以直接使用 ODBC,或利用数据访问对象 (DAO) 或远程数据对象 (RDO) 来使用ODBC.但是,在实现ODBC时,我们必须首先配置ODBC环境,进行数据源的注册,这样才能在对数据库进行编程时,对数据源进

关于数据源连接提供者和数据源连接

数据|数据源 我是初学ASP的,深入一点后,让我困惑不已的就是数据库的连接,我经常看到对于同一个Microsoft Access数据库使用两种方式,或是三种,甚至四种方式的连接,最让我不能理解的是这两种: <%Set conn=Server.CreateObject("ADODB.Connection")conn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=databasename;"%> &l

vb神童教程(续)--ODBC数据源简介

本文欢迎非商业用途的转载,但需要注明出自"编程入门网"及相应的网址链接. ODBC(开放式数据库连接)是一种应用程序的接口(API).这种接口提供了独立于任何的数据管理系统编写应用程序的能力.OCBC通过ODBC驱动程序提供了对不同的数据库供应商的一组应用程序接口来给特殊的数据库管理系统(DBMS).用户的应用程序使用这组API来调度ODBC驱动程序.然后驱动程序通过SQL语句同DBMS发生联系. 下面我们开始介绍ODBC数据源.在"我的电脑"中打开"控制

C++ Builder动态设定odbc数据源

本文以access为例 需要文件 odbcinst.h(bcb或vc的include目录) odbccp32.dll(winnt\system32\目录) implib.exe(通过dll生成lib库) coff2omf.exe (将coff库转化为omf库) 首先将上面文件拷贝到工程目录,执行下面命令: implib.exe odbccp32.lib odbccp32.dll coff2omf odbccp32.lib 下面程序的功能为当应用程序启动时,动态添加/修改一个指向当前目录的,名为t