使用InTouch的SQL Access把数据记录到Microsoft(MS)Access 数据库
摘要
本文详细的描述了如何配置Micsoft Access 2000 ODBC数据源名称(DSN)及如何使用InTouch当中的SQL Access把数据记录到Microsoft(MS)Access 数据库当中。本文包含的图片是从Window200 Server计算机上被抓取的。如果你使用的不是该操作系统,图片会和本文中的不一样。
术语
在你开始阅读以下程序之前,请先自己熟悉一些术语及它们的定义,本文中将会使用到它们:
术语 | 定义 |
Database(数据库) | 包含数据表的集合 |
Table(表) | 包含行(数据库记录) 和 列 (数据库字段) 的信息 |
Bind List(绑定表) | InTouch标记和数据库表列之间的映射 |
Table Template(表模板) | 定义表列和数据类型. 当你创建新表时将会用到表模板. |
Data Source(数据源) | 把数据库与ODBC驱动联系在一起的一个别名 |
ODBC | 全称为“Open DataBase Connectivity.” 是一个Microsoft标准允许在不同的数据库格式之间进行内部联接 |
为Microsoft Access配置SQL 访问
下面的几步展示了如何为Microsoft Access配置SQL访问。
1. 启动MS Access.
a. 创建新的数据库表或使用一个现存的数据库表.
b. 记下数据库文件名(举例: SQLAccessData.mdb), 表名和字段,字段的数据类型,字段尺寸这些都会在以后用到。
2. 如果你还没有在Intouch中安装SQL ,就安装SQL Access Manager
3. 如果有必要, 安装MS Access 2000 ODBC驱动
a. 启动ODBC Data Source Administrator.
b. 选择开始, 程序,管理工具,数据源 (ODBC).
o ODBC Data Source Administrator 对话框显示如下 (表 1).
表1: The ODBC Data Source Administrator对话框
c. 在ODBC Data Source Administrator对话框, 点击Add按钮建立一个新的数据源。
o “Create New Data Source”对话框如(表 2) 显示
o 修改一个现存MS Access Data源,可以点击表1中的“Configure”按钮
表 2: The Create New Data Source 对话框
d. 一旦指定了一个新的或已存的数据源,ODBC Microsoft Access 安装对话框将出现 (表 3)
表 3: The ODBC Microsoft Access 安装对话框
e. 键入DSN名称(例如: SQLAM_Access),然后点Select按钮
o 将显示选择数据库对话框(表 4)
f. 指定一个MS ACESS数据库 (例: C:\Intouch Applications\SQLAccess Test\Test.MDB).
g. 点击确定按钮.
表 4: 选择数据库对话框
o 数据库选择后, 数据库将显示在ODBC Microsoft Access安装对话框中 (表 5).
表 5: 选择数据库对话框-数据库选择
4.创建一个InTouch的应用程序,其中的标记名和MS Access数据库中的列名
相同。使用下列标记名类型与MS Access数据库中的数据类型相匹配。
Tag 类型 | MS Access 数据类型 |
Memory Integer | Short and Long |
Memory Real | Float4 and Float8 |
Memory Message | Text |
5. 创建以下标记名用于SQL 脚本:
标记名及标记类型
o ConnectionID - Memory Integer
o ResultCode - Memory Integer
o ErrorMsg - Memory Message
o TableName - Memory Message
o TemplateName - Memory Message
o BindList - Memory Message
o WhereExpr - Memory Message
o OrderByExpr - Memory Message
6. 创建一个InTouch窗口用于向显示和输入数据库中的数据。创建一些触动按钮并且做动作脚本链接,链接中的脚本如下所示
Connect 按钮(连接数据库)
ResultCode = SQLConnect( ConnectionId, "DSN=<MyDSN>" );
TableName = "<MyTable>";
TemplateName = "<MyTemplate>";
BindList ="<MyBindList>";
TableName = "<MyTable>";
TemplateName = "<MyTemplate>";
BindList ="<MyBindList>";
其中:
1. <MyDSN> ODBC DSN名字
2. <MyTable> MS Access 表名
3. <MyTemplate> 和<MyBindList> SQL Access 模板文件和绑定表
Disconnect 按钮(断开数据库)
ResultCode = SQLDisconnect( ConnectionId );
CreateTable 按钮(创建新表)
ResultCode = SQLCreateTable( ConnectionId, TableName, TemplateName );
DropTable 按钮(删除表)
ResultCode = SQLDropTable( ConnectionId, TableName );
Insert 按钮(插入数据)
ResultCode = SQLInsert( ConnectionId, TableName, BindList );
Select 按钮(选择查询返回记录集)
WhereExpr = "";
OrderByExpr = "";
ResultCode = SQLSelect( ConnectionId, TableName, BindList, WhereExpr, OrderByExpr );
OrderByExpr = "";
ResultCode = SQLSelect( ConnectionId, TableName, BindList, WhereExpr, OrderByExpr );
First按钮(记录集中的第一条记录)
ResultCode = SQLFirst( ConnectionId );
Prev Pushbutton(记录集中的上一条记录)
ResultCode = SQLPrev( ConnectionId );
Next Pushbutton(记录集中的下一条记录)
ResultCode = SQLNext( ConnectionId );
Last Pushbutton(记录集中的最后一条记录)
ResultCode = SQLLast( ConnectionId );
End Pushbutton(结束查询)
ResultCode = SQLEnd( ConnectionId );
7. 针对 ResultCode创建数据改变脚本,用于在不同的SQL函数调用中发现错误
IF ResultCode == 0 THEN
ErrorMsg = "No errors occurred";
ELSE
ErrorMsg = SQLErrorMsg(ResultCode);
ENDIF;
ErrorMsg = "No errors occurred";
ELSE
ErrorMsg = SQLErrorMsg(ResultCode);
ENDIF;
8. 启动Intouch当中的SQL 访问管理器创建绑定表(Bind List) (图6).
o 绑定列表把Intouch中的标记名与想参考的MS Access表中的字段联系起来。
o 不能在SQL Access绑定列表中和表模板中的列名中使用关键字。
o 关键字的列表在"Intouch SQL访问管理用户指南”的附录中可以到。
注意:如果表中的列名包含有空格,需要把名字用方括号([ ])括起来。例如:列名"Employee ID"在绑定列表中应该是[Employee ID]。在下一个版本的InTouch中括号应该不在需要了。
表6:绑定列表对话框
9. 在SQL访问管理器中配置表模板(表7)
o 在这里你必须创建MS Access数据库的列名,数据类型,数据尺寸
注意:同样, 列名包含有空格,需要把名字用方括号([ ])括起来.
表7: 表模板配置对话框
如果MS Access表名包含有空格,要把表名放入单引号中例如:(‘my table’)。
运行SQL访问程序
对大多数InTouch程序来说,以下的SQL访问的操作步骤是很典型的:
1. 启动WindowViewer ,点击Connect按钮执行SQLConnect操作。
a. 如果SQLConnect执行成功, 就可以通过点击Create Table按钮来创建SQL 访问的表。
b. 执行 SQLCreateTable 命令所需的参数在上面的章节中已有描述。
2. 通过执行SQLInsert命令将记录插入的数据库的表中。
3. 使用 SQLSelect 命令选择数据库表中的数据浏览和编辑
a. 可以使用SQLFirst, SQLLast, SQLNext, 和SQLPrev命令来浏览在内存中的临时数据集。
b. 查看"InTouchSQL访问管理用户指南"中的第4章查看详细内容。
4. 在浏览完数据集后,通过执行SQLEnd命令可以释放系统资源。也可以通过执行SQLDropTable 命令删除表。
5. 最后,可以使用SQLDisconnect 命令断开与MS Access 数据库的连接。
如何在intouch里面调用数据库的ole的ado呢
以下为将MS SQL Server中的Pubs数据库中的Employee表中的记录调入InTouch自带的ListBox的一种方法,参考一下吧:
wcClear("ListBox_1");
OLE_CreateObject(%EmployeeCn,"ADODB.Connection");
%EmployeeCn.Open("Provider=SQLOLEDB; Data Source=yourServername;Initial Catalog=Pubs;User Id=yourUserName; Password=yourPassword;");
以下为将MS SQL Server中的Pubs数据库中的Employee表中的记录调入InTouch自带的ListBox的一种方法,参考一下吧:
wcClear("ListBox_1");
OLE_CreateObject(%EmployeeCn,"ADODB.Connection");
%EmployeeCn.Open("Provider=SQLOLEDB; Data Source=yourServername;Initial Catalog=Pubs;User Id=yourUserName; Password=yourPassword;");
DIM strSQL AS MESSAGE;
DIM ColIndex AS INTEGER;
DIM RowIndex AS INTEGER;
DIM ColCount AS INTEGER;
OLE_CreateObject(%EmployeeRs,"ADODB.Recordset");
strSQL="Select * from employee";
%EmployeeRs.open(strSQL,%EmployeeCn);
IF %EmployeeRs.EOF==0 THEN
%EmployeeRs.MoveFirst();
ELSE
ErrorMsg="Error!";
DIM ColIndex AS INTEGER;
DIM RowIndex AS INTEGER;
DIM ColCount AS INTEGER;
OLE_CreateObject(%EmployeeRs,"ADODB.Recordset");
strSQL="Select * from employee";
%EmployeeRs.open(strSQL,%EmployeeCn);
IF %EmployeeRs.EOF==0 THEN
%EmployeeRs.MoveFirst();
ELSE
ErrorMsg="Error!";
ENDIF;
acess数据库IF %EmployeeRs.EOF==0 THEN
ColCount=8;
RowCount=30;
FOR RowIndex=1 TO 30
FOR ColIndex=0 TO ColCount - 1
%Field=%EmployeeRs.Fields.Item(ColIndex);
IF ColIndex==0 THEN
emp_id= %Field.value;
ENDIF;
IF ColIndex==1 THEN
acess数据库IF %EmployeeRs.EOF==0 THEN
ColCount=8;
RowCount=30;
FOR RowIndex=1 TO 30
FOR ColIndex=0 TO ColCount - 1
%Field=%EmployeeRs.Fields.Item(ColIndex);
IF ColIndex==0 THEN
emp_id= %Field.value;
ENDIF;
IF ColIndex==1 THEN
fname= %Field.value;
ENDIF;
IF ColIndex==2 THEN
minit= %Field.value;
ENDIF;
IF ColIndex==3 THEN
lname= %Field.value;
ENDIF;
IF ColIndex==4 THEN
job_id= %Field.value;
ENDIF;
IF ColIndex==5 THEN
job_lvl= %Field.value;
ENDIF;
IF ColIndex==6 THEN
ENDIF;
IF ColIndex==2 THEN
minit= %Field.value;
ENDIF;
IF ColIndex==3 THEN
lname= %Field.value;
ENDIF;
IF ColIndex==4 THEN
job_id= %Field.value;
ENDIF;
IF ColIndex==5 THEN
job_lvl= %Field.value;
ENDIF;
IF ColIndex==6 THEN
pub_id= %Field.value;
ENDIF;
IF ColIndex==7 THEN
hire_date= %Field.value;
ENDIF;
NEXT;
wcInsertItem("ListBox_1", -1, emp_id + " "+fname + " "+ minit + " "+ lname + " "+Text(job_id,"#") + " " + Text(job_lvl,"#") +" " +pub_id + " "+hire_date );
%EmployeeRs.Movenext();
NEXT;
ENDIF;
%EmployeeRs.close();
ENDIF;
IF ColIndex==7 THEN
hire_date= %Field.value;
ENDIF;
NEXT;
wcInsertItem("ListBox_1", -1, emp_id + " "+fname + " "+ minit + " "+ lname + " "+Text(job_id,"#") + " " + Text(job_lvl,"#") +" " +pub_id + " "+hire_date );
%EmployeeRs.Movenext();
NEXT;
ENDIF;
%EmployeeRs.close();
%EmployeeCn.close();
OLE_ReleaseObject(%EmployeeCn);
OLE_ReleaseObject(%EmployeeRs);
OLE_ReleaseObject(%EmployeeCn);
OLE_ReleaseObject(%EmployeeRs);
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论