全球FlexSim系统仿真中文论坛

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

作者: zorsite    时间: 2017-5-24 09:34
标题: 使用ODBC连接Access数据库
本帖最后由 zorsite 于 2017-5-24 09:42 编辑 5 Z0 j9 J$ K- E

* f! g% r; ]5 p2 V5 g' H. H[size=14.6667px]用户手册的Tutorial中有一篇是讲SQL的,不过它使用的是MySQL。[size=14.6667px][attach]3739[/attach]; c# L2 I; A7 S1 n9 ]( E! }* |5 x

; O; I4 Y# g- n0 \[size=14.6667px]现在我把这篇教程转为使用Access数据库。% E1 Z7 u" V! Z5 z) I6 v* F2 b) M

( L! g: K+ m4 ~; E[size=14.6667px]模型背景如下:" b) S/ e% ^; P( ?% p1 g# x
[size=14.6667px]发生器产生4种临时实体,进入4台处理器进行加工。每种临时实体在不同的处理器中加工时间不一样。
, v/ L; k2 f) ~7 Z) v4 R[size=14.6667px][attach]3740[/attach]
+ D  a% ?% p9 B! P  c# a* Y
" u9 i0 Z+ A6 f+ i( \
[size=14.6667px]我们可以通过建立一张全局表进行加工时间的定义,也可以使用外部数据库。* b8 B9 B; j* q9 K9 q/ r: }
[size=14.6667px]首先你得有一个数据库。使用ACCESS创建一个新的数据库,命名为flexsimdata。创建一张数据表,表名为processtimes,添加4个字段proc1、[size=14.6667px]proc2、[size=14.6667px]proc3、[size=14.6667px]proc4。8 L$ {, _; |6 _1 @7 n* a" `8 `

1 G. N2 }, I( h2 g$ ^
4 i# F& G6 P4 w+ t2 o5 _[size=14.6667px][attach]3741[/attach]
# O9 C# K; o2 n9 t( T
- X$ k" x) C5 y: K" a
[size=14.6667px]数据库建好了,能用Flexsim直接访问吗?答案是不能。应用程序想要访问某种数据库,必须针对此数据库软件编写相应的“驱动程序”。市面上数据库软件那么多,难道Flexsim公司要一一去编写驱动吗?显然不现实。而这个工作微软件已经完成了。% e6 z' p% L  {# g. h, m+ Q
[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对不同的数据库进行连接。
) e3 {* |/ e$ r4 F7 A[size=14.6667px]现在,我们在ODBC中为刚建立的ACCESS数据库建立一个连接。8 ]7 o. a( }% g+ N
[size=14.6667px]ODBC在控制面板--管理工具中可以找到。如果是64位ACCESS,参见[size=14.6667px]http://flexsimasia.com/viewthread.php?tid=6202&page=1&fromuid=610#pid19984。
+ r( q( x0 j- x. O- J[size=14.6667px][attach]3742[/attach]
/ u" ?( [! R) z9 J

' h$ q# O' g. l" ^+ i$ @[size=14.6667px][attach]3743[/attach]
3 E3 U4 m3 h  |" D: D+ {* F1 |

8 a* R7 Y0 @1 \; t( t8 G! M[size=14.6667px]数据源名可以和数据库同名,也可以不同名。Flexsim在同数据库进行连接时,需要使用在ODBC中设置的这个“数据源名”,而不再使用数据库的名字。[size=14.6667px]创建好数据库连接之后,可以在flexsim中使用dbopen命令打开该数据库。- y8 P  g! @1 `
[size=14.6667px]在处理器的“加工时间”中输入以下代码:
5 }* T3 Z0 Y9 Z* u& O[size=14.6667px]
  1. /**查询数据库*/% X- M4 I0 x) \4 D& }) n
  2. string sqlstr="select * from processtimes";
    ; g: h4 x$ _" C( r3 W
  3. dbopen("flexsimdata",sqlstr,0);1 b, y' E# ]4 m" v  H
  4. //dbviewtable;//查看被打开的表! G9 l0 w5 D+ O% Y4 n: }/ E, e4 @
  5. int row=item.Type;3 J7 c) S) S' q
  6. int col=ipopno(current,1);
    ' b, w3 n. K8 ~& ^; r7 B7 Y% f
  7. double protime=dbgettablenum(row,col);/ G% G% E0 U) p3 F# q! s' J1 g
  8. dbclose;4 B# v, i/ `- @$ O- V
  9. return protime;
复制代码
# X7 o' O: k  Y$ o
) ]3 C0 x. k8 X% F
[size=14.6667px]8 R0 K( M2 v- B- U5 L: Z
2 @1 A1 l1 v: x: |- f' g2 ^
[size=14.6667px]模型是用flexsim 17.1.2完成的,低版本的无法打开。/ @9 Z& S8 {( p8 H) v; z" O& {
[size=14.6667px][attach]3744[/attach]- \* t/ Y( F% Z

作者: 慧娴亚伦    时间: 2017-5-24 14:23
感谢加老师分享,补充一点雷区。$ O& Y% Y8 _: u/ x
1、FlexSim目前使用odbc只能对应系统版本,也就是说,64位系统装32位软件无法使用odbc;
" i% A3 d6 u; _! C& z; h( i2、如果使用的是access数据库,那么不止是系统版本要对应,office的版本也需要对应,也就是说如果要在64位系统用64位FlexSim还要再安装64位office(access),这样才能在odbc中正确的创建FlexSim可以调用的数据源(查看自己电脑office是否64位的可以看下图,在账户|关于XX中可以看到), d9 ~2 P+ A% q4 Y; k6 {/ c+ I0 @
[attach]3746[/attach]
6 b% B, ]' Q. C0 n# i8 E7 Z3 `3、创建数据源的执行程序名字叫做:odbcad32.exe(32位还是64位都是以32结尾),而他们所在的文件夹分别:7 v5 |4 _7 Q- n7 G% e. M5 ?
64位系统:C:\Windows\System32: z8 }: n# B2 j7 s$ k( t
32位系统:C:\Windows\SysWOW64
" a- V8 d: H( W3 p/ w" g5 B, a
$ w: i; a1 y- h. I  M# k, p是的。。。我没有写错,64位在32结尾;32位在64结尾(这个锅要微软背)。
, N0 m& F/ \, s大家可以用加老师推荐的方法来找,保证正确。
作者: lulu-luka    时间: 2017-5-25 00:37
前排支持~
作者: fenglin    时间: 2017-5-25 01:44

作者: 我很强壮    时间: 2017-6-8 13:57
谢加老师
作者: 慧娴亚伦    时间: 2017-7-7 11:21
6# 吴庆祺 . M# b, Y  ~& j; `

) n" J6 K9 B, y' w5 p6 I# w; }& a$ x
回复好像乱码了哟。
作者: 吴庆祺    时间: 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
谢谢: ~6 R0 }, p. H( r, e! ?- a





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