全球FlexSim系统仿真中文论坛

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

使用ODBC连接Access数据库

[复制链接]
跳转到指定楼层
1#
zorsite 发表于 2017-5-24 09:34:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zorsite 于 2017-5-24 09:42 编辑 - U/ k( Z; G( T, ^) p

" B  p. k7 u) I! f[size=14.6667px]用户手册的Tutorial中有一篇是讲SQL的,不过它使用的是MySQL。[size=14.6667px]/ k0 D8 c* c/ @2 U1 H

+ p3 A" ^% Q/ }& m8 k" ]* Z6 E0 d[size=14.6667px]现在我把这篇教程转为使用Access数据库。
8 c3 s; K" _) O; ?9 o
! ^" Y  d$ C+ b
[size=14.6667px]模型背景如下:
- D5 ^8 G; C5 V8 M[size=14.6667px]发生器产生4种临时实体,进入4台处理器进行加工。每种临时实体在不同的处理器中加工时间不一样。
  U* Z* O. G7 G! @0 c[size=14.6667px]( p6 m+ b( R# ~' V3 v
$ C4 K  G1 ]% H5 g) [/ a/ x
[size=14.6667px]我们可以通过建立一张全局表进行加工时间的定义,也可以使用外部数据库。8 b1 m5 l- u, x; ?( g& J/ d) n
[size=14.6667px]首先你得有一个数据库。使用ACCESS创建一个新的数据库,命名为flexsimdata。创建一张数据表,表名为processtimes,添加4个字段proc1、[size=14.6667px]proc2、[size=14.6667px]proc3、[size=14.6667px]proc4。3 t. Z) L/ o6 K/ t. L6 f; L1 q; ^/ u
* j7 ?$ h# V- s' q; c% p7 T
) r3 C0 \, }7 l/ h" T' q
[size=14.6667px]
4 ~& p% p- c1 @! u( I
8 k' ~% h1 o/ G& [
[size=14.6667px]数据库建好了,能用Flexsim直接访问吗?答案是不能。应用程序想要访问某种数据库,必须针对此数据库软件编写相应的“驱动程序”。市面上数据库软件那么多,难道Flexsim公司要一一去编写驱动吗?显然不现实。而这个工作微软件已经完成了。
( i3 l! `( t& u, N$ T% ^1 G[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对不同的数据库进行连接。3 S" y7 r5 w% S$ p
[size=14.6667px]现在,我们在ODBC中为刚建立的ACCESS数据库建立一个连接。* i% ?. p- n$ w. l
[size=14.6667px]ODBC在控制面板--管理工具中可以找到。如果是64位ACCESS,参见[size=14.6667px]http://flexsimasia.com/viewthread.php?tid=6202&page=1&fromuid=610#pid19984。0 X& [) [. b# R8 C* S! d  v
[size=14.6667px]
- L9 H. }  n7 K5 s
0 d9 O# k$ z8 Y8 F: J$ ^+ r
[size=14.6667px]
4 B6 m$ K; l. h. R+ b
5 }9 ?6 A' ]6 {% y  C) L* i3 f
[size=14.6667px]数据源名可以和数据库同名,也可以不同名。Flexsim在同数据库进行连接时,需要使用在ODBC中设置的这个“数据源名”,而不再使用数据库的名字。[size=14.6667px]创建好数据库连接之后,可以在flexsim中使用dbopen命令打开该数据库。  t6 R! l/ I/ l2 i  x4 c% u) x
[size=14.6667px]在处理器的“加工时间”中输入以下代码:
" f% e2 j& ?, b' V% j% P4 p% |[size=14.6667px]
  1. /**查询数据库*/
    3 q5 k2 Y+ e1 W9 z& S, D
  2. string sqlstr="select * from processtimes";
    " u! f: ~" {$ z0 r0 i+ s+ Q; G
  3. dbopen("flexsimdata",sqlstr,0);
      ?5 k1 Z1 M. D- t4 Y5 f% k
  4. //dbviewtable;//查看被打开的表& ~# p; L. Z3 X3 X8 R1 J0 A* W9 |
  5. int row=item.Type;7 Y% Y, d' K  ^# a) ^# o) U2 O$ Q
  6. int col=ipopno(current,1);/ Q6 F& J; f6 |* J3 H7 ^( Q4 |, E4 P" ?
  7. double protime=dbgettablenum(row,col);8 I; Q. i# E3 ]4 Z' z6 J1 c
  8. dbclose;) B/ k# E, T) P4 c4 w& M
  9. return protime;
复制代码
& [2 [6 k$ ], i% {5 R

; J. Y/ y) q/ L- q  h[size=14.6667px]  E5 q. c7 G% ^9 R7 Z9 ]

& @+ B/ E$ P% V0 u; g[size=14.6667px]模型是用flexsim 17.1.2完成的,低版本的无法打开。
6 I  {6 z4 T2 P8 q, n! u( Y2 Y[size=14.6667px]" j0 t0 ^: J& {  Y& L
2#
慧娴亚伦 发表于 2017-5-24 14:23:27 | 只看该作者
感谢加老师分享,补充一点雷区。6 W" w5 V+ G7 c: \0 j
1、FlexSim目前使用odbc只能对应系统版本,也就是说,64位系统装32位软件无法使用odbc;
% a7 _2 [; p# H+ X( t' h: L2、如果使用的是access数据库,那么不止是系统版本要对应,office的版本也需要对应,也就是说如果要在64位系统用64位FlexSim还要再安装64位office(access),这样才能在odbc中正确的创建FlexSim可以调用的数据源(查看自己电脑office是否64位的可以看下图,在账户|关于XX中可以看到)) W3 e& h0 d; I1 `! T3 \, G
! X# q. k" z" \$ ^- d$ n" J# \; K* ?
3、创建数据源的执行程序名字叫做:odbcad32.exe(32位还是64位都是以32结尾),而他们所在的文件夹分别:8 o, `8 w* L1 E& k* J- }
64位系统:C:\Windows\System32
: X; @% l! n; ^% z$ Q32位系统:C:\Windows\SysWOW64
' C( D# i2 n) `" B7 _
# T. @  \4 q8 \2 b+ J3 @0 p4 h8 P是的。。。我没有写错,64位在32结尾;32位在64结尾(这个锅要微软背)。
2 H. G0 L4 H1 U1 \大家可以用加老师推荐的方法来找,保证正确。
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# 吴庆祺 % j3 a7 ^: t6 S( p
3 a/ p, h1 J# _/ a/ c1 w, c5 M% r$ y  F
7 b3 H) `4 a  W" y
回复好像乱码了哟。
9#
shaon007 发表于 2020-5-8 11:26:10 | 只看该作者
666正想了解这一块
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

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