VFP数据库连接详解,轻松实现数据管理 (vfp如何连接数据库)

VFP数据库连接详解:轻松实现数据管理

Visual FoxPro(VFP)是一种面向对象的编程语言和IDE(综合开发环境),它的数据管理工具可帮助你轻松管理各种类型的数据。本文将介绍如何使用VFP来连接和管理数据库,包括以下几个部分:

1. 数据库连接的基础知识

2. 连接到VFP本身的数据表

3. 连接到其他数据库

4. 数据库管理和数据操作

5. VFP中的数据绑定

1. 数据库连接的基础知识

在使用VFP进行数据库管理前,需要了解数据库连接的基础知识。数据库连接是指VFP应用程序与数据库之间创建的通道,使得应用程序可以读取和修改数据库中的信息。在VFP中,可以通过ODBC或OLE DB提供程序来连接到数据库。

ODBC(开放数据库连接)是一种标准的数据库访问协议,提供远程访问不同种类的数据库的统一接口。而OLE DB(对象链接和嵌入式数据库)是连接各种数据源的通用访问接口,其中包括关系数据库、邮件存储、消息队列等。选择合适的提供程序来连接数据库,将影响应用程序中数据的读取和处理效率。

2. 连接到VFP本身的数据表

在VFP中,可以直接创建和连接到本身的数据表,无需使用ODBC或OLE DB。数据表是一种常用的数据存储方式,包括行和列,可用于存储数据、定义数据类型和设置数据关系等。

连接到本身的数据表需要先创建数据库容器,然后再创建数据表。在VFP的“文件”菜单下,选择“新建”->“数据库”创建容器,并在新建的容器中选择“新建”->“表格”创建数据表。在创建数据表时,需要设置表格字段、数据类型和数据校验等属性,此后就可以通过VFP连接到数据表,并对数据进行增删改查等操作了。

3. 连接到其他数据库

除了连接到VFP本身的数据表外,还可以连接到其他数据库。使用ODBC或OLE DB提供程序,可以连接到许多不同的数据库,如MySQL、Oracle和SQL Server等,VFP也可以连接到这些数据库,并对其中的数据进行管理。

连接到其他数据库需要先进行一些配置和设置,如指定数据库服务器、用户名和密码,以及确定表格和字段名称。在VFP的“文件”菜单下,选择“新建”->“工程”创建工程,并在工程中设置ODBC或OLE DB提供程序的数据源、用户信息和查询语句等,然后就可以在工程中访问和查询其他数据库中的数据。

4. 数据库管理和数据操作

在连接到VFP或其他数据库后,就可以进行数据库的管理和数据操作了。VFP提供了许多工具和方法来管理和操作数据库,比如:

– 数据库浏览器:可以显示连接的数据源、数据表和字段等信息,可用于检查和修改数据库结构。

– 查询构建器:可以创建查询语句,用于读取、筛选和排序数据,还可以对数据进行聚合、计算和分组等操作。

– 表格设计器:用于创建和编辑数据表和字段,可以设置默认值、数据类型和数据校验等。

– 表格维护器:用于对数据表进行增删改查操作,可以添加、删除、修改和保存数据等。

– 数据层:用于将数据库中的数据连接到应用程序中,可以实现数据绑定和数据操作等功能。

5. VFP中的数据绑定

数据绑定是指将数据表示为应用程序用户界面的一部分。在VFP中,可以通过数据层和绑定框架来实现数据绑定。通过数据绑定,用户可以直接在应用程序中查询和编辑数据,而无需通过SQL或其他语句来获取和修改数据。

VFP中的数据层与ADO(活动X数据对象)和.NET Framework中的数据层类似,可以将数据源绑定到表格中,并在表格中编辑和保存数据,同时还支持数据校验和事件处理等功能。可以使用数据层和绑定框架来实现如下功能:

– 将数据源和数据控件绑定到VFP表格中,实现表格和数据的同步更新。

– 通过数据控件和绑定框架来读取和写入数据,实现数据的快速操作。

– 使用数据校验器和事件处理器来验证和处理数据,保证数据的正确性和一致性。

