全球FlexSim系统仿真中文论坛

搜索
查看: 10226|回复: 9
打印 上一主题 下一主题

使用ODBC连接Access数据库

[复制链接]
跳转到指定楼层
1#
zorsite 发表于 2017-5-24 09:34:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zorsite 于 2017-5-24 09:42 编辑   I* N2 \. _- X/ H3 A
! u4 u- k! `8 |( l! T4 G: R$ h3 m
[size=14.6667px]用户手册的Tutorial中有一篇是讲SQL的,不过它使用的是MySQL。[size=14.6667px]
- f* z2 C3 o6 _4 u
$ {2 g* C/ I1 N5 u# f
[size=14.6667px]现在我把这篇教程转为使用Access数据库。3 W7 V2 C6 Q0 ?/ X2 D8 W9 R
! }4 g8 K- R; a( x
[size=14.6667px]模型背景如下:$ y3 ~6 A4 b" x: O: {- s5 p- x7 d$ ~
[size=14.6667px]发生器产生4种临时实体,进入4台处理器进行加工。每种临时实体在不同的处理器中加工时间不一样。- L# F+ k) ~, w4 f6 J& u4 s
[size=14.6667px]
  g6 I! J- T2 {$ q$ J) g3 n

. g) X  T$ C9 `. l[size=14.6667px]我们可以通过建立一张全局表进行加工时间的定义,也可以使用外部数据库。& k4 q/ @# `# h9 f  `0 o
[size=14.6667px]首先你得有一个数据库。使用ACCESS创建一个新的数据库,命名为flexsimdata。创建一张数据表,表名为processtimes,添加4个字段proc1、[size=14.6667px]proc2、[size=14.6667px]proc3、[size=14.6667px]proc4。
; E( r4 u, ~3 S/ b4 \5 q: c4 ~" M0 V! M& ^# r& u+ |% w9 A
- l5 Q1 \3 ^8 ~. c/ f
[size=14.6667px]" C. s- V! R) ^$ b! L, {
: ?) C% D7 ^& ?) c0 y: l1 g5 A- E# b
[size=14.6667px]数据库建好了,能用Flexsim直接访问吗?答案是不能。应用程序想要访问某种数据库,必须针对此数据库软件编写相应的“驱动程序”。市面上数据库软件那么多,难道Flexsim公司要一一去编写驱动吗?显然不现实。而这个工作微软件已经完成了。
2 w; T6 t+ F1 u7 y6 l2 h9 K[size=14.6667px]微软在操作系统中内置了一个叫做ODBC(Open Database Connectivity[size=14.6667px]开放数据库连接)的组件,这个组件可以和不同的数据库软件连接。[size=14.6667px]开放数据库互连(ODBC)是微软提出的数据库访问接口标准,其定义了访问数据库API的一个规范,这些API独立于不同厂商的DBMS,也独立于具体的编程语言。ODBC规范后来被X/OPEN和ISO/IEC采纳,作为SQL标准的一部分。也就是说,只要是遵循SQL标准的数据库软件,都可以和ODBC连接,并通过ODBC进行管理。这样一来,类似[size=14.6667px]Flexsim这样的软件要做的就是和ODBC这个中间件对接就好了,再由ODBC对不同的数据库进行连接。  M, ~0 G# E. h$ W7 n
[size=14.6667px]现在,我们在ODBC中为刚建立的ACCESS数据库建立一个连接。
0 }; M2 h0 l2 ^. g- ^1 L; x% Y[size=14.6667px]ODBC在控制面板--管理工具中可以找到。如果是64位ACCESS,参见[size=14.6667px]http://flexsimasia.com/viewthread.php?tid=6202&page=1&fromuid=610#pid19984。
  A, |/ G$ H! z3 [' b# a1 v[size=14.6667px]
' w; Q. x- {  w/ Q3 H- q: Q

" h4 B2 k* x: d1 R: R: H[size=14.6667px]
/ h) ~" ], i$ R3 k, c" ^. U

