全球FlexSim系统仿真中文论坛

标题: 使用ODBC连接Access数据库 [打印本页]

作者: zorsite    时间: 2017-5-24 09:34
标题: 使用ODBC连接Access数据库
本帖最后由 zorsite 于 2017-5-24 09:42 编辑
: Z, h+ _. @- m6 y8 r6 o+ H% U) g5 c# ^4 m3 i
[size=14.6667px]用户手册的Tutorial中有一篇是讲SQL的,不过它使用的是MySQL。[size=14.6667px][attach]3739[/attach]
! D& u; l+ Z( r$ X
0 q0 }9 c) j* F# F3 `4 E9 m* {
[size=14.6667px]现在我把这篇教程转为使用Access数据库。
5 c0 ^( Z. V7 a0 K# T

  G2 G. Y. D# I4 i( w[size=14.6667px]模型背景如下:
. [5 e6 S2 Q9 x* E[size=14.6667px]发生器产生4种临时实体,进入4台处理器进行加工。每种临时实体在不同的处理器中加工时间不一样。! R+ z1 s7 ~9 J, m
[size=14.6667px][attach]3740[/attach]2 s. N3 w: p; |/ c$ ~

1 q6 c# b- g; f! ~" M[size=14.6667px]我们可以通过建立一张全局表进行加工时间的定义,也可以使用外部数据库。
! Z4 g' B* F8 u9 U& q6 a; ~[size=14.6667px]首先你得有一个数据库。使用ACCESS创建一个新的数据库,命名为flexsimdata。创建一张数据表,表名为processtimes,添加4个字段proc1、[size=14.6667px]proc2、[size=14.6667px]proc3、[size=14.6667px]proc4。
8 ]. a- r  k8 E  q6 J7 P8 Z% I- p9 |

+ f# g8 i- U8 Z+ f7 [* m1 W4 [[size=14.6667px][attach]3741[/attach]
* g! i5 k& Z; [7 l. H. D: U" X( M
( e/ v' y& }4 K; r! _
[size=14.6667px]数据库建好了,能用Flexsim直接访问吗?答案是不能。应用程序想要访问某种数据库,必须针对此数据库软件编写相应的“驱动程序”。市面上数据库软件那么多,难道Flexsim公司要一一去编写驱动吗?显然不现实。而这个工作微软件已经完成了。) _  |! E+ n% [0 f, 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对不同的数据库进行连接。
$ H+ H: V* M5 T[size=14.6667px]现在,我们在ODBC中为刚建立的ACCESS数据库建立一个连接。
4 F1 ~/ D* u$ b/ C; S[size=14.6667px]ODBC在控制面板--管理工具中可以找到。如果是64位ACCESS,参见[size=14.6667px]http://flexsimasia.com/viewthread.php?tid=6202&page=1&fromuid=610#pid19984。
% Z! P- Q$ \) T; X6 `2 B- v/ a[size=14.6667px][attach]3742[/attach]
2 Z! I6 Q( [7 @- Y

; @: \- H3 V9 R2 z[size=14.6667px][attach]3743[/attach]
  t( ^+ l$ h$ T# P8 d
' B) d- J! W: K$ M) h: w, ~7 m
[size=14.6667px]数据源名可以和数据库同名,也可以不同名。Flexsim在同数据库进行连接时,需要使用在ODBC中设置的这个“数据源名”,而不再使用数据库的名字。[size=14.6667px]创建好数据库连接之后,可以在flexsim中使用dbopen命令打开该数据库。
: C+ ?9 \5 \2 j[size=14.6667px]在处理器的“加工时间”中输入以下代码:' ?: t4 Y1 t' d# y( x
[size=14.6667px]
  1. /**查询数据库*/: A- y: j2 O& O! @* a
  2. string sqlstr="select * from processtimes";
    3 j7 l1 F: P) z0 t& r; q
  3. dbopen("flexsimdata",sqlstr,0);
    5 ~" {" e. U, c- l/ U; J
  4. //dbviewtable;//查看被打开的表
    / P( W: x5 |+ R: Z5 D
  5. int row=item.Type;
    9 E( g+ S2 Y) \6 S5 G4 {! r! {
  6. int col=ipopno(current,1);
    3 D$ U  k( Q- k2 S4 b' g4 W/ q
  7. double protime=dbgettablenum(row,col);8 M6 i8 ~3 z" O. g# }
  8. dbclose;3 G3 y' V! J( B: K" o7 i
  9. return protime;
复制代码

  \, b* q3 J+ k8 e. V

7 _) @9 _6 ^( J% w9 ^; ?  w[size=14.6667px]: P4 G8 |$ x' k: q8 f2 x
4 ?& X+ U& G& n8 S
[size=14.6667px]模型是用flexsim 17.1.2完成的,低版本的无法打开。4 v% ?- R0 f2 T8 l4 ^$ w
[size=14.6667px][attach]3744[/attach]& f: I2 _8 U  ^! S+ ]

作者: 慧娴亚伦    时间: 2017-5-24 14:23
感谢加老师分享,补充一点雷区。0 \4 ~$ H- X# i$ c  p8 g. Y
1、FlexSim目前使用odbc只能对应系统版本,也就是说,64位系统装32位软件无法使用odbc;9 K8 `1 Y* E. l! W/ @* i  X1 N
2、如果使用的是access数据库,那么不止是系统版本要对应,office的版本也需要对应,也就是说如果要在64位系统用64位FlexSim还要再安装64位office(access),这样才能在odbc中正确的创建FlexSim可以调用的数据源(查看自己电脑office是否64位的可以看下图,在账户|关于XX中可以看到)% P' C  b7 u; \1 E6 Z
[attach]3746[/attach]+ \8 f+ T2 }2 r6 N0 S& T* P0 [
3、创建数据源的执行程序名字叫做:odbcad32.exe(32位还是64位都是以32结尾),而他们所在的文件夹分别:3 @/ S3 o# @2 j  H2 E$ y4 H
64位系统:C:\Windows\System32
. c2 ?% ?4 I  c# ~* C; i1 |' P32位系统:C:\Windows\SysWOW64
9 @5 w2 W- b5 {3 a6 Q9 N5 Q2 q" q
. G* z& G6 x) t" |- j7 h6 M是的。。。我没有写错,64位在32结尾;32位在64结尾(这个锅要微软背)。
' v3 m  w( R( [3 ~大家可以用加老师推荐的方法来找,保证正确。
作者: lulu-luka    时间: 2017-5-25 00:37
前排支持~
作者: fenglin    时间: 2017-5-25 01:44

作者: 我很强壮    时间: 2017-6-8 13:57
谢加老师
作者: 慧娴亚伦    时间: 2017-7-7 11:21
6# 吴庆祺
# k/ z  b3 R( S3 \& Z' j% {8 a2 U0 ]5 }* u2 ~; l& G

4 I( J/ R* j. d: B2 x2 U回复好像乱码了哟。
作者: 吴庆祺    时间: 2017-7-7 14:38
鑰佸笀闂笅odbc娌℃湁64浣嶇殑鎬庝箞鍔
作者: Lucy    时间: 2018-1-18 14:29
学习了
作者: shaon007    时间: 2020-5-8 11:26
666正想了解这一块
作者: superyangkk    时间: 2020-7-3 23:14
谢谢: s8 d+ E: U8 H' h





欢迎光临 全球FlexSim系统仿真中文论坛 (http://www.flexsimasia.com/) Powered by Discuz! X3.3