– 使用VFP的数据库编辑器和设计器来管理和修改数据表结构,支持数据迁移和扩展。

VFP是一种功能强大的数据库管理工具,可帮助开发人员轻松管理各种类型的数据。本文介绍了如何使用VFP来连接和管理数据库,包括数据库连接的基础知识、连接到VFP本身的数据表、连接到其他数据库、数据库管理和数据操作,以及VFP中的数据绑定等。通过学会这些知识,可以帮助开发人员更加高效地管理和操作数据库,实现更加灵活和可靠的数据管理方案。

相关问题拓展阅读:

请教高手:关于VFP与MYSQL数据库连接问题

先自己扔块砖头出来。

  归纳如下:

  故障现象 : 无法连接 mysql

  

  错误信息1 :ERROR 1045 (28000): Access denied for user ‘usera’@’localhost’ (using password:YES)

  错误信息2 :ERROR 1045 (28000): Access denied for user ‘usera’@’localhost’ (using password:NO)

  下面,首先分析说明这两种错误信息分别在什么情况下会出现:

  描述:使用mysql连接命令或连接工具,对远程数据库进行连接时,可能会出现以上两种错误信息,下面以命令的连接方式进行说明。

  当使用mysql里连接命令时,若带-p参数且指明密码,或带-p参数不指明密码,但在下一步输入密码时有字符串输入,则返回的是

  “错误信息1”,若不带-p参数,或带-p参数但在下一步输入密码时,不输入任何字符,则返回的是“错误信息2”,如下所示:

  C:\Documents and Settings\Administrator>mysql -uroot -h 192.168.8.88 -proot //带-p参数,并指明密码

  ERROR 1045 (28000): Access denied for user ‘root’@’192.168.8.123’ (using password: YES)

  C:\Documents and Settings\Administrator>mysql -uroot -h 192.168.8.88 -p //带-p参数,在下一步进行密码输入

  Enter password: //有字符串输入

  ERROR 1045 (28000): Access denied for user ‘root’@’192.168.8.123’ (using password: YES)

  C:\Documents and Settings\Administrator>mysql -uroot -h 192.168.8.88 //不带-p参数

  ERROR 1045 (28000): Access denied for user ‘root’@’192.168.8.123’ (using password: NO)

  C:\Documents and Settings\Administrator>mysql -uroot -h 192.168.8.88 -p //带-p参数,在下一步进行密码输入

  Enter password: //无字符串输入

  ERROR 1045 (28000): Access denied for user ‘root’@’192.168.8.123’ (using password: NO)

  上面的对比可总结出一点,使用mysql命令进行登录时,若有密码输入行为并输入了字符,则验证出错后,则返回的错误提示中,对于 (using password: ?)中?的关键字,则返回的是YES,若没有密码输入行为,或无密码字符输入,则返回的是NO。

  除上面的实验对比,还进行了如下的登录对比操作,并记录了他们所返回错误提示类型,对上面的总结进行验证:

  1.使用存在的用户,不输入密码

  ERROR 1045 (28000): Access denied for user ‘root’@’192.168.8.123’ (using password: NO)

  2.使用不存在的用户,不输入密码

  ERROR 1045 (28000): Access denied for user ‘root’@’192.168.8.123’ (using password: NO)

  3.使用存在的用户,且输入密码正确

  ERROR 1045 (28000): Access denied for user ‘root’@’192.168.8.123’ (using password: YES)

  4.使用存在的用户,但输入密码不正确

  ERROR 1045 (28000): Access denied for user ‘root’@’192.168.8.123’ (using password: YES)

  5.使用不存在的用户,但输入数据库中存在的某一个密码

  ERROR 1045 (28000): Access denied for user ‘root’@’192.168.8.123’ (using password: YES)

  6.使用不存在的用户,且输入数据库中不存在的一个密码

  ERROR 1045 (28000): Access denied for user ‘root’@’192.168.8.123’ (using password: YES)

  总结:对于 ERROR 1045 (28000): Access denied for user’root’@’192.168.8.123′ 此类错误返回时, (using password: ?)中?的

  关键字是YES还是NO,关键不在于用户是否存在,密码是否正确,它的结果取决于登录时,用户对于密码有没有字符串的输入,如果没有,MySQL数据库验证后,若出错返回此类信息,则应是 (using password: NO),若用户对密码有字符串的输入,返回的则是

  (using password: YES)。

  下面分析这类 ERROR 1045 (28000): Access denied for user’usera’@’localhost’ 错误出现的原因:

  原因1 : 客户端远程访问的用户账号并未创建

  检查 :

  以管理员ROOT登录后,show grants for ‘user’@’IP‘; 或者 select user from mysql.user; 确认用户账号是否存在。

  mysql> show grants for ‘jtsec’@’192.168.8.123’;

  ERROR 1141 (42023): There is no such grant defined for user ‘jtsec’ on host ‘192.168.8.123’

  mysql>

  返回信息:ERROR 1141 (42023): There is no such grant defined for user ‘jtsec’ on host ‘192.168.8.123’

  说明,没有jtsec用户,或者没有对jtsec用户进行在192.168.8.123远程访问的授权。

  mysql> select user,host from mysql.user;

  ++-+

  | user | host|

  ++-+

  | root | localhost |

  ++-+

  1 rows in set (0.00 sec)

  mysql>

  关于user记录数只有一条,是root,并没有jtsec相关的记录,说明没有数据库中没有jtsec这个帐号。

  处理 :创建用户账号。

  mysql> grant all privileges on *.* to ‘jtsec’@’192.168.8.123’ identified by ‘jtsec’ with grant option;

  Query OK, 0 rows affected (0.00 sec)

  mysql> flush privileges;

  Query OK, 0 rows affected (0.00 sec)

  mysql> show grants for ‘jtsec’@’192.168.8.123’;

  +-+

  | Grants for|

  +-+

  | GRANT ALL PRIVILEGES ON *.* TO ‘jtsec’@’192.168.8.123’ IDENTIFIED BY PASSWORD ‘*0B4AB716B6BE11FF3016D8EEAA217’ WITH GRANT OPTION |

  +-+

  1 row in set (0.00 sec)

  mysql> select user,host from mysql.user;

  ++-+

  | user | host|

  ++-+

  | jtsec | 192.168.8.157 |

  | root | localhost |

  ++-+

  2 rows in set (0.00 sec)

  mysql>

  原因2 : 用户账号存在,但未对其所在的客户端的IP进行远程访问授权允许

  检查 :

  以管理员ROOT登录后 show grants for ‘user’@’IP’;

  mysql> show grants for ‘root’@’192.168.8.123’;

  ERROR 1141 (42023): There is no such grant defined for user ‘root’ on host ‘192.168.8.123’

  mysql>

  返回信息:ERROR 1141 (42023): There is no such grant defined for user ‘root’ on host ‘192.168.8.123’

  说明,没有root用户(因为是MySQL超级用户所以排除此种可能),或者没有对root用户进行在192.168.8.123远程访问的授权。

  我们来对比一下看,root用户本地访问的权限,则可查出:

  mysql> show grants for ‘root’@’localhost’;

  ++

  | Grants for root@localhost|

  ++

  | GRANT ALL PRIVILEGES ON *.* TO ‘root’@’localhost’ IDENTIFIED BY PASSWORD ‘*81F5E21E35407D884A6CD4A731AEBFB6AF209E1B’ WITH GRANT OPTION |

  ++

  1 row in set (0.00 sec)

  或者直接查询mysql的user用户表select user,host from mysql.user;,其中记录了每一个用户的权限信息

  mysql> select user,host from mysql.user;

  ++-+

  | user | host|

  ++-+

  | root | localhost |

  ++-+

  1 rows in set (0.00 sec)

  mysql>

  关于user值为root的记录数只有一条,且host值为localhost,说明root用户只能在本地访问数据库。

  处理 :进行root用户的远程访问授权,可以授权到指定的客户端IP,也可以授权为所有IP都可访问(host值为%)。

  授权为所有IP都使用用户root,密码root,来远程访问数据库

  mysql> GRANT ALL PRIVILEGES ON *.* TO’root’@’%’ IDENTIFIED BY ‘root’ WITH GRANT OPTION;

  Query OK, 0 rows affected (0.00 sec)

  mysql> flush privileges;

  Query OK, 0 rows affected (0.00 sec)

  再次进行授权的查询

  mysql> show grants for ‘root’@’%’;

  +–+

  | Grants for root@%|

  +–+

  | GRANT ALL PRIVILEGES ON *.* TO ‘root’@’%’ IDENTIFIED BY PASSWORD ‘*81F5E21E35407D884A6CD4A731AEBFB6AF209E1B’ WITH GRANT OPTION |

  +–+

  1 row in set (0.00 sec)

  再次查询授权表记录

  mysql> select user,host,password from mysql.user;

  ++-+-+

  | user | host| password |

  ++-+-+

  | root | localhost | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |

  | root | %| *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |

  ++-+-+

  2 rows in set (0.00 sec)

  mysql>

  原因3 : 用户账号授权访问的密码不正确

  检查 :以管理员ROOT登录后, select user,host,password from mysql.user;

  mysql> select user,host,password from mysql.user;

  ++-+-+

  | user | host| password |

  ++-+-+

  | root | localhost | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |

  | root | %| *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |

  | jtsec | 192.168.8.123 | |

  | jtsec | 192.168.8.123 | *0B4AB716B6BE11FF3016D8EEAA217 |

  ++-+-+

  4 rows in set (0.00 sec)

  mysql>

  根据查询结果可以看出来,root账户的本地访问和远程访问密码一样。

  而jtse账户在192.168.8.123这个IP上,远程访问数据库的密码有两个,其中一个为空(第三条记录)。

  也就是说在IP为192.168.8.123的客户机上,使用jtsec这个账户远程访问数据库,合法的密码有两个可以选择:

  一个是不输入密码(密码为空),另一个是*0B4AB716B6BE11FF3016D8EEAA217(经过加密的),

  其余的输入,都是错的。

  处理 :使用正确的访问密码进行访问即可。

  

  错误信息 :ERROR 2023 (HY000): Can’t connect to MySQL server on ‘192.168.8.88’ (10065)

  原因 :MySQL服务器上防火墙的阻断

  检查 :在Linux下查看iptables规则,看是否未对MySQL数据库默认通信端口3306进行放行

  处理 :

  添加相应的放行规则

  自己在 /etc/sysconfig/iptables 里加了一下代码:

  -A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dportj ACCEPT

  或尝试关掉防火墙

  chkconfig ip6tables off

  chkconfig iptables off

  问题描述:

  C:\Documents and Settings\Administrator>mysql -uroot -h 192.168.8.88 -proot

  ERROR 2023 (HY000): Can’t connect to MySQL server on ‘192.168.8.88’ (10065)

  C:\Documents and Settings\Administrator>

  

  错误信息 :ERROR 2023 (HY000): Can’t connect to MySQL server on ‘hostxx’ (10061)

  原因 : mysqld数据库服务没有启动。

  检查 :在windows 的任务管理器,或者 unix/linux 下 ps -aux | grep mysql 看一下。确认服务已经启动。

  处理 :启动mysqld 服务

  

  错误信息 :ERROR 1130: Host xx.xx.xx.xx is not allowed to connect to this MySQL server

  原因 : mysql服务器没有赋予此客户端远程连接的权限。

  检查 :在mysql服务器本地查询mysql库里user表对应的host是否包含客户端机器的IP(%为不限制IP允许远程连接)。

  处理 :修改mysql库下的user表:update user set host ‘%’ where user ‘XXX’;flush privileges;

  

  错误信息 :ERROR 1045 (28000): Access denied for user ‘usera’@’localhost’ (using password:NO)

  原因 : 用户账号并未创建,远程登录时登录指令未直接包含密码项

  检查 :以管理员ROOT登录后,show grants for ‘usera’@’localhost’; 或者 select user from mysql.user; 确认用户账号是否存在。

  处理 :创建用户账号。

关于vfp如何连接数据库的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。


数据运维技术 » VFP数据库连接详解,轻松实现数据管理 (vfp如何连接数据库)