8 k4 f- V9 C0 P# r* v. W7 {1 A; J[size=14.6667px]数据源名可以和数据库同名,也可以不同名。Flexsim在同数据库进行连接时,需要使用在ODBC中设置的这个“数据源名”,而不再使用数据库的名字。[size=14.6667px]创建好数据库连接之后,可以在flexsim中使用dbopen命令打开该数据库。6 w* c- L, K) u9 R
[size=14.6667px]在处理器的“加工时间”中输入以下代码:
' v, u# ^1 E4 ]4 O1 M3 D7 F[size=14.6667px]
  1. /**查询数据库*/
    ; M! l4 @7 ?) y$ a& x  j
  2. string sqlstr="select * from processtimes";
    1 [9 b& A9 ~/ U' A$ I' C6 y
  3. dbopen("flexsimdata",sqlstr,0);
      ^6 t5 I7 F0 [* G( C% x2 K
  4. //dbviewtable;//查看被打开的表
    ( `# l/ ?; M# d. T( @; r
  5. int row=item.Type;( i8 N/ d/ o7 H% f; o6 k* r) c- O
  6. int col=ipopno(current,1);
    3 h8 I: c, C# W/ ~
  7. double protime=dbgettablenum(row,col);
    5 R7 t7 x- x1 k
  8. dbclose;; e5 A2 w: [* G; w" j# `# Q6 m
  9. return protime;
复制代码
+ M2 l( k/ J2 \. @+ a
# B7 G2 o! ^% ]4 |1 d' T3 r/ [
[size=14.6667px]) W" M& _# R6 |
" e& T* w. f9 {- v
[size=14.6667px]模型是用flexsim 17.1.2完成的,低版本的无法打开。/ v7 ]% C+ G) _' W
[size=14.6667px]
  l, E7 j+ F* D! A  N( Y9 N" K4 ?
2#
慧娴亚伦 发表于 2017-5-24 14:23:27 | 只看该作者
感谢加老师分享,补充一点雷区。
: H6 W; h. d. Q1 ^* j! u! f1、FlexSim目前使用odbc只能对应系统版本,也就是说,64位系统装32位软件无法使用odbc;8 X, [. g9 N( ?: r
2、如果使用的是access数据库,那么不止是系统版本要对应,office的版本也需要对应,也就是说如果要在64位系统用64位FlexSim还要再安装64位office(access),这样才能在odbc中正确的创建FlexSim可以调用的数据源(查看自己电脑office是否64位的可以看下图,在账户|关于XX中可以看到)0 \# a- s1 v) T

/ a  Y- k2 X4 S3 @9 V3 ?3、创建数据源的执行程序名字叫做:odbcad32.exe(32位还是64位都是以32结尾),而他们所在的文件夹分别:
6 P9 O4 T$ m0 Z1 Z! S# F- f2 g" Q/ k64位系统:C:\Windows\System32
' I; ^- m6 \( ?6 d5 Z+ L1 w32位系统:C:\Windows\SysWOW64: P2 f% k$ k  T, B5 i& o
+ T9 ^+ @5 ]8 K/ q! ?% _9 k
是的。。。我没有写错,64位在32结尾;32位在64结尾(这个锅要微软背)。
% D7 h. T. M$ y" l9 R" |大家可以用加老师推荐的方法来找,保证正确。
3#
lulu-luka 发表于 2017-5-25 00:37:47 | 只看该作者
前排支持~
4#
fenglin 发表于 2017-5-25 01:44:24 | 只看该作者
5#
我很强壮 发表于 2017-6-8 13:57:00 | 只看该作者
谢加老师
6#
吴庆祺 发表于 2017-7-7 14:38:09 | 只看该作者
鑰佸笀闂笅odbc娌℃湁64浣嶇殑鎬庝箞鍔
7#
慧娴亚伦 发表于 2017-7-7 11:21:49 | 只看该作者
6# 吴庆祺
- P2 p$ I; P' z: A  v; t: N
8 J' o  s  t/ l8 J. `3 h* w( A+ m" {; B: X
回复好像乱码了哟。
9#
shaon007 发表于 2020-5-8 11:26:10 | 只看该作者
666正想了解这一块
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|全球FlexSim系统仿真中文论坛 ( 京ICP备14043114号-2 )

GMT+8, 2025-9-2 00:52 , Processed in 0.073242 second(s), 14 queries .

Powered by Discuz! X3.3© 2001-2013 Comsenz Inc.

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