爱问知识人 爱问教育 医院库

[GIS]VB MO的环境下如何实现对外部数据库的调用?

首页

[GIS]VB+MO的环境下如何实现对外部数据库的调用?

如题
数据库为ACCESS的或者SQL的都可以
最好有源代码

提交回答
好评回答
  • 2018-03-28 12:29:54
      1、VB里连接数据库,需要使用ADODB。Connection和ADODB。RecordSET,你需要在共成立引用Microsoft ActiveX Data Objects 2。8 Library。当然,你的版本可能不是2。8,而是别的。操作方法是,在VB里选择"Project"->"References",选上上面的组件。
       2、引用后,在需要使用ADODB的过程或函数里,定义ADODB。Connection和ADODB。RecordSet的变量,并建立实例。如 Dim oCn as new Adodb。Connection Dim oRs as new Adodb。
      RecordSet 3、为Connection指定连接参数,并打开连接 oCn。ConnectString = "Provider=Microsoft。Jet。OLEDB。4。0;Data Source=你的access数据库全路径" oCn。
      Open 4、编写要读取数据的SQL语句,用oRs获取数据 Dim sSQL as string sSQL = "SELECT * FROM 表名" oRs。Open sSQL,oCn,adOpenDynamic,adLockReadOnly 后面的两个参数需要根据你打开的要求来改变。
      比如adLockReadOnly是只读方式打开 5、通过oRs来访问数据,如读、改、更新或者删除 读: Dim sName as string sName = oRs。Field(1)。value '取第一个字段的值 改写并更新: oRs("Name") = "新值" oRs。
      update 删除: oRs。Delete 注意:oRs是一个集合,你可以找找ADODB。RecordSet的参考来获得详细信息。 6、扫尾 '关闭数据集 ose '关闭连接 oCn。
      Close '释放对象 set oRs = nothing set oCn = nothing 7、实例 ADO常用方法 准备工作 ======== Dim conn As New ADODB。Connection '创建一个 Connection 实例,在这里使用New等于将Dim和Set合并为一段代码执行 Dim rs As ADODB。
      Recordset '创建一个 Recordset 实例,不使用New 是因为,经常需要重复使用Set,因此没必要在这里使用 Dim CnStr As String, Sql As String '创建两个字符串变量分别存放两个集合的SQL语句代码段 1、装载数据库(不属于Recordset集合) ============= Dim FileNamw$, DbIp$, DbName$, DbUser$, DbPw$ '以上5个字符串变量分别表示文件路径和文件名、数据库地址、数据库名、数据操作员用户名、操作员密码 FileName = App。
      Path & "\'数据库名'" DbIp = "数据库地址" DbName = "数据库名" DbUser = "数据操作员用户名" DbPw = "操作员密码" '以上变量根据数据库类型的不同而不同,有可能只需要1至两个变量 '1)连接Access数据库: '------------------- CnStr = "PROVIDER= t。
      oledb。3。51;persist security info =false;data source=" & FileName & ";Jet OLEDB:Database Password=" & DbPw '2)连接Oracle数据库: '------------------- CnStr = "PROVIDER=MSDAORA。
      1;Password=" & DbPw & ";User ID=" & DbUser & ";Data Source=" & FileName & ";Persist Security Info=True" '其中: 'PASSWORD: 密码 'User ID: 用户号 'Data Source: 数据库名 'Persist Security Info: 'Provider: '3)连接VF的DBF库: '---------------- CnStr = "PROVIDER=MSDASQL。
      1;Persist Security Info=False;Driver={Microsoft Visual FoxPro Driver};UID=" & DbUser & ";SourceDB=" & FileName & ";SourceType=DBF;Exclusive=No;BackgroundFetch=Yes;Collate=Machine;" '4)连接SQL的数据库 '------------------ CnStr = "PROVIDER=MSDataShape;Data PROVIDER=MSDASQL;uid=" & DbUser & ";pwd=" & DbPw & ";DRIVER=SQL Server;DATABASE=" & DbName & ";WSID=GQSOFT;SERVER=" & DbIP '也可以使用这段简易代码 CnStr = "Provider=SQLOLEDB;Data Source=" & DbIp & ";DATABASE=" & DbName & ";UID=" & DbUser & ";pwd=" & DbPw Conn。
      Open cnstr '使用 Connection 集合的 Open 方法 与数据库建立连接 2、Recordset集合的常用方法 ========================== '1)打开一个表 '------------ Sql = "select * from 表名" 'SQL查询语句 Set rs = New ADODB。
      Recordset '新建一个实例 rs。Open Sql, conn '使用 Open 方法打开数据库中的一个表 '注意,这种打开方式只能使用 rs。MoveNext (即,向后移动行坐标)而不能像其他方向,并且不能修改数据内容 ' 'rs。
      Open Sql, conn,1 '虽然只加了个“1”,但这种方法可以向任何方向移动行坐标。 ' '以下参数代表了这个可选值的含义 '0 = adOpenForwardOnly (默认值)打开仅向前类型游标。 '1 = adOpenKeyset 打开键集类型游标。
       '2 = adOpenDynamic 打开动态类型游标。 '3 = adOpenStatic 打开静态类型游标。 ' '虽然使用以上方法可以可以实现行坐标(游标)的任意移动,但是仍然无法写入数据。因此需要进一步的对Open 方法进行完善 'rs。
      Open Sql, conn, 1, 3 '后面的3是确定读写权限的 '以下参数代表了这个可选值的含义 '1 = adLockReadOnly (默认值)只读 — 不能改变数据。 '2 = adLockPessimistic 保守式锁定(逐个) — 在编辑时立即锁定数据源的记录。
       '3 = adLockOptimistic 开放式锁定(逐个) — 只在调用 Update 方法时才锁定记录。 '4 = adLockBatchOptimistic 开放式批更新 — 用于批更新模式(与立即更新模式相对)。 ' '2)读写数据 '---------- '增加一行记录并对新记录的内容进行修改并保存可以如下写法 rs。
      AddNew '增加一行记录 rs("。。。")="。。。" '数据读写操作 。。。 rs。UpDate '保存写入资料,如果使用只读权限,则不能使用这个方法 rs。Close '这个方法用来关闭你所代开的表,如果不使用这个方法也可以,但是数据库仍然认为你在对标进行锁定,可造成数据库负担过重 2、对数据进行筛选和排序 ======================= Sql = "select * from 表名" 'SQL查询语句 '以上为打开一个表的所有内容 Sql = "select top 50 * from 表名" 'SQL查询语句 '以上为只打开前50行的记录 Sql = "select top 50 列名1,列名2,列名5 from 表名" 'SQL查询语句 '以上为只打开前50行的记录,并且只打开第1、2、5列数据 Sql = "select * from 表名 where 列名1='" & 字段 & "'" 'SQL查询语句 '以上为一个简单的筛选,表示打开的内容必须符合[列名1='" & 字段 & "'"]的内容 '需要注意的是,数据库列的类型必须匹配,比如字符串类型需要以单引号括起 '而数字类型则不能用单引号括起 '另外SQL语句还支持通配符,例如 列名1 like '%" & 字段 & "%'" 表示包含[字段] '在表达式中的匹配 '? _(下划线) 任何单一字符 '* or % 零个或多个字符 '# 任何单一数字(0 — 9) '[charlist] 任何在字符表中的单一字符 '[!charlist] 任何不在字符表中的单一字符 '注:根据数据库的不同?、_和*、%的应用有所差别,比如SQL只使用% 和 _ 分别代表多个字符和单一字符 Sql = "select * from 表名 where 列名1='" & 字段 & "' ORDER BY 字段1 ASC" '对查询结果进行升序排列 Sql = "select * from 表名 where 列名1='" & 字段 & "' ORDER BY 字段1 DESC" '对查询结果进行降序排列 Sql = "select * from 表名 where 列名1='" & 字段 & "' ORDER BY 字段1 DESC, ORDER BY 字段2 DESC" '对查询结果进行多维降序排列(速度奇慢,不推荐使用) 3、Recordset集合的常用属性方法 ============================== rs。
      BOF '是否游标在最上边 rs。EOF '是否游标在最下边 rs。RecordCount '记录集的行数(如果使用像前类型的游标,可能返回不准确) rs。AddNew '新建一行记录 rs。Update '保存当前行被修改的记录 rs。
      Delete '删除当前行 rs。Close '关闭记录集 4、Fields集合的一些属性的解释 ============================= '以下为简写,正常情况需要rs。Fileds。。。。但是Fields属于Recordset的一个默认集合,因此可以省略 rs() '括号内可以是列名也可以是列的序号例如:rs("姓名")、rs(3) 都是是可以的 rs(3)。
      Name '返回列名 rs(3)。Type '返回列的类型 rs(3)。Value '返回当前行的值 rs。Fields。Count '返回列数。

    即***

    2018-03-28 12:29:54

其他答案

类似问题

换一换
  • VB 相关知识

  • 电脑网络技术
  • 电脑网络

相关推荐

正在加载...
最新问答 推荐信息 热门专题 热点推荐
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200

热点检索

  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 173-192
返回
顶部
帮助 意见
反馈

确定举报此问题

举报原因(必选):