第一篇:vf实例编程(计算机二级Foxpro在VFP中模拟动画)
计算机二级Foxpro:在VFP中模拟动画
在当今众多的编程语言中,VFP的简单、方便和实用使我一直情有独衷。它不仅提供了对中、小型数据库完善的管理和操作机制,在应用程序界面的设计上也 提供了丰富的手段。比如说,VFP的表单设计器提供了图象控制,允许我们直接在表单中添加.BMP图片。稍显不足的是它不支持其他格式的图象,更不用说是 动画了。
由于图象控制和其他控制一样,具有自己一整套的属性,在设计时可以动态地改变它,因此我在实践中摸索到一种变通的方法,在VFP的表 单中加入模拟的“动画”。其设计思想是准备几帧连贯的.BMP图象(可用相关的绘图软件自行制作),利用计时器的计时功能,在规定的时间间隔内动态地改变 所显示的.BMP图象。下面我就通过一个演示实例来加以说明:首先,我准备了四幅连贯的红旗飘图象,分别取名为:1.bmp,2.bmp,3.bmp和 4.bmp。如下所示(略),然后使用表单设计器设计表单如下:
演示表单
其中包括三个控制:Image(图象),Timer(计时器)和Command(命令按钮)。设置属性如下:
Image.Picture=“1.bmp”Ttimer.Enabled=.t.Timer.Interval=200Command.Caption=“退出演示”
在表单的Activate事件中添加如下代码:
Public II=1在计时器的Timer事件中添加代码如下:If I $#@62;=
4I=1Else
I=I+1EndifPic=Str(I,1)+“.bmp”Thisform.Image.Picture= Pic
在命令按钮的Click事件中添加代码如下:
Thisform.Release
最后,保存并运行表单,我们会看到窗口中一幅鲜艳的红旗在迎风招展。单击“退出演示”命令按钮,模拟动画的演示就结束了。
VF编写简易计算器
(1)建立应用程序用户界面。
选择“新建”表单,进入表单设计器,增加一个文本框控件Textl、一个标签控件Label1和一个命令按钮组CommandGroup1,并将命令按钮组的ButtonCount属性改为16。
(2)设置对象属性如下表所示:
CommandGroup1中各按钮的属性设置
对象 属性 属性值 说明
Command1~Command10 Caption 依次改为:1、2、3、4、5、6、7、8、9、0
FontBold.T.Command11~Command10 Caption 依次改为:.、=、+、-、*、/
FontBold.T.(3)编写程序代码。
①编写CommandGroup1的Click事件代码:
IF THISFORM.Tag=.T.THISFORM.Text1.Value=ALLT(RIGHT(STR(THIS.Value),1))
THISFORM.Tag=〃 〃
ELSE
a=THISFORM.Text1.Value
THISFORM.Text1.Value=a+ALLT(RIGHT(STR(THIS.Value),1))
ENDIF
②编写“.”按钮Command11的Click事件代码:
a=THISFORM.Text1.Value
THISFORM.Text1.Value=a+〃.〃
③编写“=”按钮Command12的Click事件代码:
a=THISFORM.Text1.Value
THISFORM.Text1.Value=ALLT(STR(&a))
THISFORM.Tag=.T.④编写“+”按钮Command13的Click事件代码:
a=THISFORM.Text1.Value
THISFORM.Text1.Value=a+〃+〃
THISFORM.Tag=〃 〃
⑤编写“-”按钮Command14的Click事件代码:
a=THISFORM.Text1.Value
THISFORM.Text1.Value=a+〃-〃
THISFORM.Tag=〃 〃
⑥编写“*”按钮Command15的Click事件代码:
a=THISFORM.Text1.Value
THISFORM.Text1.Value=a+〃*〃
THISFORM.Tag=〃 〃
⑦编写“/”按钮Command16的Click事件代码:
a=THISFORM.Text1.Value
THISFORM.Text1.Value=a+〃+〃
THISFORM.Tag=〃 〃
vf编程计算3!+4!+5!
set talk off
s=0
p=1*2
n=3
do while n<=5
p=p*n
s=s+p
n=n+1
enddo
?s
结果为150
VFP中常用WIN32API函数调用事例
我们在VFP编程时,为了弥补VFP本身功能的不足,常常会用到WIN32API函数来对VFP的功能行扩展,例如取得系统信息、对注册表进行操作 等,但是由于WIN32API函数是C++的数据结构形式,在调用时与VFP的数据格式有所不同,因此在调用时往往会产生问题,而目前的一些资料所介绍的 大都是VB、DELPHI等语言如何调用,对VFP如何调用介绍的比较少,更缺少具体的调用事例,下面我分几次介绍在VFP如何调用WIN32API函 数,并就一些常用的WIN32API函数作一介绍,由于 本人水平有限,所介绍的内容,仅供您参考,也欢迎您在我的[请您留言]中共同探讨:
一、VFP中调用WIN32API函数的格式
VFP中调用WIN32API函数的命令主要是:
DECLAREDLL 它用于注册外部 Windows 32 位动态链接库(.DLL)中的一个函数。
语法: DECLARE [cFunctionType] FunctionName IN LibraryName [AS AliasName]
.......[cParamType1 [@] ParamName1, cParamType2 [@] ParamName2,...]
说明:
cFunctionType 指定该函数返回值的类型,其类型代码如下:
SHORT16 位整数
INTEGER32 位整数
SINGLE 32 位浮点数
DOUBLE 64 位浮点数
STRING 字符串
FunctionName 指定要注册使用的32位函数名。注意 FunctionName 区分大小写。
如果该函数名与Visual FoxPro的保留字相同,应使用AS参数另起别名。
IN LibraryName 指定该函数所在的外部动态链接库文件名,如果LibraryName为:
WIN32API时,VFP将依次查找KERNEL32.DLL、GDI32.DLL、USER32.DLL、MPR.DLL及ADVAPI32.DLL等动态链接库文件名。
AS AliasName 当API函数的名称与Visual FoxPro的保留字相同时,另取 AliasName别名,另取的别名是不区分大小写的。
cParameterType1 [@] ParamName1, cParameterType2 [@] ParamName2,...指定传递给被调用的32位.DLL函数的参数类型及参数名称。其类 型代码如FunctionType,如果要以传址方法传递参数则应在参数名前加上@。
2.CLEAR DLLS 释放所有利用DECLAREDLL命令所装入的动态链接库。
xx<>0 获取指定磁盘的卷标成功,反之则未成功。
C_var=指定磁盘的卷标,是个十进制的数值,与我们在DOS下看到的16进制不同。
C_cd=系统规定的文件名每一部分的长度,是个十进制的数值。
C_qf=文件名的大小写标志,是个十进制的数值。
怎么样很简单吧,我们可以把获取的磁盘卷标,用来加密我们的软件,这样 我们的 软件就具有防拷贝的功能了。
将DBF表导入到SQLSERVER中的函数
给大家一个自已写的将DBF表导入到SQL SERVER数据库中的函数
我一直在我的程序中用,方便不少
请多多指都教,有什么问题可以回帖或邮trywell@sohu.com
连接句柄为CON,可以调用本函数之前执行如下语句CON=SQLSTRINGCONNECT(“DRIVER=SQL SERVER;SERVER=(LOCAL);UID=SA;PWD=;DATABASE=你的数据库名”)
***dbftosql()
PROCEDURE DBFTOSQL PARA MDBF LOCAL I,MFIELD,MTYPE,MCOLUMN,MSQLTYPE,MLEN,MSQL1,MSQL2 MFIELD='' MTYPE='' MCOLUMN='' MSQLTYPE='' MLEN='' MSQL1='' MSQL2='' IF!USED(MDBF)USE &MDBF ENDI SELE &MDBF I=1 DO WHILE!EMPTY(FIELD(I))MFIELD=FIELD(I)MTYPE=TYPE(MFIELD)DO CASE CASE UPPER(TYPE(MFIELD))='C' MSQLTYPE='CHAR' CASE UPPER(TYPE(MFIELD))='Y' MSQLTYPE='MONEY' CASE UPPER(TYPE(MFIELD))='D' MSQLTYPE='DATETIME' CASE UPPER(TYPE(MFIELD))='T' MSQLTYPE='DATETIME'
CASE UPPER(TYPE(MFIELD))='B' MSQLTYPE='FLOAT' CASE UPPER(TYPE(MFIELD))='F' MSQLTYPE='FLOAT' CASE UPPER(TYPE(MFIELD))='G' MSQLTYPE='IMAGE' CASE UPPER(TYPE(MFIELD))='I' MSQLTYPE='INT' CASE UPPER(TYPE(MFIELD))='L' MSQLTYPE='BIT' CASE UPPER(TYPE(MFIELD))='M' MSQLTYPE='TEXT' CASE UPPER(TYPE(MFIELD))='N' MSQLTYPE='FLOAT' ENDCASE IF 'C'$MTYPE MLEN='('+ALLT(STR(LEN(&MFIELD)))+')' ELSE MLEN='' ENDI IF EMPTY(MCOLUMN)MCOLUMN=FIELD(I)+SPACE(1)+ALLT(MSQLTYPE)+MLEN ELSE MCOLUMN=MCOLUMN+','+FIELD(I)+SPACE(1)+ALLT(MSQLTYPE)+MLEN ENDI IF EMPTY(MSQL1)MSQL1=FIELD(I)ELSE MSQL1=MSQL1+','+FIELD(I)ENDI IF EMPTY(MSQL2)MSQL2='?'+FIELD(I)ELSE MSQL2=MSQL2+',?'+FIELD(I)ENDI I=I+1 ENDD MSQL='CREATE TABLE '+MDBF+SPACE(1)+'('+MCOLUMN+')' IF SQLEXEC(CON,MSQL)=1 ENDI IF RECCOUNT()>0 GO TOP DO WHILE!EOF()I=1
DO WHILE!EMPTY(FIELD(I))
XX=FIELD(I)
IF XX=.NULL.REPL &XX WITH ''
ENDI
I=I+1
ENDD
MSQL='INSERT INTO '+MDBF+SPACE(1)+'('+MSQL1+')'+SPACE(1)+'VALUES('+MSQL2+')'
IF SQLEXEC(CON,MSQL)=1
ENDI
SKIP
ENDD
ENDI
USE IN &MDBF
RETU VFP远程视图使用面面观
摘要:远程视图是Visual Foxpro 5.0 中开发Client/Server 应用系统的基础,本文首先介绍了远程视图有关参数的放置技巧,然后介绍如何去设计、使用远程视图,最后讨论了使用远程视图的四个实际问题。
一、绪论
VFP 是一种较好的客户/ 服务器应用系统开发工具,用VFP 开发C/S 系统的关键是如何访问远程数据(远程服务器中的Table/View)。可以使用VFP 提供的SQL Pass-Through 函数访问远程数据,但最常用的方法是使用远程视图(Remote View)去访问远程数据。本文结合本人的使用经验对远程视图的使用技巧加以介绍。
二、远程视图的环境设置
在设计远程视图时,需要对远程视图的有关环境信息进行设置。使用Tools 菜单中的Options....选项来设置Remote Data 选项。其选项设置说明如下:
*Share Connection: 指出今后设计的远程视图是否使用共享连接。使用共享连接可大大减少数据库服务器中客户访问许可数,但会影响客户机的访问速度。
*SQL Updates/Criteria: 指出对后台数据进行update 操作的条件。
它有四种可能:
①Key Field only ②Key and Updatable Fields
③Key and Modified Fields ④Key and Time Stamp。
一般选择③较合适。
*SQL Updates/Method: 指出对后台数据的更新方法。
它有两种选择:①SQL Delete then Insert ②SQL update。
一般选择②比较合适。
*Connection Defaults: 主要用于SQL Pass-Through 函数访问远程数据,对于远程视图则不需要放置。
三、远程视图的设计
有两种方法设计远程视图,一是使用View Designer;二是使用SQL 语句。用View Designer 可设计较为简单的视图,而使用SQL 的Create Remote View 语句则可进行复杂视图的设计。如果试图去用View Designer 观察或修改(用Create 创建的视图)则极有可能被破坏它(例如:若创建视图的Select 语句中含有exists 子句, 则一定会被破坏!)
1.用Create 命令设计
例如:假定连接名为WYFconnect,两个远程表为SealList 和ShipList.Create 命令可如下:
CREATE SQL VIEW ViewTest REMOTE CONNECTION WYFconnect AS SELECT SealList.* FROM SealList, ShipList WHERE SealList IS NOT NULL AND SealList AND 箱号NOT IN(SELECT 箱号FROM ShipList WHERE ShipList.箱号IS NOT NULL AND ShipList.船名=SealList.船名
使用该方法可以在程序中动态地构造满足不同条件的远程视图(View Designer 不能构造带参数的远程视图)。例如:设m.ShipName 为一可变内存变量,其创建语句为:
CREATE SQL VIEW ViewTest REMOTE CONNECTION WYFconnect AS SELECT * FROM SealList WHERE 船名=m.ShipName.2.用View Designer 设计
启动View Designer 选择连接名后出现设计图, 在其上部可以加入远程服务器中的表或视图,在其下部进行参数/ 条件设置:
*Select Criteria: 设置远程数据值上的记录必须满足的条件,类似于下SQL Select 语句中的Where 子句。在这里可以构造复杂条件,但条件中使用的函数和语法规则必须是后台数据库支持的,例如:不能使用DTOC(日期)=‘90/01/01’,而必须使用Convert(char(10), 日期)=‘90/01/01’, 因为后台数据库不支持DTOC()函数。
*Fields: 选择结果集中的字段,在这里要强调的是Function/Expression 的使用,使用它可构造出与源表字段不同的字段,如:T.船名+‘’+T.中文AS 船舶。实践证明Function/Expression 中不能使用双引号,而只能使用单引号。
*Order by 和Group by: 对结果分组、分类。要求符合后台数据库所支持的SQL 语法。
*Update Criteria: 设置视图的有关替换参数, 具体如下:
①要选中Send SQL Update
②SQL where 一般选择Key and Modify Fields
③Update Using 一般选择SQL Update
④务请选择关键字段和可更改字段(在钥匙符号下面和铅笔符号下面加“√”),否则将无法正确完成Insert/update 功能。
四、远程视图的使用
1.缓冲与锁定设置
对于远程视图,建议使用缓冲机制来提高远程视图的工作效率和使用的方便性。首先在Option 菜单中设置Data 组件,需设置下列参数:
①选择Open Exclusive 以让库共享打开,库中的远程视图则可共享使用;
②Locking And Buffering 设置:选中Automatic File locking 和Multiple Record Locks,并将Buffering 设置成Fields Buffering,加锁方式设置为“记录级乐观锁定”。在具体设计Form 时,对数据环境中的每一个远程视图光标可重新根据需要来设置锁定和缓冲机制。如果不重新设置,它取Form 的缺省设置。
2.数据的写入与前台刷新
对于采用了Buffering 技术的远程视图,当修改/ 删除/ 增加了记录时,需用TableUpdate(.T.,.T.)函数来确保数据写到后台数据库中;若要取消对缓冲区中视图数据的修改,需用TableRevert(.T.)函数。例如:
Select View1
Append Blank
Begin Transaction
if TableUpdate(.T.,.T.)
EndTranseaction
else
RollBack
=TableRevert(·T ·)
endif
如果该远程视图与别的表/ 远程视图发生级联修改/ 删除/ 增加关系,则需使用事务机制,以确保数据的完整性。
如果对应视图的后台表/ 视图数据发生变化时,使用下述方法让前台客户机中的数据与实际后台数据一致:
①Select 〈远程视图名〉
USE〈远程视图名〉&& 再次打开即可
②Select 〈远程视图名〉
=Requery()&& 刷新缓冲区值
五、远程视图使用中碰到的若干问题
1.如何在一个远程视图中多次使用同一远程数据源?
依靠别名。例如:Select A.船名,A.航次,B.姓名as 操作员,C.姓名as 仓库员from Shipname A, worker B, worker C where A.操作员代码=B.Code and A.仓库员代码=C.Code
2.设计远程视图时Select 语句的语法应符合VFP 或后台数据库?
后台数据库支持的SQL 语法。例如:Create SQL View AAA Remote Conection BB As Select A.* From Shipname A Where Convert(Char(10), 进港日期)=‘1998/05/30’
3.远程视图能否使用Pack 和Recall 语句?
不能使用pack 语句,例如:
use View1;
delete for 〈条件〉 && 加删除标志
pack && 错误,必须使用TableUpdate()函数
对于Recall 命令,如果已执行了TableUpdate(),则执行无效;若未发Tableupdate(), 则可用Recall 来取消删除标记。
4.本地视图的数据源有远程视图,如何刷新本地视图?
例如:有两个远程视图Rview1 Rview2, 创建本地视图的命令为:Create SQL view As Select A.* B.* from Rview1 A,R view2 B where A.箱号=B.箱号
刷新view 之前必须先刷新Rview1 和Rview2:
=requery(“Rview1”)
=Requery(“Rview2”)
=Refresh(“view”)
六、小结
远程视图是VFP 访问远程数据服务器中数据的有利武器,有了前面的介绍,就可得心应手地设计C/S 应用系统了。
参考文献
[1 ]E.sander 等著visual FoxPro3.0 实用指南机械工业出版社1996
The Skills of Using Remote View in Visual Foxpro 5.0
Wuyefu and Yuanxiaoling
Dept.Computer, Wuhan Transaction University , WuHan430063
ABSTRACT: In the paper, it is introduced how to choice option parameters and to use remote view in Visual Foxpro 5.0.In the end, the solution to some problems is also discussed.KEYWORDS: Remote view, Remote Data, Connection, Lock, buffering
一个很好的c-s主程序
* * 2003/11/21 《星级酒店管理》系统 主程序 * * 作者:刘雪均
* * 版权所有(C)2003 宝明城大酒店 * * 广东深圳市公明镇长春花园 * * 深圳, 广东 518106 * * 中国
* * 说明: 版权所有,严禁非法复制,违者必穷 Clear Clear All Clear Dlls Clear Macros Close All Set Talk Off Set Safe Off Set Escape Off Set Debug Off Set Exact Off Set Sysmenu Save Set Sysmenu To Set Sysmenu Off Set NullDisplay To '' Set Null Off Set Dohistory Off Set Notify Cursor Off Release Windows Close Databases Set Date To YMD Set Hour To 24 Set Seconds Off Set Century On Set Deleted On Set Resource On Set Help On On Shutdown Quit Set Clock Off With _Screen.WindowState=2.ZOOMBOX=.F..Movable=.F..MinButton=.F..MaxButton=.F..Closable=.F..Icon=“Ball.ICO”.Caption='《星级酒店管理》系统--均维软件工作室'.LockScreen=.T..AddObject('ScreenImg','Image').ScreenImg.Stretch=2.ScreenImg.Visible=.T..ScreenImg.Height=Sysmetric(2)-50.ScreenImg.Width=Sysmetric(1).ScreenImg.Picture='DeskTopr.jpg'.LockScreen=.F.Endwith =Capslock(.T.)=Numlock(.T.)Public TempFile,ExePath,CurWinDir,CurPic,pCompany,ReportFile,pTeamId,pUserGroup,pUserId,pUserName,sConn,gcUpdateId,;m.Date_From,m.Date_To,nConn,OFBLX,OFBLY,Times Store 0 To nConn,OFBLX,OFBLY,Times Store Date()To m.Date_From,m.Date_To Store '' To TempFile,ExePath,CurWinDir,CurPic,pCompany,ReportFile,sConn,pTeamId,pUserGroup,pUserId,pUserName TempFile='T'+Right(Sys(2015),7)CurWinDir=Getenv('WinDir')ExePath=Left(Sys(16,1),Rat(“",Sys(16,1)))Set Default To(ExePath)Set Resource To &ExePath.FoxUser.Dbf Set Path To &ExePath.;&ExePath.HelpS If!Directory(”&ExePath.Temp“)Md &ExePath.Temp Endif Tmpfiles=”&ExePath.Temp“ &&设定当前VFP使用的临时文件目录
=DelTmpFile()&&删除当前用户系统目录和VFP目录的过时的临时文件 *!* SET HELP TO &ExePath.HelpSHotel.CHM If!File('MYDLL.DLL')Messagebox('MYDLL.DLL丢失,程序不能正常运行!',48,'系统提示')Quit Endif Declare String getserial In ”MyDll.dll“ Integer &&获得硬盘厂商物理永久性的ID Declare String num2txt_c In ”MyDll.dll“ As RMBZH Double &&小写金额转换成大写金额
Declare String topy In ”MyDll.dll“ String &&汉字转拼音首字母 Declare Integer changeres In ”MyDll.dll“ Integer, Integer &&分变率设定 Declare Integer WinExec In ”kernel32“ String,Integer Declare Integer FindWindow In Win32api String, String Declare Long BringWindowToTop In Win32API Long Declare Long ShowWindow In Win32API Long, Long Declare Integer SendMessage In user32 Integer,Integer,Integer,Integer Declare Integer ShellExecute In SHELL32.Dll Integer, String, String, String, String, Integer Declare Integer GetPrivateProfileString In Win32API As GetPrivStr String, String, String, String @, Integer, String Declare Integer WritePrivateProfileString In Win32API As WritePrivStr String, String, String, String Declare SHORT SetLocalTime In win32api String SystemTime *!* Declare integer ShowWindowAsync in user32 integer hwnd, integer nCmdShow *!* htaskbar = FindWindow(”Shell_TrayWnd“,0)*!* ShowWindowAsync(htaskbar,0)&&0为隐藏任务栏,1为显示任务栏 Set Class To MyLibs Additive &&使用自已的类库
On Error Do Err_Fix With Error(),Message(),Message(1), Program(),Lineno()&&错误跟踪处理
If!File(”&ExePath.LXJ.INI“)&&判断配置文件存在否,不存在就创建。=WriteIni('REGISTRY','Local_Id',Str(DiskSpace(Sys(5),1)),'&ExePath.LXJ.INI')=WriteIni('REGISTRY','Reg_Date',Ttoc(Datetime()),'&ExePath.LXJ.INI')=WriteIni('REGISTRY',' ','======================','&ExePath.LXJ.INI')=WriteIni('AUTHOR','Contact','刘 雪 均','&ExePath.LXJ.INI')=WriteIni('AUTHOR','Title','电脑工程师','&ExePath.LXJ.INI')=WriteIni('AUTHOR','Telephone','***','&ExePath.LXJ.INI')=WriteIni('AUTHOR',' ','======================','&ExePath.LXJ.INI')=WriteIni('SCREEN','RandomLoad','Yes','&ExePath.LXJ.INI')=WriteIni('SCREEN','SourceXY','Yes','&ExePath.LXJ.INI')=WriteIni('SCREEN','Picture ','Picture.JPG','&ExePath.LXJ.INI')=WriteIni('SCREEN','StatusBar ','On','&ExePath.LXJ.INI')=WriteIni('SCREEN','','======================','&ExePath.LXJ.INI')=WriteIni('CONNECT','DRIVER','SQL SERVER','&ExePath.LXJ.INI')=WriteIni('CONNECT','SERVER',GETENV(”COMPUTERNAME“),'&ExePath.LXJ.INI')=WriteIni('CONNECT','PORTNO','1433','&ExePath.LXJ.INI')=WriteIni('CONNECT','UID','SA','&ExePath.LXJ.INI')=WriteIni('CONNECT','PWD','DBA','&ExePath.LXJ.INI')=WriteIni('CONNECT','DATABASE','HOTEL','&ExePath.LXJ.INI')=WriteIni('CONNECT',' ','======================','&ExePath.LXJ.INI')=WriteIni('USER','LastUser','Guest','&ExePath.LXJ.INI')=WriteIni('USER',' ','======================','&ExePath.LXJ.INI')=WriteIni('UPDATE','NewExe','&ExePath.Main.EXE','&ExePath.LXJ.INI')&&工作站自动升级的共享目录
=WriteIni('UPDATE','NewInfo','欢迎使用本系统!','&ExePath.LXJ.INI')&&提示的信息
=WriteIni('UPDATE',' ','======================','&ExePath.LXJ.INI')=WriteIni('OCXDLLREG',GETENV(”COMPUTERNAME“),'NO','&ExePath.LXJ.INI')Endif If Upper(ReadIni('SCREEN','StatusBar','&ExePath.LXJ.INI'))='ON' Set Status Bar On _vfp.StatusBar=' 欢 迎 您 使 用 本 系 统...' Else Set Status Bar Off Endif =OleRegister()&&根据INI文件判断是否注册OCX,DLL文件 =SetShortCut('酒店管理')&&在屏幕上创建快捷方式 *!*工作站是否注册判断 If ReadIni('REGISTRY','Local_Id','&ExePath.LXJ.INI')!=WorkJm(Iif(Empty(GetSerial(0)),Str(Diskspace(Sys(5),1)),Allt(GetSerial(0))),'HTL')Do Form RegWork.SCX &&调用本工作站使用注册表单 Endif Wait Window ”正在连接 SQL SERVER 数据库,请稍候......“ At Srows()/2-10,(Scol()-45)/2 Nowait Noclear SQLSETPROP(0,”DispLogin“ ,3)&&连接不成功时不显示ODBC登录对话窗口 SQLSETPROP(0,”ConnectTimeOut“,20)&&连接超时等待秒数设置,可取值0至600 SQLSETPROP(0,”IdleTimeout“,0)&&空闲超时间隔秒数,取0为无限期等待 SQLSETPROP(0,”QueryTimeOut“,20)&&超时错误之前等待的时间 SQLSETPROP(0,”Asynchronous“,.F.)&&指定结果集合是同步返回 SQLSETPROP(0,”DispWarnings“,.F.)&&不显示一个错误信息 *!*从配置文件中获得SQL SERVER的加密连接串 sConn='DRIVER=SQL SERVER' sConn=sConn+';SERVER='+Iif(Empty(ReadIni('CONNECT','SERVER','&ExePath.LXJ.INI')),GETENV(”COMPUTERNAME“),ReadIni('CONNECT','SERVER','&ExePath.LXJ.INI'))sConn=sConn+','+Iif(Empty(ReadIni('CONNECT','PORTNO','&ExePath.LXJ.INI')),'1433',ReadIni('CONNECT','PORTNO','&ExePath.LXJ.INI'))sConn=sConn+';UID='+ReadIni('CONNECT','UID','&ExePath.LXJ.INI')sConn=sConn+';PWD='+Iif(Empty(ReadIni('CONNECT','PWD','&ExePath.LXJ.INI')),'',JmWd(ReadIni('CONNECT','PWD','&ExePath.LXJ.INI')))sConn=sConn+';DATABASE='+Iif(Empty(ReadIni('CONNECT','DATABASE','&ExePath.LXJ.INI')),'NoDatabase',ReadIni('CONNECT','DATABASE','&ExePath.LXJ.INI'))sConn=sConn+';NetWork=DBMSSOCN' nConn=Sqlstringconnect(sConn)Wait Clear Do While nConn<=0 Local YN YN=Messagebox('SQL Server 数据库连接失败,请选择!'+Chr(13)+Chr(13)+”Y->重试 , N->设定 , 取消->退出!“,67 ,'SQL Connect Info.')_Screen.Refresh Do Case Case YN=6 Wait Window ”正在连接 SQL SERVER 数据库,请稍候......“ At Srows()/2-10,(Scol()-45)/2 Nowait Noclear nConn=Sqlstringconnect(sConn)Wait Clear Case YN=7 Do Form SetServer.SCX &&SQL SERVER服务器连接配置 Otherwise Quit Endcase Enddo *!*下面是测试连接有效否,有效就检测服务器注册及过期情况等 If IsConn()=GetServerTime()&&设定当前机器时间为服务器的时间
If SQLEXEC(nConn,'Select * From Registry','MyCursor')>0 Select MyCursor pCompany=Alltrim(MyCursor.Corp)If Alltrim(MyCursor.RegKey)!=Alltrim(ServerJm(Dtoc(Ttod(MyCursor.EndTime))-TOPY(pCompany)-Dtoc(Ttod(MyCursor.BeginTime)),'HTL'))Do Form RegServer.SCX &&调用注册SQL SERVER服务器使用权表单 Endif If MyCursor.BeginTime>Date()Messagebox('系统时间小于注册时间,程序不可运行!',16,'Information',3000)Quit Endif If MyCursor.EndTime 1、使用期限快到,程序将在 '+Alltrim(MyCursor.EndTime)+' 后终止运行,切记!'+Chr(13)+Chr(13)+' 2、请尽快同 刘雪均 联系(E-MAIL:CQTony@tom.com),谢谢!',64 ,'系统提示')Endif Else Messagebox('注册信息查询失败,请等会重试!',16,'Information',3000)=SQLDisConnect(0)Quit Endif Else Messagebox('后台数据库连接失败,请等会重试!',16,'Information',3000)=SQLDIsConnect(0)Quit Endif If Empty(pCompany)cTitle=”【 星 级 酒 店 管 理 系 统 】“ Else cTitle=”【 &pCompany.---酒店管理系统 】“ Endif m.LNHWND=FindWindow(0,cTitle)If m.LNHWND<>0 Wait Window ”重 复 提 示 : 程 序 已 经 运 行!“ At Srows()/2-3,(Scol()-34)/2 Timeout 2 BringWindowToTop(m.LNHWND)ShowWindow(m.LNHWND,3)Quit Endif *!*分变率处理,如果低于800*600就修改为800*600,否则就从配置文件进行相应处理,程序本身有自动适应功能。OFBLX=Sysmetric(1)OFBLY=Sysmetric(2)If OFBLX<800 Or(Upper(ReadIni('SCREEN','SourceXY','&ExePath.LXJ.INI'))='YES' And OFBLX<>800)CHANGERES(800,600)OFBLX=800 OFBLY=600 _Screen.ScreenImg.Height=600-50 _Screen.ScreenImg.Width=800 Endif *!*下面是背景图自动随机调用或是调用用户设定的固定图片处理 If Upper(ReadIni('SCREEN','RandomLoad','&ExePath.LXJ.INI'))='YES' Set Default To &ExePath.PictureS FileNo=Adir(PicFile,”*.JPG“)If FileNo>0 FileNo=Int(Rand(Seconds())*FileNo)+1 CurPic =PicFile[FileNo,1] Else CurPic=ReadIni('SCREEN','Picture','&ExePath.LXJ.INI')Endif Release FileNo,PicFile,LNHWND Set Default To &ExePath.CurPic=ExePath+'PictureS'+CurPic Else CurPic=ReadIni('SCREEN','Picture','&ExePath.LXJ.INI')Endif If!File(CurPic)CurPic='DeskTopr.jpg' Endif _Screen.ScreenImg.Picture=CurPic _Screen.Caption=cTitle _Screen.Refresh Do Form Login.SCX &&运行登录用密码校验界面 Read Events =VFP_INIT()Return Function VFP_INIT With _Screen.ZOOMBOX=.T..MinButton=.T..MaxButton=.T..BorderStyle=2.Closable=.T..Movable=.T..Icon=”“.Caption=Chr(49653)+Chr(53673)+Chr(48889)Endwith Close Databases All Close Tables All Release Windows Set Sysmenu To Default Set Sysmenu On Set Deleted Off Set Procedure To Set Exclusive On Set Multilocks Off Set Library To Set Talk On Set Escap On Set Safe On Set Exact Off Close All Clear Dlls Clear All Clear On Key On Error On Escap Return Endfunc *!*判断连接是否存在或断线,如不通并重新连接 Function IsConn If nConn<=0 SQLDIsConnECT(0)nConn=Sqlstringconnect(sConn)Endif Try SQLEXEC(nConn,'')Catch nConn=-1 Finally If nConn<=0 nConn=Sqlstringconnect(sConn)Endif Endtry If nConn>0 SQLEXEC(nConn,”Select GetDate()AS SysTime ,CONVERT(VARCHAR(10),GetDate(),111)AS SysDate “,'ServerDate')Return(.T.)Else Return(.F.)Endif Endfunc *!*设定当前系统的时间为服务器的时间 Function GetServerTime If IsConn()Select ServerDate SystemTime = WTOS(Year(ServerDate.SysTime))+;WTOS(Month(ServerDate.SysTime))+;WTOS(Dow(ServerDate.SysTime)-1)+;WTOS(Day(ServerDate.SysTime))+;WTOS(Hour(ServerDate.SysTime))+;WTOS(Minut(ServerDate.SysTime))+;WTOS(Sec(ServerDate.SysTime))+;WTOS(Sec(ServerDate.SysTime))= SETLOCALTIME(SystemTime)Else Messagebox('后台数据库连接失败,时间同步无效!',16,'Information',3000)Endif Endfunc Function WTOS Parameters WORDVAL Private IDNAME, RETSTR RETSTR = ”“ For IDNAME = 8 To 0 Step-8 RETSTR = Chr(Int(WORDVAL/(2^IDNAME)))+ RETSTR WORDVAL = Mod(WORDVAL,(2^IDNAME))Next Retu RETSTR Endfunc *!* SQL 错误登记显示自定义函数 Function ShowSqlError NERRLINE=Aerror(SQLERROR)If SqlError[5]<60000 Set Textmerge Delimiters To Set Textmerge On Set Textmerge To &ExePath.ERRORSSQLERRLOG.TXT Noshow <> <> 错误记录 For I=1 To NERRLINE 错误编号:<> 错误信息:<> ODBC 信息:<> ODBC 状态:<> ODBC 数据源错误编号:<> ODBC 连接句柄:<> Endfor Set Safety Off Set Textmerge To Local LCERRORLOG,LCUSER If!Directory(”&ExePath.Errors“)Md &ExePath.Errors Endif LCERRORLOG = Filetostr('&ExePath.ERRORSSQLERRLOG.txt')LCUSER=pUserId-'/'-pUserName If IsConn()SQLEXEC(nConn,'INSERT INTO SYSERROR(WORKSTATION,USERNAME,ERRORDATE,ERRORLOG)valueS(?SYS(0),?lcUSER,GETDATE(),?lcERRORLOG)')Endif Messagebox(SQLERROR[2],16,'SQL Error '+Transform(SQLERROR[1]))Else Messagebox(Right(SQLERROR[2],54),64,'SQL Error '+Transform(SQLERROR[1]))Endif Endfunc *!* 程序快捷方式自定义函数 Function SetShortCut Parameters MyProcName wshshell = Createobject(”Wscript.shell“)StrDesktop = wshshell.specialfolders(”Desktop“)oMyShortcut = wshshell.createshortcut(strdesktop + ”&MyProcName..lnk“)oMyShortcut.windowstyle = 4 &&Maximized 7=Minimized 4=Normal oMyShortcut.iconlocation = ”&ExePath.Loader.EXE“ oMyShortcut.targetpath = ”&ExePath.Loader.EXE“ oMyShortcut.workingdirectory = ExePath oMyShortcut.Save Release wshshell Endfunc *!* 动态SQL 查询条件中的特殊符号‘和“的处理函数 Function DelStr Parameters lsCurStr lsCurStr=Strtran(lsCurStr, ”'“, '')lsCurStr=Alltrim(Strtran(lsCurStr, '”', ''))Return(lsCurStr)Endfunc *!* 更新站点唯一ID获得函数,以当前用户的机器名+系统登录名+系统日期时间到毫秒+本程序的用户编号 Function GetUserId Local gcUpdateId Set Seconds On gcUpdateId=Strtran(Sys(0)+'|'+Right(Strtran(Ttoc(Datetime()),'/',''),15)+'|'+Alltrim(pUserId),' ','')If Len(gcUpdateID)>46 gcUpdateID=Right(gcUpdateID,46)Endif Set Seconds Off Return(gcUpdateId)Endfunc *!* 日期或字符串转换为日期型或者NULL,目的是为了适应后台SQL SERVER的格式,方便处理 Function DC2D Parameters lsCDStr Do Case Case Vartype(lsCDStr)='C' lsCDStr=Alltrim(lsCDStr)lsCDStr=Ctod(lsCDStr)If Empty(lsCDStr)Return(.Null.)Else Return(lsCDStr)Endif Case Vartype(lsCDStr)='D' If Empty(lsCDStr)Return(.Null.)Else Return(lsCDStr)Endif Otherwise Return(.Null.)Endcase Endfunc *!* 日期或字符串转换为字符或NULL,目的是为了适应前台的格式,方便处理SQL SERVER调的数据 Function DC2C Parameters lsDCStr Do Case Case Vartype(lsDCStr)='C' lsDCStr=Alltrim(lsDCStr)If Empty(lsDCStr)Return(.Null.)Else Return(lsDCStr)Endif Case Vartype(lsDCStr)='D' lsDCStr=Dtoc(lsDCStr)If Empty(lsDCStr)Return(.Null.)Else Return(lsDCStr)Endif Otherwise Return(.Null.)Endcase Endfunc *!* 删除当前系统用户临时目录过时的临时文件,因为系统有些临时文件是不会自动删除的 Function DelTmpFile *!*Windows系统临时目录 gNo = Adir(gFile, GETENV(“TEMP”)+'*.TMP')For I=1 To gNo nHand=Fopen(GETENV(“TEMP”)+''+gFile(I,1),12)If nHand!=-1 And FDATE(GETENV(“TEMP”)+''+gFile(I,1))!=Date()=Fclose(nHand)Delete File GETENV(“TEMP”)+''+gFile(I,1)Endif Endfor *!*当前程序临时目录 gNo = Adir(gFile, '&ExePath.Temp*.*')For I=1 To gNo nHand=Fopen('&ExePath.Temp'+gFile(I,1),12)If nHand!=-1 And FDATE('&ExePath.Temp'+gFile(I,1))!=Date()=Fclose(nHand)Delete File '&ExePath.Temp'+gFile(I,1)Endif Endfor Release gFile,nHand,gNo Endfunc *!* 工作站第一次运行的时候注册本程序目录下的控件 Function OleRegister If ALLTRIM(Upper(ReadIni('OCXDLLREG',GETENV(“COMPUTERNAME”),'&ExePath.LXJ.INI')))!='YES' IF FILE(“&EXEPATH.MSCOMCTL.OCX”)WINEXEC(“REGSVR32 &EXEPATH.MSCOMCTL.OCX /S”,0)ENDIF IF FILE(“&EXEPATH.MSCOMCT2.OCX”)WINEXEC(“REGSVR32 &EXEPATH.MSCOMCT2.OCX /S”,0)ENDIF IF FILE(“&EXEPATH.MSMAPI32.OCX”)WINEXEC(“REGSVR32 &EXEPATH.MSMAPI32.OCX /S”,0)ENDIF IF FILE(“&EXEPATH.RICHTX32.OCX”)WINEXEC(“REGSVR32 &EXEPATH.RICHTX32.OCX /S”,0)ENDIF IF FILE(“&EXEPATH.MSWINSCK.OCX”)WINEXEC(“REGSVR32 &EXEPATH.MSWINSCK.OCX /S”,0)ENDIF IF FILE(“&EXEPATH.MSCOMM32.OCX”)WINEXEC(“REGSVR32 &EXEPATH.MSCOMM32.OCX /S”,0)ENDIF =WriteIni('OCXDLLREG',GETENV(“COMPUTERNAME”),'YES','&ExePath.LXJ.INI')Endif Endfunc *********因本程序所有的字符串加密目前采用MD5校验,故把原有的加密函数也贴出来贡献给大家参考。 *!* ***工作站安装加密 Function WorkJm Para YourId,JmStr YourId=JmStr-Upper(Alltrim(YourId))Local CurrentId CurrentId='' For IdName=1 To Len(YourId)Step 2 CurrentId=CurrentId+Subst(YourId,Len(YourId)-IdName,1)Endfor For IdName=0 To Len(YourId)Step 2 CurrentId=CurrentId+Subst(YourId,Len(YourId)-IdName,1)Endfor YourId=CurrentId CurrentId='' For IdName=1 To Len(YourId)CurrentId=CurrentId+Chr(Bitxor(Asc(Subst(YourId,IdName,1)),IdName))Endfor Return(CurrentId)Endfunc ***系统使用期限加密 Function ServerJm Para GetSd,JmStr GetSd=JmStr-Upper(Allt(GetSd))Local CurSd CurSd='' For IdName=0 To Len(GetSd)Step 2 CurSd=CurSd+Subst(GetSd,Len(GetSd)-IdName,1)Endfor For IdName=1 To Len(GetSd)Step 2 CurSd=CurSd+Subst(GetSd,Len(GetSd)-IdName,1)Endfor GetSd=CurSd CurSd='' For IdName=1 To Len(GetSd)CurSd=CurSd+Chr(Bitxor(Asc(Subst(GetSd,IdName,1)),IdName))Endfor Return(CurSd)Endfunc 有人找我关于程序中的读写INI的函数,其实以前早发过了,为了方便大家,就一起贴出来吧!API的定义在前面。Function ReadIni PARAMETERS lcHeader, lcCentry,lcFile Private lcBuffer lnBufferSize = 128 lcBuffer = Space(lnBufferSize)+Chr(0)=GETPRIVSTR(lcHeader, lcCentry, “", @lcBuffer, Len(lcBuffer),lcFile)lcBuffer = Alltrim(Left(lcBuffer, lnBufferSize))Return Left(lcBuffer, Len(lcBuffer)-1)Endfunc Procedure WriteIni PARAMETERS lcHeader, lcCentry, LCvalue,lcFile =WRITEPRIVSTR(lcHeader, lcCentry, LCvalue, lcFile)Return Endproc VFP编程:VFP报表数据分组 在设计报表时,有时所要报表的数据是成组出现的,需要以组为单位对报表进行处理。例如在教师花名册时,为阅读方便,需要按所在部门或职称进行分组。利用分组可以明显地分隔每组记录,使数据以组的形式显示。组的分隔是根据分组表达式进行的,这个表达式通常由一个以上的表字段生成,有时也可以相当复杂。可以添加一个或多个组、更改组的顺序、重复组标头或者更改、删除组带区。 分组之后,报表布局就有了组标头和组注脚带区,可以向其中添加控件。组标头带区中一般都包含组所用字段的“域控件”,可以添加线条、矩形、圆角矩形,也可以添加希望出现在组内第一条记录之前的任何标签。组注脚通常包含组总计和其他组总结性信息。 报表布局实际上并不排序数据,它只是按它们在数据源中存在的顺序处理数据。因此,如果数据源是表,记录的顺序不一定适合于分组。当设置索引的 表、视图或查询作为数据源时,可以把数据适当排序来分组显示记录。排序必须使用视图、索引或布局外的其他形式的数据操作来完成。 1.添加单个数据分组 一个单组报表可以基于输入表达式进行一级数据分组。例如,对教师表按字段排序后,可以把组设在“职称”字段上来打印所有记录,相同职称的记录在一起打印。 添加单个数据分组的步骤如下: 从快捷菜单或“报表”菜单中,选择“数据分组”。出现“数据分组”对话框。 (1)这里的属性设置包括打印标头和注脚文本来区别各组,在新的一页上打印每一组,当某组在新页上开始打印时,重置页号。 对话框选项意义如下: ①分组表达式。显示当前报表的分组表达式,如字段名,并允许输入新的字段名。如果想创建一个新的表达式,可选择对话按钮,显示“表达式生成器”对话框。 ②组属性。此属性用以指定如何分页。 ③每组从新的一列上开始。当组改变时,从新的一列上开始。 ④每组从新的一页上开始。当组改变时,从新的一页上开始。 ⑤每组的页号重新从1开始。当组改变时,组在新页上开始打印,并重置页号。 ⑥每页都打印组标头。当组分布在多页上时,指定在所有页的页标头后打印组标头。 ⑦小于右值时组从新的一页上开始。要打印组标头时,组标头距页底的最小距离。 ⑧插入。在“分组表达式”框中插入一个空文本框,以便定义新的分组表达式。 ⑨删除。从“分组表达式”框中删除选定的分组表达式。 (2)在第一个“分组表达式”框内键人分组表达式。或者选择对话按钮,在“表达式生成器”对话框中创建表达式。 (3)在“组属性”区域,选定想要的属性。 (4)选择“确定”按钮。 添加表达式后,可以在带区内放置任意需要的控件。通常,把分组所用的域控件从“细节”带区移动到“组标头”带区。 2.添加多个数据分组 有时需要对报表进行多个数据分组,如在打印教师花名册时在用“所在部门”分组的基础上,还想按职称分组,这也称为嵌套分组。嵌套分组有助于组织不同层次的数据和总计表达式。在报表内最多可以定义20级的数据分组。 添加多个数据分组步骤如下: (1)从“报表”菜单中,选择“数据分组”。出现“数据分组”对话框。 (2)在第一个“分组表达式”框内键人分组表达式。或者选择对话按钮,在“表达式生成器”对话框中创建表达式。 (3)在“组属性”区域,选择所需的属性。 (4)选择“插入”并且对每个分组表达式重复2、3步。 (5)选择“确定”按钮。 注意:在选择一个分组层次时,要先估计一下分组值的可能更改的频度,然后定义最经常更改的组为第一层。例如,报表可能需要一个按省份的分组和一 个按城市的分组。城市字段的值比省份字段更易更改,因此,城市应该是两个组中的第一个,省份就是第二个。在这个多组报表内,表必须在一个关键值表达式上排 序或索引过,例如:省份+城市。 还可以对添加的单个或多个数据组进行更改分组设置,包括更改组带区、删除组带区、更改分组次序等操作。 VFP编程:VFP报表输出 设计报表的最终目的是要按照一定的格式输出符合要求的数据。报表文件的扩展名为.frx,该文件存储报表设计的详细说明。每个报表文件还带有扩展名为.frt的报表文件。报表文件不存储每个数据字段的值,只存储数据源的位置和格式信息。 报表文件按数据源中记录出现的顺序处理记录,如果直接使用表内的数据,数据就不会在布局内正确地按组排序。因此,在打印一个报表文件之前,应确认数据源中已对数据进行了正确排序。一般,建议报表的数据源使用视图或查询文件。 报表输出时,应该先进行页面设置,通过预览报表调整版面效果,最后再打印输出到纸介质上。 1.页面设置 规划报表时,通常会考虑页面的外观。例如页边距,纸张类型和所需的布局。在“页面设置”对话框中可以设置报表的左边距并为多列报表设置列宽和列间距,设置纸张大小和方向,步骤如下: (1)从“文件”菜单中,选择“页面设置”,出现“页面设置”对话框。 (2)在“左页边距”框中输入一个边距数值。页面布局将按新的页边距显示。 (3)若要选择纸张大小,选择“打印设置”。 (4)在“打印设置”对话框中,从“大小”列表中选定纸张大小。 (5)若要选择纸张方向,从“方向”区选择一种方向,再选择“确定”。 (6)在“页面设置”对话框中,选择“确定”。 在更改了纸张的大小和方向设置时,需要注意该纸张大小是否可以设置所选的方向。例如,如果纸张定为信封,则方向必须设置为横向。 2.预览报表 通过预览报表,不用打印就能看到它的页面外观。例如,可以检查数据列的对齐和间隔,或者查看报表是否返回所需的数据。有两个选择:显示整个页面或者缩小到一部分页面。 “预览”窗口有它自己的工具栏,使用其中的按钮可以逐页地进行预览。步骤如下: (1)从“显示”菜单中选择“预览”命令,或在“报表设计器”中单击鼠标右键并从弹出的快捷菜单中选择“预览”命令,也可以直接单击“常用”工具栏中的“打印预览”按钮。 (2)在打印预览工具栏中,选择“上一页”或“前一页”来切换页面。 (3)若要更改报表图象的大小,选择“缩放”列表。 (4)若要打印报表,选择“打印报表”按钮。 (5)若想要返回到设计状态,选择“关闭预览”按钮。 注意:如果得到如下提示“是否将所做更改保存到文件?”那么,在选定关闭“预览”窗口时一定还选取了关闭布局文件。此时可以选定“取消”按钮回到“预览”,或者选定“保存”按钮保存所做更改并关闭文件。如果选定了“否”,将不保存对布局所做的任何更改。 3.打印输出 使用报表设计器创建的报表布局文件只是一个外壳,它把要打印的数据组织成令人满意的格式。如果使用预览报表,在屏幕上获得最终符合设计要求的页面后,就要打印出来。步骤如下: (1)从“文件”菜单中选择“打印”命令,或在报表设计器中单击鼠标右键并从弹出的快捷菜单中选择“打印”命令,也可以直接单击“常用”工具栏中的“运行”按钮,出现“打印”对话框。 (2)在“打印”对话框中,设置合适的打印机、打印范围、打印份数等项目,通过“属性”设置打印纸张的尺寸、打印精度等。 (3)选择“确定”按钮。Visual FoxPro就会把报表发送到打印机上。 如果未设置数据环境,则会显示“打开”对话框,并在其中列出一些表,从中可以选定要进行操作的一个表。 在命令窗口或程序中使用REPORT FORM(报表文件名>[PREVIEw]命令也可以打印或预览指定的报表。 VFP编程:VFP标签设计 标签是一种特殊的报表,它的创建、修改方法与报表基本相同。和创建报表一样,可以使 用标签向导创建标签,也可以直接使用标签设计器创建标签。无论使用哪种方法来创建标签,都必须指明使用的标签类型,它确定了标签设计器中的“细节”尺寸。标签设计器是报表设计 器的一部分,它们使用相同的工具菜单和工具栏,甚至有的界面名称都一样。主要的不同是标 签设计器基于所选标签的大小自动定义页面和列。 若要快速创建一个简单的标签布局,可以和报表设计器中那样在“报表”菜单中选择“快速 报表”命令。“快速报表”提示输入创建标签所需的字段和布局。这里只简要介绍一下如何用标签设计器创建标签。 在“文件”菜单中选择“新建”,在“新建’’对话框中选定“标签”并单击“新建文件’’按钮。显示“新建标签”对话框。标准标签纸张选项出现在“新建标签”对话框中.列表框中提供了几十种型号的标签,每种型号的后面列出了其高度、宽度和列数。标签向导提供了多种标签尺寸,分为英制和公制两种。 从“新建标签”对话框中,选择标签布局,然后选定“确定”按钮,出现标签设计器窗口。 标签设计器将出现刚选择的标签布局所定义的页面,默认情况下,标签设计器显示5个报表带区:页标头、列标头、细节、列注脚和页注脚,还可在标签上添加组标头、组注、脚标题、总结带区。 接着就可以像处理报表一样在标签设计器中给标签指定数据源并插入控件。 VFP中BROWSE语句的妙用 运用BROWSE语句进行查询时,常常会碰到这样的情况:由于字段太多或者太长,一屏往往放不下。如果要查超过一屏的部分,只能用回车键一个字段 一个字段地移,当后面的字段移入屏幕时,前面的字段就移出屏幕。但用户有时可能需要在屏幕上保持某些信息,例如姓名,当其它字段移入或移出屏幕时它们应该 始终出现在屏幕上。 BROWSE提供了LOCK选项完成这一功能。但这样一来,BROWSE窗口被分割成左右两部分,不好看。而且,只能一个字段一个字段地移,很不方便。 笔者设计了一种方法,能巧妙实现BROWSE语句的左右翻屏。 实现方法是定义二个功能键F5、F6,F6进行左移,F5进行右移,当功能键被触发时执行KEYBOARD CHR(23)语句,相当于按了CTRL+W键,退出当前BROWSE,然后再重新定义另一个BROWSE。 用上述方法完全退出BROWSE,避免了BROWSE的嵌套问题。否则,切换来切换去,嵌套一深,容易出问题。 上述方法操作方便,而且对用户是完全透明的。下面举一例子说明。人事档案数据库包括姓名、性别、出生日期、职务、职称、党派、籍贯、所属部门、家庭地址、邮编、联系电话、备注等数据项,查询时一屏显示不下,于是分两屏显示,第一屏为: ┌────┬──┬────┬────┬─────┬───┬────┬─────┐ │ 姓 名 │性别│出生日期│ 职 务 │ 职 称 │ 党派 │ 籍 贯 │ 所属部门 │ ├────┼──┼────┼────┼─────┼───┼────┼─────┤ │ 张 三 │ 男 │70.01.28│ │ 工程师 │共产党│上海 │软件一室 │ │ 李 四 │ 女 │58.12.01│副所长 │高级工程师│ │广东广州│ │ │ 王 五 │ 男 │44.03.12│室主任 │副研究员 │民盟 │北京 │软件二室 │ │.....│..│......│....│.....│...│....│.......│ │.....│..│......│....│.....│...│....│.......│ │.....│..│......│....│.....│...│....│.......│ └────┴──┴────┴────┴─────┴───┴────┴─────┘ 按F6键后切换为第二屏,第二屏为: ┌────┬───────────┬───┬───────┬─────────┐ │ 姓 名 │ 家庭地址 │邮 编 │ 联系电话 │ 备 注 │ ├────┼───────────┼───┼───────┼─────────┤ │ 张 三 │广州市天河路34号 │510075│87769602-3806 │全国劳动模范 │ │ 李 四 │广州市天河路34号311房 │510075│87769602-3706 │ │ │ 王 五 │广州市解放路14号301房 │510043│88888888 │学术委员会委员 │ │.....│..│.....│....│.....│ │.....│..│.....│....│.....│ │.....│..│.....│....│.....│ 泤程序如下: USE person @0,26 SAY ”人员基本情况浏览“ DEFINE WINDOW CONTENT FROM 2,0 TO 22,79 FOOTER ” Esc--退出,F5--左翻,F6--右翻 “ ACTIVATE WINDOW content ON KEY LABEL F5 DO pan WITH ”F5“ ON KEY LABEL F6 DO pan WITH ”F6“ con_var=1 DO WHILE.T.DO CASE CASE con_var=0 EXIT CASE con_var=1 DO right CASE con_var=2 DO left ENDCASE ENDDO NOTE 定义一个控制变量con_var,con_var为1时为预设状态,显示第一屏; NOTE 按F6键时con_var为2,显示第二屏; NOTE 按ESC键时con_var为0,退出。ON KEY LABEL F5 ON KEY LABEL F6 USE RELEASE WINDOW content RETURN PROC pan PARA con KEYBOARD CHR(23)DO CASE CASE con=”F5“ con_var=1 CASE con=”F6“ con_var=2 ENDCASE RETURN PROC left BROW FIELDS name:H=”姓名“,sex:H=”性别“,birth:H=”出生日期“,leader:H=”职务“,;profess:H=”职称“,party:H=”党派“,native:h=”籍贯“,dept:h=”所属部门“;IN WINDOW content NODELETE NOAPPEND NOEDIT COLOR SCHEME 10 IF LASTKEY()=27 con_var=0 ENDIF RETURN PROC right BROW FIELDS name:H=”姓名“,address:H=”家庭地址“,zip:H=”邮编“,telephone:H=”电话“;note:H=”备注“;IN WINDOW content NODELETE NOEDIT NOAPPEND COLOR SCHEME 10 IF LASTKEY()=27 con_var=0 ENDIF RETURN VFP进行分布式查询 Microsoft SQL Server 7.0 提供了执行基于 OLE DB providers 的查询的能力.这是靠使用 OpenQuery 或 OpenRowset Transact-SQL 函数或使用包含一个已连接名四部查询来执行的.例如: sp_addlinkedserver ’mylinkedserver’, ’product_name’, ’myoledbprovider’, ’data_source’,’location’, ’provider_string’, ’catalog’ Select * FROM OPENQUERY(mylinkedserver, ’select * from table1’) 可以用 Microsoft OLE DB provider for ODBC(MSDASQL)和 Visual FoxPro ODBC driver 来设置一个已连接服务器(linked server)来执行基于 FoxPro.dbc 和.dbf 文件的分布式查询.不支持用 Jet OLEDB Provider 和 FoxPro.以下 T-SQL 示例代码演示如何用 OpenQuery 和 OpenRowset 函数设置和使用分布式查询 FoxPro.它也演示了如何从 SQL Server 更新一个远程 FoxPro 表.你可以在一个 SQL Server 7.0 机器上安装了 Visual FoxPro ODBC driver 后, 在 SQL Query Analyzer 中测试这些代码.你需要改变数据源名和路径到适当的 FoxPro 文件: /* OPENROWSET 和 OPENQUERY 示例.以 VFP 通过 ODBC OLE DB provider */ /* 这些 OPENROWSET 示例依赖于示例文件 VFP98dataTestdata.dbc 如果你的数据在不同的位置请修改你的代码 */ --======--使用 DBC 文件 , 读和更新 --======--OPENROWSET DSN-less 示例 select * from openrowset(’MSDASQL’, ’Driver=Microsoft Visual FoxPro Driver;SourceDB=e:VFP98dataTestdata.dbc;SourceType=DBC’,’select * from customer where country!= ”USA“ order by country’)go select * from openrowset(’MSDASQL’, ’Driver=Microsoft Visual FoxPro Driver;SourceDB=e:VFP98dataTestdata.dbc;SourceType=DBC’,’select * from customer where region=”WA“’)go Update openrowset(’MSDASQL’,’Driver=Microsoft Visual FoxPro Driver;SourceDB=e:VFP98dataTestdata.dbc;SourceType=DBC’,’select * from customer where region=”WA“’)set region = ”Seattle“ go --check to verify which rows were updated select * from openrowset(’MSDASQL’,’Driver=Microsoft Visual FoxPro Driver; SourceDB=e:VFP98dataTestdata.dbc; SourceType=DBC’,’select * from customer where region=”Seattle“’) go --OPENROWSET DSN 示例 /* 注意:如果 SQL Server 是配置为使用本地帐号 DSN 示例可能失败.*/ select * from openrowset(’MSDASQL’, ’DSN=Visual FoxPro Database; SourceDB=e:VFP98dataTestdata.dbc;SourceType=DBC’,’select * from customer where country!= ”USA“ order by country’)go /* sp_addlinkedserver 示例 */ --sp_addlinkedserver example with DSN /* 你需要生成一个 DSN 并使它指向 Testdata 数据库.修改你的代码以反映 DBC 位置 */ /* 注意:如果 SQL Server 是配置为使用本地帐号 DSN 示例可能失败.*/ sp_addlinkedserver ’VFP Testdata Database With DSN’, ’’,’MSDASQL’,’VFP System DSN’ go sp_addlinkedsrvlogin ’VFP Testdata Database With DSN’, FALSE, NULL, NULL, NULL go Select * FROM OPENQUERY([VFP Testdata Database With DSN], ’select * from customer where region = ”Seattle“ ’) go --Update using OpenQuery Update OPENQUERY([VFP Testdata Database With DSN], ’select * from customer where region=”WA“’) set region = ”Seattle“ go /* SP_addlinkedserver example with DSN-less connection */ /* This example also depends on the sample files Testdata.dbc Modify your code accordingly for differences in location or DBC name */ sp_addlinkedserver ’VFP Testdata Database With No DSN’,’’,’MSDASQL’,NULL,NULL,’Driver={Microsoft Visual FoxPro Driver};UID=;PWD=;SourceDB=e:VFP98dataTestdata.dbc;SourceType=DBC;Exclusive=No;BackgroundFetch=Yes;Collate=Machine;’ go sp_addlinkedsrvlogin ’VFP Testdata Database With No DSN’, FALSE, NULL, NULL, NULL go Select * FROM OPENQUERY([VFP Testdata Database With No DSN], ’select * from customer where country!= ”USA“ order by country’)go --====== --使用 VFP 6.0 driver, read and update data from VFP sample dbf files --====== --OPENROWSET DSN-less example select * from openrowset(’MSDASQL’, ’Driver=Microsoft Visual FoxPro Driver;SourceDB=e:VFP98data;SourceType=DBF’,’select * from customer where country!= ”USA“ order by country’)go --perform Update Update openrowset(’MSDASQL’,’Driver=Microsoft Visual FoxPro Driver;SourceDB=e:VFP98data;SourceType=DBF’,’select * from customer where region=”Seattle“’)set region = ”WA“ go --verify update select * from openrowset(’MSDASQL’, ’Driver=Microsoft Visual FoxPro Driver;SourceDB=e:VFP98data;SourceType=DBF’,’select * from customer where region = ”WA“’)go --OPENROWSET DSN example --DSN points to the folder where.dbf files are./* Note this Example may fail if SQL Server is configured to use a local account.*/ select * from openrowset(’MSDASQL’,’DSN=Visual FoxPro Tables; SourceDB=e:VFP98data; SourceType=DBF’,’select * from customer where country!= ”USA“ order by country’) go VisualFoxpro报表打印程序代码 数据库报表程序是经常使用的,现在很多用户都使用报表设计器设计报表,且简单方便;但笔者在工作中遇到要对成百个数据库打印的情况,这些数据库除了字段名不相同外,其他结构信息基本相同,因此笔者就编制了如下的一个通用程序,供同行参考。set talk off hh1=printstatus()set print on do while.not.hh1 ?”打印机未准备好,请准备好打印机“ hh1=printstatus()enddo set talk off set device to print clear a1=getfile(”dbf“)&&打开打开文件对话框 use ”&a1“ &&打开指定的文件 n1=fcount()&&获取打开的库中的字段数 dimension a(n1)&&定义一个存放字段名的数组 dimension b(n1)&&定义一个存放字段宽度的数组 k=1 do while k<=n1 a(k)=field(k)k=k+1 enddo &&将字段名赋给数组 w=1 do while w<=n1 b(w)=fsize(a(w))&&获取字段的长度 if b(w)<6 b(w)=8 else b(w)=b(w)+2 endif w=w+1 enddo do while not eof()r1=1 &&显示表头的第一行 m=1 col1=1 do while m<=n1 if m=1 @r1,col1 say ”┌“+replicate(”-“,b(m)) else if m=n1 @r1,col1 say ”┬“+replicate(”-“,b(m))+”┐“ else @r1,col1 say ”┬“+replicate(”-“,b(m)) endif endif col1=col1+b(m) m=m+1 enddo m=1 &&显示字段名行 col1=1 do while m<=n1 if m=1 @r1+1,col1 say ”∣“+substr(a(m),1,6)+replicate(” “,(b(m)-len(a(m))))else if m=n1 @r1+1,col1 say ”∣“+substr(a(m),1,6)+replicate(” “,(b(m)-len(substr(a(m),1,6))))+”∣“ else @r1+1,col1 say ”∣“+substr(a(m),1,6)+replicate(” “,(b(m)-len(substr(a(m),1,6)))) endif endif col1=col1+b(m)m=m+1 enddo m=1 &&由于字段多,一行不能完全显示整个行,因此分为两行显示字段名行 col1=1 do while m<=n1 if m=1 @r1+2,col1 say ”∣“+substr(a(m),7) else if m=n1 @r1+2,col1 say ”∣“+substr(a(m),7)+replicate(” “,(b(m)-len(substr(a(m),7))))+”∣“ else @r1+2,col1 say ”∣“+substr(a(m),7) endif endif col1=col1+b(m)m=m+1 enddo m=1 &&显示字段名下面的一行表格线 col1=1 do while m<=n1 if m=1 @r1+3,col1 say ”├“+replicate(”-“,b(m))else if m=n1 @r1+3,col1 say ”┼“+replicate(”-“,b(m))+”┤“ else @r1+3,col1 say ”┼“+replicate(”-“,b(m)) endif endif col1=col1+b(m)m=m+1 enddo row1=r1+4 do while.not.eof()&&每页显示20个记录 m=1 &&显示各记录的值 col1=1 do while m<=n1 if type(a(m))=”C“ if m=1 @row1,col1 say ”∣“+&a(m) else if m=n1 @row1,col1 say ”∣“+alltrim(&a(m))+replicate(” “,(b(m)-len(alltrim(&a(m)))))+”∣“ else @row1,col1 say ”∣“+&a(m) endif endif else if m=1 @row1,col1 say ”∣“+str(&a(m)) else if m=n1 @row1,col1 say ”∣“+alltrim(str(&a(m)))+replicate(” “,(b(m)-len(alltrim(str(&a(m))))))+”∣“ else @row1,col1 say ”∣“+alltrim(str(&a(m))) endif endif endif col1=col1+b(m) m=m+1 enddo SKIP if eof() &&显示数据库结束的最后一行 m=1 col1=1 do while m<=n1 if m=1 @row1+1,col1 say ”└“+replicate(”-“,b(m)) else if m=n1 @row1+1,col1 say ”┴“+replicate(”-“,b(m))+”┘“ else @row1+1,col1 say ”┴“+replicate(”-“,b(m)) endif endif col1=col1+b(m) m=m+1 enddo h=”.f.“ exit else if r1=20 &&显示每一页的最后一行 m=1 col1=1 do while m<=n1 if m=1 @row1+1,col1 say ”└“+replicate(”-“,b(m)) else if m=n1 @row1+1,col1 say ”┴“+replicate(”-“,b(m))+”┘“ else @row1+1,col1 say ”┴“+replicate(”-“,b(m))endif endif col1=col1+b(m) m=m+1 enddo r1=1 eject exit else m=1 &&显示每个记录下面的一行表格线 col1=1 do while m<=n1 if m=1 @row1+1,col1 say ”├“+replicate(”-“,b(m)) else if m=n1 @row1+1,col1 say ”┼“+replicate(”-“,b(m))+”┤“ else @row1+1,col1 say ”┼“+replicate(”-",b(m)) endif endif col1=col1+b(m) m=m+1 enddo endif ENDIF row1=row1+2 r1=r1+1 enddo && 每页显示20个记录到此 enddo set print off set device to screen set talk on return 以上程序将一个数据库中的所有记录以行为单位打印出来,编制环境是Visual Foxpro 6.0,如果一个数据库字段比较少,希望一行打印二个以上的记录,稍作修改即可。需要提醒读者的是,由于考虑到篇幅,本程序只设计了包含数字型和字符型的 数据库,对有其它类型的数据库,稍作修改就行了;如果用户希望一页的记录不是20,只需要修改if r1=20这句中r1的值。笔者已经编制了这类程序,可以向读者提供。 VFP模拟试题 1。VFP是一种 ________ 模型的数据库管理系统。选择:A.层次_ B.网络_C.对象_ D.关系 答案: D 2。对于二维表的关键字来讲,不一定存在的是 ________。选择:A.主关键字_ B.候选关键字_C.超关键字_ D.外部关键字 答案: D 3。目前三种基本的数据模型是 ________。选择:A.层次模型、网络模型、关系模型_ B.对象模型、网络模型、关系模型_C.网络模型、对象模型、层次模型_ D.层次模型、关系模型、对象模型 答案: A 4。在命令窗口中,不能实现的操作是 ________。选择:A.复制已执行过的命令_ B.重复执行已执行过的命令_C.同时执行多个命令_ D.在命令窗口中显示命令执行结果 答案: D 5。VFP系统中,表的结构取决于 ___________。选择:A.字段的个数、名称、类型和长度_ B.字段的个数、名称、顺序_C.记录的个数、顺序_ D.记录和字段的个数、顺序 答案: A 6。某表单FrmA上有一个命令按钮组CommandGroup1,命令按钮组中有四个命令按钮:CmdTop,CmdPrior,CmdNext,CmdLast。要求按下CmdLast时,将按钮CmdNext的Enabled属性置为.F.,则在按钮CmdLast的Click事件中应加入_______ 命令。选择:A.This.Enabled=.F.B.This.Parent.CmdNext.Enabled=.F._C.This.CmdNext.Enabled=.F.D.Thisform.CmdNext.Enabled=.F._ 答案: B 7。数据库管理系统是 ________。选择:A.教学软件_ B.应用软件C.计算机辅助设计软件_ D.系统软件 答案: D 8。关系型数据库采用 ________ 表示实体和实体间的联系。选择:A.对象 B.字段_C.二维表_ D.表单 答案: C 9。在定义表结构时,以下__________ 数据类型的字段宽度都是定长的。选择:A.字符型、货币型、数值型_ B.字符型、货币型、整型_C.备注型、逻辑型、数值型_ D.日期型、备注型、逻辑型 答案: D 10。VFP系统中的查询文件是指一个包含一条SELECT-SQL命令的程序文件,文件的扩展名为________。选择:A..PRG B..QPRC..SCX D..TXT 答案: B 11。函数SUBSTR(“VisualFoxPro5.0”,7,6)的返回值是______。 A.lFoxPro B.FoxProC.FoxPro5 D.FoxPro5.0 答案: B 12下列说法中正确的是_____。 A.数据库打开时,该库中的表将自动打开 B.当打开数据库中的某个表时,该表所在的数据库将自动打开 C.如果数据库以独占的方式打开,则库中的表只能以独占方式打开 D.如果数据库中的某个表以独占方式打开,则库中的其它表也只能以独占方式 答案: B 13。一个表的主关键字被包含到另一个表中时,在另一个表中称这些字段为_______。 A.外关键字 B.主关键字C.超关键字 D.候选关键字_ 答案: A 14。VFP系统中,使用查询设计器生成的查询文件中保存的是_______。 A.查询的命令 B.与查询有关的基表 C.查询的结果 D.查询的条件 答案: A 15。将某个控件绑定到一个字段,移动记录后字段的值发生变化,这时该控件的_______属性的值也随之变化。A.Value B.NameC.Caption D.没有_ 答案: A 16。如果要引用一个控制所在的直接容器对象,则可以使用下列_____属性。 A.THIS B.THISFORMC.PARENT D.都可以 答案: C 17。页框(PageFrame)能包容的对象是_____。选择:A.页面(Page)B.列(Column)C.标头(Header)D.表单集(FormSet)_ 答案: A 18。对于创建新类,VFP提供的工具有:_____。选择:A.类设计器和报表设计器 _ B.类设计器和查询设计器 _C.类设计器和表单设计器 D.类设计器 答案: C 19。以下的四组函数,返回值的数据类型是一致的_____。选择:A.DTOC(DATE()), DATE(),YEAR(DATE())_ B.ALLTRIM(“VFP 5.0”),ASC(“A”), SPACE(8)C.EOF(), RECCOUNT(), DBC()_ D.STR(3.14,3,1), DTOC(DATE()), SUBSTR(“ABCD”,3,1)答案: D 20。VFP的循环语句有_____。选择:A.DO WHILE,FOR和SCAN _ B.DO WHILE,FOR 和 LOOP _C.FOR,SCAN和LOOP _ D.DO CASE 和 DO WHILE _ 答案: A 21。字段的默认值是保存在______。选择:A.表的索引文件中 B.数据库文件中C.项目文件中 D.表文件中 答案: B 22。彻底删除记录数据可以分两步来实现,这两步是______。选择:A.PACK和ZAP B.PACK和RECALL_C.DELETE和PACK D.DELE和RECALL _ 答案: C 23。表之间的“临时性关系”,是在两个打开的表之间建立的关系,如果两个表有一个关闭后,则该“临时性关系” ______。选择:A.转化为永久关系 B.永久保留C.临时保留 D.消失 答案: D 24。表移出数据库后,仍然有效的是______。选择:A.字段的有效性规则 B.表的有效性规则 _C.字段的默认值 _ D.结构复合索引文件中的候选索引 _ 答案: D 25。下列控件均为容器类的是_____。选择:A.表单、命令按钮组、命令按钮 _ B.表单集、列、组合框 _C.表格、列、文本框 _ D.页框、列、表格 答案: D 26。VFP中可执行的表单文件的扩展名是______。选择:A.SCT B.SCXC.SPR D.SPT 答案: B 27。关系模型的基本结构是______。选择:A.二维表_ B.树形结构C.无向图 D.有向图 _ 答案: A 28。创建对象时发生_____事件。选择:A.LostFocus B.InteractiveChange _C.Init D.Click 答案: C 29。关于数据库的操作,下述说法中,_________是正确的。选择:A.数据库被删除后,则它包含的数据库表也随着被删除_ B.打开了新的数据库,则原来已打开的数据库被关闭 _C.数据库被关闭后,它所包含的数据库表不能被打开_ D.数据库被删除后,它所包含的表变成自由表_ 答案: D 30。子类或对象具有延用父类的属性、事件和方法的能力,称为类的_____。选择:A.继承性 B.抽象性C.封装性 D.多态性 _ 答案: A 31。命令按钮中显示的文字内容,是在属性 _______中设置的。选择:A.Name B.CaptionC.FontName D.ControlSource 答案: B 32。VFP系统环境下,运行表单的命令为_______。选择:A.DO FORM <表单名> _ B.REPORT FORM <表单名>_C.DO <表单名> D.只能在项目管理器中运行_ 答案: A 33。建立事件循环的命令为______。选择:A.READ EVENTS B.CLEAR EVENTS_C.DO WHILE„„ENDDO D.FOR„„„ENDFOR_ 答案: A 34。当用鼠标使组合框的内容发生变化时,将首先触发_______事件。选择:A.InteractiveChange B.ClickC.Init D.DownClick 答案: A 35。设有一个页框含有3个页面,其中第一个页面的名字为Page1,上面有二个命令按钮:CmdOk、CmdPrint,如果要在CmdPrint的Click事件中引用CmdOk的Click事件代码,则采用_______。选择:A.This.Parent.CmdOk.Click()B.Thisform.Page1.CmdOk.Click()_C.This.CmdOk.Click()D.Thisform.CmdOk.Click()_ 答案: A 36。有关类、对象、事件,下列说法不正确的是 _________.选择:A.对象用本身包含的代码来实现操作 B.对象是类的特例C.类刻划了一组具有相同结构、操作并遵守相同规则的对象 D.事件是一种预先定义好的特定动作,由用户或系统激活 答案: A 37。从CommandButton基类创建子类cmdA和cmdB,再由cmdA类创建cmdAA子类,则cmdA、cmdB和cmdAA必具有相同的_________。选择:A.Caption属性_ B.Name属性C.BaseClass属性 D.ParentClass属性 答案: C 38。所有类都可识别的事件即最小事件集包括___________.选择:A.Init、Destroy和Error事件_ B.Load、Init和Destroy事件C.Load、Init和Unload事件 D.Init、Activate和Destroy事件 答案: A 39。用户在VFP中创建子类或表单时,不能新建的是 ______________.选择:A.属性_ B.方法C.事件 D.事件的方法代码 答案: C 40。运行查询 CX1.QPR命令是 ________。选择:A.use cx1_ B.use cx1.qprC.do cx1.qpr_ D.do cx1 答案: C 41。在Visual FoxPro系统中,________创建时,将不以独立的文件形式存储。选择:A.查询_ B.视图 _C.类库 D.表单 答案: B 42。文本框绑定到一个字段后,对文本框中的内容进行输入或修改时,文本框中的数据将同时保存到______中。选择:A.Value和Name B.Value和该字段_C.Value和Caption D.Name和该字段_ 答案: B 43。在Visual FoxPro中创建含备注字段的表和表的结构复合索引文件后,系统自动生成的三个文件的扩展名为 ___________。选择:A..PJX、.PJT、.PRG_ B..DBF、.CDX、.FPT_C..FPT、.FRX、.FXP _ D..DBC、.DCT、.DCX 答案: B 44。下列几组控件中,均为容器类的是 _________。选择:A.表单、列、组合框_ B.页框、页面、表格_C.列表框、列、下拉列表框_ D.表单、命令按钮组、OLE控件 答案: B 45。Visual FoxPro是一个 ________。选择:A.数据库系统 B.数据库管理系统_C.数据库 D.数据库管理员 答案: B 46。如果要在同一个数据库的二个表之间建立关系,则在父表的结构复合索引文件中创建_______。选择:A.主索引_ B.候选索引_C.普通索引_ D.唯一索引 答案: A 47。在向数据库中添加表的操作时,下列说法中不正确的是 ________。选择:A.可以将自由表添加到数据库中_ B.可以将数据库表添加到另一个数据库中_C.可以在项目管理器中将自由表拖放到数据库中_ D.先将数据库表移出数据库成为自由表,而后添加到另一个数锯库中 答案: B 48。VFP环境中,当用户将某个表的记录或整个表文件都锁定时,只读命令依然可以工作。下列____命令在记录或整个文件锁定时依然可以工作。选择:A.INDEX B.REPLACEC.APPEND D.SELECT-SQL 答案: D 49。表之间的“一对多”关系是指___________。选择:A.一个表与多个表之间的关系 B.一个表中的记录对应另一个表中的多个记录 _C.一个表中的记录对应多个表中的一个记录 __ D.一个表中的记录对应多个表中的多个记录 答案: B 50。由计算机、操作系统、DBMS、数据库、应用程序等组成的整体称为___________。选择:A.数据库系统 B.数据库管理系统C.文件系统 D.软件系统 答案: A 51。设有一个页框含有3个页面,其中第一个页面的名字为Page1,上面有二个命令按钮:CmdOk、CmdPrint,如果要在CmdPrint的Click事件中引用CmdOk的Click事件代码,则采用_______。选择:A.This.Parent.CmdOk.Click()B.Thisform.Page1.CmdOk.Click()C.This.CmdOk.Click()D.Thisform.CmdOk.Click()答案: A 52。如果要引用一个控制所在的直接容器对象,则可以使用下列_____属性。 A.THIS B.THISFORM C.PARENT D.都可以 答案: C 53。下列四个事件:Init,Load,Activate和Destroy发生的顺序为_____。 A.Init,Load,Activate,Destroy B.Load,Init,Activate,Destroy C.Activate,Init,Load,Destroy D.Destroy,Load,Init,Activate 答案: A 54。 设.null..AND..F.、.null..OR..F.、.null.=.null.分别是VFP 系统中的三个表达式,它们的值依次为:______。 A..null.,.null.,.null.B..F.,.null.,.null.C:.F.,.null.,.T.D..F.,.F.,.null.答案: B 55。创建对象时发生_____事件。A.LostFocus B.InteractiveChange C.Init D.Click 答案: C 56。VFP 中,执行“?ATC(“管理”,“数据库管理系统”)”命令后,返回的结果是:______。A.0 B.4 C.7 D.错误的函数名 答案: C 57。下列关于数据的操作说法中,正确的是______。答案: C A.货币型数据不能参加算术运算 B.两个日期型数据可以进行加法运算 C.一个日期型数据可以加或减一个整数 D.字符型数据能比较大小,日期型则不能 58。VFP中可执行的表单文件的扩展名是______。A.SCT B.SCX C.SPR D.SPT 答案: B 59。如果一个数据库表的DELETE角发器设置为.F.,则不允许对该表作_________的操作。 A.修改记录 B.删除记录 C.增加记录 D.显示记录 答案: B 60。列表框是_______控件。 A.数据绑定型 B.非数据绑定型 C.数值型 D.逻辑型 答案: A 61。在VFP的菜单或菜单选项中,经常会有一些呈暗灰色的选项,这可能是______。 A.这些项在当前状态下不起作用或其处理程序没有装人 B.系统运行发生故障 C.本身有缺陷 D.以上都不对 答案: A 62。VFP的文件菜单中的CLOSE命令是用来关闭________。 A.当前工作区中已打开的数据库 B.所有已打开的数据库 C.所有窗口 D.当前活动的窗口 答案: D 63。项目管理器的功能是组织和管理与项目有关的各种类型的_________。 A.文件 B.字段 C.程序 D.数据 答案: A 64。对于空值,下列叙述中不正确的是______。答案: C A.空值不是一种数据类型 B.空值可以赋给变量、数组和字段 C.空值等于空串(“”)和空格 D.条件表达式中遇到null值,该条件表达式为“假” 65。在VFP3.0系统环境下,若使用的命令中同时含有子句FOR、WHILE和SCOPE(范围),则下列叙述中正确的是_________。 A.三个子句执行时的优先级这为:FOR、WHILE、SCOPE(范围) B.三个子句执行时的优先级这为:WHILE、SCOPE(范围)、FOR C.三个子句执行时的优先级这为:SCOPE(范围)、WHILE、FOR D.无优先级,按子句出现的顺序执行 答案: C 66。有关查询与视图,下列说法中不正确的是______。答案: B A.查询是只读型数据,而视图可以更新数据源 B.查询可以更新源数据,视图也有此功能 C.视图具有许多数据库表的必性,利用视图可以创建查询和视图 D.视图可以更新源表中的数据,存在于数据库中 67。有关类、对象、事件,下列说法中不正确的是_________。答案: A A.对象仅能用本身包含的代码来实现操作 B.对象可以是任何客观事物,对象是类的特例 C.类是一组具有相同结构、操作并遵守相同规则的对象 D.事件是一种预先定义好的特定动作,由用户或系统激活 68。下列各组控件中,全部可与表中数据绑定的控件是_____。答案: C A.EditBox、Grid、Line B.ListBox、Shape、OptonButton C.ComBox、Grid、TextBox D.CheckBox、Separator、EditBox 69。若要建一个有5个按钮的选项组,应将属性_____的值改为5。 A.Optiongroup B.Buttoncount C.BoundColumn D.ControlSource 答案: B 70。在多用户环境下,缓冲技术可以保护对单个记录或多个记录所做的数据更新以及数据维护操作。Visual FoxPro以两种锁定方式提供缓冲:______。 A.保守式和开放式 B.记录方式和表方式 C.对象式和类式 D.数据方式和程序方式 答案: A 71。对于自由表而言,不允许有重复值的索引是 _______。 A.主索引 B.侯选索引 C.普通索引 D.唯一索引 答案: B 72。下列命令中,不能使程序跳出循环的是_______。 A.LOOP B.EXIT C.QUIT D.RETURN 答案: A 73。下列说法中,不正确的是_______。 选择:A.二维表中的每一列均有唯一的字段名 B.二维表中不允许出现完全相同的两行C.二维表中行的顺序、列的顺序均可以任意交换 D.二维表中行的顺序、列的顺序不可以任意交换 答案: D 74。有一菜单文件MAIN.MNX,运行该菜单的操作是_______。选择:A.执行命令 DO MAIN.MNX B.执行命令 DO MENU MAIN.MNX C.先生成菜单程序文件MAIN.MPR,再执行命令DO MAIN.MPR D.先生成菜单程序文件MAIN.MPR,再执行命令DO MENU MAIN.MPR 答案: D 75。关于表格控件,下列说法中不正确的是_______。 选择:A.表格的数据源可以是表、视图、查询 B.表格中的列控件不包含其它控件 C.表格能显示一对多关系中的子表 D.表格是一个容器对象 答案: B 76。学生管理数据库中有二个表:学生表和成绩表,表结构分别如下,xs.dbf | cj.dbf 学号 xh c,8 | 学号 xh c, 8 姓名 xm c,8 | 课程号 kch c, 4 性别 xb c,2 | 课程名 kcm c, 20 出生日期 csrq d | 成绩 cj n,3 有一个按班级号查该班每一个学生总成绩的表单: 班级号由学生学号的前4位组成。该表单组合框的 RowSource Type属性为 3-SQL 语句,则它的 RowSource属性为_______。 选择:A.select DISTINCT SUBSTR(xh,1,4)FROM xs INTO CURSOR xtmp B.select SUBSTR(xh,4)FROM xs INTO CURSOR xtmp C.select DISTINCT xh FROM xs INTO CURSOR xtmp D.select DISTINCT SUBSTR(xh,1,4)FROM xs INTO xtmp 答案: A 77。某表单FrmA上有一个命令按钮组 CommandGroup1,命令按钮组中有四个命令按钮:CmdTop,CmdPrior,CmdNext,CmdLast。要求按下CmdLast时,将按钮CmdNext的Enabled属性置为.F.,则在按钮CmdLast的Click事件中应加入_______ 命令。选择:A.This.Enabled=.F.B.This.Parent.CmdNext.Enabled=.F.C.This.CmdNext.Enabled=.F.D.Thisform.CmdNext.Enabled=.F.答案: B 78。关系型数据库采用 ________ 表示实体和实体间的联系。 A.对象 B.字段 C.二维表 D.表单 答案: C 79。在命令窗口中,不能实现的操作是 ________。 A.复制已执行过的命令 B.重复执行已执行过的命令 C: 同时执行多个命令 D.在命令窗口中显示命令执行结果 答案: D 80。要求一个表中的数值型字段数据精度具有 4 位小数,则该字段的宽度至少定义为_________。 A.4位 B.5位 C.6位 D.12位 答案: C 81。打开一个空表,执行 ?EOF(),BOF()命令,显示结果为_________。 A..T.和.T. B..F.和.F. C..F.和.T. D..T.和.F. 答案: A 82。表(XS.DBF)中含有100条记录,执行下列命令后显示的记录序号是________。 USE XS GO 10 LIST NEXT 4 A.10,11,12,13 B.11,12,13,14 C.4,5,6,7 D.1,2,3,4 答案: A 83。下列关于数据库的描述中,不正确的是 __________。选择:A.数据库是一个包容器,它提供了存储数据的一种体系结构 B.数据库表和自由表的扩展名都是.DBF C.数据库表的表设计器和自由表的表设计器是不相同的 D.数据库表的记录保存在数据库中 答案: D 84。创建数据库后,系统自动生成扩展名为 ________ 的三个文件。 A..SCX、.SCT、.SPX B..DBC、.DCT、.DCX C..PJX、.PJT、.RPJ D..DBF、.DBT、.FPT 答案: B 85。在向数据库中添加表的操作时,下列说法中不正确的是 ________。答案: B A.可以将自由表添加到数据库中 B.可以将数据库表添加到另一个数据库中 C.可以在项目管理器中将自由表拖放到数据库中 D.先将数据库表移出数据库成为自由表,而后添加到另一个数据库中 86。下列关于索引的描述中,不正确的是 ________。选择:A.结构和非结构复合索引文件的扩展名均为.CDX B.结构复合索引文件随表的打开而自动打开 C.一个数据库表仅能创建一个主索引和一个唯一索引 D.结构复合索引文件中的索引在表中的字段修改时,自动更新 答案: C 87。参照完整性的作用是___________ 控制。 A.字段数据的输入 B.记录中相关字段之间的数据有效性 C.表中数据的完整性 D.相关表之间的数据一致性 答案: B 88。___________ 不可以作为查询和视图的输出类型。 A.自由表 B.表单 C.临时表 D.数组 答案: B 89。下列说法中正确的是___________。A.视图文件的扩展名 .vcx B.查询文件中保存的是查询的结果 C.查询设计器实质上是SELECT-SQL 命令的可视化设计方法 D.查询是基于表的并且是可更新的数据集合 答案: C 90。实体模型反映实体及实体之间的关系,是人们的头脑对现实世界中客观事物及其相互联系的认识,而 __________ 是实体模型的数据化,是观念世界的实体模型在数据世界中的反映,是对现实世界的抽象。 A.数据模型 B.关系模型 C.逻辑模型 D.概念模型 答案: A 91。学生表(XS.DBF)的表结构为:学号(XH,C,8),姓名(XM,C,8),性别(XB,C,2)班级(BJ,C,6),用Insert 命令向XS表添加一条新记录,记录内容为: XH XM XB BJ 99220101 王 凌 男 992201 下列命令中正确的是 ________。选择:A.INSERT INTO XS VALUES(“99220101”,“王 凌”,“男”,“992201”)B.INSERT TO XS VALUES(“99220101”,“王 凌”,“男”,“992201”)C.INSERT INTO XS(XH,XM,XB,BJ)VALUES(99220101, 王 凌,男,992 D.INSERT TO XS(XH,XM,XB,BJ)VALUES(“99220101”,“ 王 凌”,“男”,“992 答案: A 92。建立两个表之间的临时关系时,必须设置 _________。答案: D A.主表的主索引 B.主表的主控索引 C.子表的主索引 D.子表的主控索引 93。在Visual FoxPro中创建含备注字段的表和表的结构复合索引文件后,系统自动生成的三个文件的扩展名为 ___________。 A..PJX、.PJT、.PRG B..DBF、.CDX、.FPT C..FPT、.FRX、.FXP D..DBC、.DCT、.DCX 答案: B 94。在Visual FoxPro系统中,________创建时,将不以独立的文件形式存储。 A.查询 B.视图 C.类库 D.表单 答案: B 95。运行查询 CX1.QPR命令是 ________。 A.USE CX1 B.USE CX1.QPR C.DO CX1.QPR D.DO CX1 答案: C 96。用DIMENSION ARR(3,3)命令声明了一个二维数组后,再执行ARR=3命令,则__________。A.命令ARR=3 创建了一个新的内存变量,它与数组无关 B.数组的第1个元素被赋值为3C.所有的数值元素均被赋值为3 D.当存在数组ARR时,不可用ARR=3命令创建与数组同名的内存变量 答案: C 97。在命令窗口中执行了命令X=5后,则默认该变量的作用域是_________。 选择:A.全局 B.局部C.私有 D.不定 答案: A 98。已知“xs”表中有一字段为“xm”,当执行了USE xs ALIAS stu 命令打开该表后,要访问该表当前记录的“xm”字段的值,不正确的访问是 ____________。选择:A.xm B.xs.xmC.stu.xm D.stu->xm 答案: C 99。用户在VFP中创建子类或表单时,不能新建的是 ___________。选择:A.属性 B.方法C.事件 D.事件的方法代码 答案: C 100。下列对于事件的描述不正确的是________________。选择:A.事件是由对象识别的一个动作 B.事件可以由用户的操作产生,也可以由系统产生C.如果事件没有与之相关联的处理程序代码,则对象的事件不会发生 D.有些事件只能被个别对象所识别,而有些事件可以被大多数对象所识别 答案: C 101。所有类都可识别的事件即最小事件集包括____________。选择:A.Init、Destroy和Error事件 B.Load、Init和Destroy事件C.Load、Init和Unload事件 D.Init、Activate和Destroy事件 答案: A 102。对于任何子类或对象,一定具有的属性是_________。选择:A.Caption B.BaseClassC.FontSize D.ForeColor 答案: B 103。设某子类Q具有P属性,则_________。选择:A.Q的父类也必定具有P属性,且Q的P属性值必定与其父类的P属性值相* B.Q的父类也必定具有P属性,但Q的P属性值可以与其父类的P属性值不*C.Q的父类要么不具有P属性,否则由于继承性,Q与其父类的P属性值必 D.Q的父类未必具有P属性,即使有,Q与其父类的P属性值也未必相同 答案: D 104。从CommandButton基类创建子类cmdA和cmdB,再由cmdA类创建cmdAA子类,则cmdA、cmdB和cmdAA必具有相同的_________。选择:A.Caption属性 B.Name属性C.BaseClass属性 D.ParentClass属性 答案: C 105。有关类、对象、事件、,下列说法不正确的是 ____________。选择:A.对象用本身包含的代码来实现操作 B.对象是类的特例C.类刻划了一组具有相同结构、操作并遵守相同规则的对象 D.事件是一种预先定义好的特定动作,由用户或系统激活 答案: A 106。下列属于方法名的是 _________。选择:A.GotFocus B.SetFocusC.LostFocus D.Activate 答案: B 107。容器型的对象 _________。选择:A.只能是表单或表单集 B.必须由基类Container派生得到C.能包容其他对象,并且可以分别处理这些对象 D.能包容其他对象,但不可以分别处理这些对象 答案: C 108.在表的浏览窗口中,要在一个允许Null值的字段中输入.NULL.值的方法是_______.选择:A.直接输入“.Null.”的各个字母 B.按[Ctrl]+[0]组合键C.按[Ctrl]+[N]组合键 D.按[Ctrl]+[L]组合键 答案: B 109.当执行命令 USE teacher ALIAS js IN B 后,被打开的表的别名是_________。选择:A.teacher B.jsC.B D.js_B 答案: B 110.下面__________命令组与 LIST FOR xb=”女“ 具有相同的显示结果。选择:A.LIST(回车)SET FILTER TO(回车)B.SET FILTER TO xb=”女“(回车)LISE(回车)C.SET FILTER TO(回车)LIST(回车)D.LIST(回车)SET FILTER TO xb=”女“(回车)答案: B 111.索引文件中的标识名最多由_______个字母、数字或下划线组成。选择:A.5 B.6C.8 D.10 答案: D 112.已知js表中有两条记录,下列操作中,返回值一定是.T.的是______。选择:A.USE js(回车)? BOF()(回车)B.USE js(回车)GO 2(回车)SKIP-1(回车)? BOF()(回车)C.USE js(回车)GO BOTTOM(回车)SKIP(回车)? EOF()(回车)D.USE js(回车)SKIP-1(回车)? EOF()(回车)答案: C 2.6.某打开的表中有20条记录,当前记录号为8,执行命令 LIST NEXT 3(回车)后,所显示的记录的序号为_____________。选择:A.8-11 B.9-10C.8-10 D.9-11 答案: C 2.7.打开一张表后,执行下列命令: GO 6 SKIP-5 GO 5 则关于记录指针的位置说法正确的是____________。选择:A.记录指针停在当前记录不动 B.记录指针的位置取决于记录的个数C.记录指针指向第5条记录 D.记录指针指向第一条记录 答案: B 2.8.下列命令中___________可以在共享方式下运行。选择:A.APPEND B.PACK C.MODIFY STRUCTURE D.ZAP 答案: A 2.9.一张表的全部Memo字段的内容存储在___________。选择:A.不同的备注文件中 B.同一个文本文件中C.同一个备注文件中 D.同一个数据库文件中 答案: C 2.10.有关表的索引,下列说法中不正确的是___________。选择:A.当一张表被打开时,其对应的结构复合索引文件被自动打开 B.任何表的结构复合索引能控制表中字段重复值的输入C.一张表可建立多个候选索引 D.主索引只适用于数据库表 答案: B 2.11.建立索引时,__________字段不能作为索引字段。选择:A.字符型 B.数值型C.备注型 D.日期型 答案: C 2.12.设计数据库时,可使用纽带表来处理表与表之间的______________。选择:A.多对多关系 B.临时性关系C.永久性关系 D.继承关系 答案: A 2.13.创建数据库后,系统自动生成的三个文件的扩展名是_______。选择:A..pjx.pjt.rpg B..sct.scx.spxC..fpt.frx.fxp D..dbc.dct.dcx 答案: D 2.14.如果要在数据库的两张表之间建立永久关系,则至少要求在父表的结构复合索引文件中创建一个____________,在子表的结构复合索引文件中创建任何类型的文件。选择:A.主索引 B.候选索引C.主索引或候选索引 D.唯一索引 答案: C 2.15.数据库表之间创建的永久关系保存在_________中。选择:A.数据库表 B.数据库C.表设计器 D.数据环境设计器 答案: B 2.16.下列关于表的索引的描述中,错误的是_________。选择:A.复合索引文件的扩展名为.cdx B.结构复合索引文件随表的打开而自动打开C.当对表编辑修改时,其结构复合索引文件中的所有索引自动维护 D.每张表只能创建一个主索引和一个候选索引 答案: D 2.17.在?照完整性中,设置更新操作规则时,选择了“限制”,下列说法中_________是正确的。选择:A.当更改了主表的“主”或“候选”关键字后,自动更改子表相应记录 B.允许更改子表中对应的普通索引关键字的字段值C.在子表中有相关记录时,主表的主或候选关键字段值 禁止更改 D.当更改了子表中的字段值,则自动更改主表中对应记录的字段值 答案: C 2.18.如果一张数据库表的 DELETE 触发器设置为.F.,则不允许对该表作__________记录的操作。选择:A.修改 B.删除C.增加 D.显示 答案: B 2.19.在数据库jxsj.dbc中,要获得表js.dbf字段gh的标题,先打开该数据库,并为当前数据库,再用函数DBGETPROP(_________,”FIELD“,”CAPTION“).选择:A.js.gh B.”js.gh“C.gh D.”gh“ 答案: B 2.20.数据库表的 INSERT 触发器,在表中_____________记录时触发该规则。选择:A.增加 B.修改C.删除 D.浏览 答案: A 2.21.在参照完整性的设置中,如果当主表中删除记录后,要求删除子表中的相关记录,则应将“删除”规则设置为__________。选择:A.限制 B.级联C.忽略 D.任意 答案: B 2.22.要在两张相关的表之间建立永久关系,这两张表应该是____________。选择:A.同一个数据库内的两张表 B.两张自由表C.一张自由表,一张数据库表 D.任意两张数据库表或自由表 答案: A 2.23.库表字段的默认值保存在__________文件中。选择:A.表 B.数据库C.项目 D.表的索引 答案: B 2.24.以下的__________操作将造成相关表之间数据的不一致。选择:A.在主表中插入记录的主关键字的值是子表中所没有的 B.在主表中删除了记录,而在子表中没有删除相关记录C.在子表中删除了记录,而在主表中没有删除相关记录 D.用主表的主关键字字段的值修改了子表中的一个记录 答案: B 2.25.以下___________操作不会损坏相关表之间的数据一致性。选择:A.删除了子表中的记录而没有删除主表中相关记录 B.删除了主表中的记录而没有删除子表中相关记录C.在子表中插入记录的为外部关键字值是主表关键字中所没有的 D.主表中修改了主关键字值而子表中没修改有关的外部关键字值 答案: A 2.26.建立两张表之间的临时关系时,必须设置的是___________。选择:A.主表的主索引 B.主表的主索引和子表的主控索引C.子表的主控索引 D.主表的主控索引和子表的主控索引 答案: C 2.27.以下_____________操作不会激活记录的有效性规则检验。选择:A.修改表结构并保存时 B.修改表的某一记录时C.修改了记录值并执行SKIP命令时 D.修改了数据并关闭表时 答案: B 2.28.当成功执行以下一组命令后,下列不正确的说法是__________。 OPEN DATABASE jxsj OPEN DATABASE rsda 选择:A.由于打开了第二个数据库rsda,而关闭了jxsj数据库 B.当前数据库是rsdaC.表达式DBUSED(”jxsj“)AND DBUSED(”rsda“)的值为.T.D.当再执行CLOSE DATABASES命令后,jxsj库没有被关闭 答案: A 2.29.永久关系的主要作用是_________。选择:A.作为查询的联接条件 B.作为表单数据环境中默认的临时关系C.存储参照完整性信息 D.控制相关表之间记录的访问 答案: C 2.30.表之间的“一对多”关系是指___________。选择:A.一张表与多张表之间的关系 B.一张表中的一个记录对应另一张表中的多个记录C.一张表中的一个记录对应多张表中的一个记录 D.一张表中的一个记录对应多张表中的多个记录 答案: B 2.31.设学生成绩表cj包含学号xh字段和课程代号kcdh字段,如果设置记录有效性规则为NOT(EMPTY(xh)OR EMPTY(kcdh)),则执行下列________命令并关闭表时,不会违反该记录的有效性规则。选择:A.USE cj{回车} APPEND BLANK B.USE cj{回车} APPEND BLANK{回车} REPLACE xh WITH ”9901000C.INSERT INTO cj(xh,kcdh)VALUES(“99010001”,“02”)D.INSERT INTO cj(xh,cj)VALUES(“99010001”,85)答案: C 2.32.如已在学生表和成绩表之间按学号建立永久关系,现要设置参照完整性:当在成绩表中添加记录时,凡是学生表中不存在的学号不允许添加,则该参照完整性应设置为_________。选择:A.更新级联 B.更新限制C.插入级联 D.插入限制 答案: D 2.33.参照完整性的作用是_______________控制。选择:A.字段数据的输入 B.记录中相关字段之间的数据有效性C.表中数据的完整性 D.相关表之间的数据一致性 答案: D 3.1.视图是一种存储在数据库中的特殊的表,当它被打开时,对于本地视图而言,系统将同时在其他工作区中把视图所基于的基表打开,这是因为视图包含一条__________语句。选择:A.SELECT-SQL B.USEC.LOCATE D.SET FILTER TO.....答案: A 3.2.有关查询和视图,下列说法中不正确的是__________。选择:A.查询是只读型数据,而视图可以更新数据源 B.查询可以更新数据源,视图也有此功能C.视图具有许多数据库表的属性,利用视图可以创建查询和视图 D.视图可以更新源表中的数据,存储于数据库中 答案: B VFP填空题 1.数据的不一致性是指_________。 答案: 相同的数据在不同的应用程序中出现不同的值 2. VFP系统中,终止事件循环的命令是______。 答案: CLEAR EVENTS 3. 目前较为流行的一种信息模型设计方法称为E-R方法,E-R方法的中文含义为 ______。 答案: 实体联系方法 4. 如果要把一个文本框对象的初值设置为当前日期,则在该文本框的Init事件中设置代码 为______。 答案: THIS.VALUE=DATE() 5. 与Thisform.Release功能等价的命令为_______。 答案: Release Thisform 6.______型数据只能用于表而不能用于内存变量。 答案: 备注和通用 7.已知教师表(JS.DBF)中含有一条姓名(XM)为“王一平”的记录,执行下列程序段后,输出结果为______。 SELE JS LOCAT FOR XM=“王一平” XM=3 ?XM 答案: 王一平 8.与XB=“男”.OR.XB=“女”等价的表达式为______。 答案: XB$“男女” 9.表达式STR(YEAR(DATE()+10))的数据类型为_______。 答案: C 10.已知教师表(JS.DBF)已经按姓名(XM)建立索引,答案: SEEK(“王一平”) 阅读下列程序: SELE JS SET ORDER TO xm SEEK '王一平' IF FOUND()DISPLAY ELSE WAIT WIND '查无此人' ENDIF 如果要用SEEK函数完成上述相同的功能,应将程序改成: SELE JS SET ORDER TO xm IF ________ DISPLAY ELSE WAIT WIND '查无此人' ENDIF 11.打开项目的命令是_______。 答案: MODIFY PROJECT 12.Grid、Text、CommandGroup、Column是VFP系统中的对象,它们当中不能直接加到表单中的对象是________。 答案: Column 13.类包含了对象的程序设计和数据抽象,是具有相同行为的_______的抽象。 答案: 对象 14.当打开的表为一个空表时,函数RECNO()的值为________。 答案: 1 15.已知N='1',M='2',X12='GOOD',则表达式X&N&M的值为_______。 答案: 'GOOD' 16.下列程序段用来求0~100之间的偶数之和,请将它写完整: N=0 S=0 DO WHILE N<=100 N=N+1 IF N%2=1 _______ ELSE S=S+N ENDIF ENDDO 答案: LOOP 17.视图可以在数据库设计器中打开,也可以用USE命令打开,但在使用USE命令之前,必须打开包含该视图的________。 答案: 数据库 18.假定有三个数据库文 件: 答案: SET DATABASE TO MYDATA2 MYDATA1,MYDATA2,MYDATA3,它们分别存放在C盘的DATA目 录,D盘的DATA目录,A盘的DATA目录,完善下列程序,使 得程序执行以后,DBC()函数的值为 D:DATAMYDATA2.DBC。 OPEN DATABASE C:DATAMYDATA1 OPEN DATABASE D:DATAMYDATA2 OPEN DATABASE A:DATAMYDATA3 ________ ?DBC() 19.商品数据库中含有两个表:商品基本信息表 答案: SPXX.XSJ*XSQK.XSSL AND 2 不存在 DTOC(XSRQ)+SPBH (SPXX.DBF)和销售情况表(XSQK.DBF),表结构分别如下: 商品基本信息表 | 销售情况表 商品编号 SPBH C,6 |流水号 LSH C,6 商品名称 SPMC C,20 |销售日期 XSRQ D 进货价 JHJ N,12,2 |商品编号 SPBH C,6 销售价 XSJ N,12,2 |销售数量 XSSL N,8,2 备注 BZ M 用SELECT-SQL命令实现查询1999年9月1日所销售的 各种商品的名称、销售量和销售总额,并按销售量从小到 大排序的语句是: select SPXX.SPMC, SUM(XSQK.XSSL)AS 销售量, SUM(_______)AS 销售总额;FROM XSQK,SPXX;WHERE XSQK.SPBH=SPXX.SPBH _______ XSQK.XSRQ ={1999/9/1};INTO CURSOR cXstmp;GROUP BY 1(或SPMC);ORDER BY _______ 临时表cXstmp不能使用APPEND或DELETE命令对该表 添加或删除记录,当执行USE IN cXstmp命令后,该临时 表将_______。 如果要对xsqk.dbf按销售日期升序排序,在销售日 期相同的情况下,按商品编号升序排序,则索引表达式为 _______。 20.根据上题提供的spxx.dbf和xsqk.dbf创建表单,该表 答案: XSQK、SPXX 及它们之间的关系 SPXX.SPBH,XSQK.SPBH,SPXX.XSJ XSQK.XSSL*SPXX.XSJ 单用来录入每笔销售业务。 表单的数据环境包括________。 表单中商品编号为组合框,它的RowSource为 ________,ControlSource为______,销售价文本框的 ControlSource为______。 输入销售数量以后打回车键,此时自动显示销售金额,则 销售数量文本框的Valid事件代码为:(销售金额文本框的 Name属性值为Txtxse) Thisform.Txtxse.Value=_______ 21.阅读下列程序,写结果: SET TALK OFF S='ABCDEF' N=LEN(S)K=1 DO WHILE K<=N ?SUBS(S,K,N-K)K=K+1 ENDDO 上述程序运行以后,显示内容的前二行为________,_______。 答案: ABCDE,BCDE 22.数据的独立性是指数据和______之间相互独立。答案: 应用程序 23.VFP中表单文件以_______扩展名存贮,通过______属性来引用表单对象。而Caption属性是设置表单标题栏中的信息。 答案: SCX,NAME 24.VFP系统中,可以使用_______命令运行程序文件。 开发应用程序,建立事件循环的命令是______。 答案: DO READ EVENT 25.将控制绑定到一个字段,移动记录后字段的值发生变化,这时对象的_______ 属性的值也随之变化。 答案: VALUE 26.如果要让一个文本框的初值设置为当前日期且不能更改,则在该文本框的______ 事件中设置代码为This.Value=DATE(),同时要将它的______属性设置为.F.。 答案: INIT,ENABLED 27.如果在主表中删除一条记录,要求子表中的相关记录自动删除,则参照完整性的删除规则应设置成_______。答案: 级联 28.对于列表框,当其_______发生变化时,将触发InteractiveChange事件。 答案: VALUE 29.恢复Visual FoxPro 5.0系统菜单的命令是_______。 答案: SET SYSMENU TO DEFAULT 30.如果要让表单第一次显示时自动位于主窗口中央,则应该将表单的_______属性设置值为.T.。 答案: AutoCenter 31.选项按钮组是_______对象,它的Value属性表明用户选定了哪个按钮。假定现有一个选项按扭组有六个选项按钮,该选项按钮组的ControlSource 属性值是一个整型字段,如果用户选择了第四个按钮,则选项按钮组的Value属性值为_______。 答案: 容器,4 32.利用查询设计器设计查询,可以实现多项功能,查询设计器最终实质上是生成一条_______ 语句。 答案: select-SQL 33.组合框的数据源由RowSource属性和RowSourceType属性给定,如果RowSource属性 中写入一条SELECT-SQL语句,则它的RowSourceType属性应设置为_______。 答案: 3-查询 34.某表单中有一“下一记录”的记录定位命令按钮CmdNext,请完成该按钮的Click事件代码:(假定该表单所用到的表为XS.DBF) SELECT XS ______ IF EOF()GO BOTTOM This.______ &&让该按钮不响应用户操作 ELSE Thisform.Refresh ENDIF 答案: SKIP ENABLED=.F.35.设JS.DBF及JSRK.DBF的结构如下: 答案: JS.GH=JSRK.GH 1 VALUE 教师表 教师任课表 字段名 类型 宽度 含义 字段名类型 宽度 含 义 GH C 5 工号 GH C 5 工 号 NAME C 8 姓名 KCH C 2 课 程号 XB C 2 性别 KCMC C 30 课程名称 XIMT C 20 系 名 KSS N 5 课 时数 并且分别对GH建立结构复合索引,它们现有数据如下: 教师(JS.DBF) 工号 姓名 性别 系名 04001 陈子亮 男 管理工程系 04002 赵东萍 女 管理工程系 04003 王一平男 计算机系 04004 陈志敏 男 中文系 教师任课表(JSRK.DBF) 工号 课程代号 课程名称 课时数 04001 1 会计电算化 64 04001 2 会计电算化课程设计 42 04002 3 软件工程 48 04002 4 C++ 64 04003 2 会计电算化 64 04004 5 中国文学 48 下列命令用来查询每个教师的任课课时总数,请将其写完 整: select js.gh,js.xm,SUM(jsrk.kss)AS 总课时 ; FROM JS,JSRK ; WHERE _______; INTO CURSOR cJsrkzstmp ; GROUP BY _______; ORDER BY GH 临时表cJsrkzstmp的记录数为_______。 完善下列命令,实现向 JSRK表中插入一条新记录,记录 内容是: '04003'(工号),'6'(课程代号),'计算机 概论'(课程名称),32(课时数) INSERT INTO jsrk(gh,kch,kcmc,kss)______('04003','6','计算机概论',32)36.如果对上题JSRK.DBF先按工号从小到大排序,在工号相等的情况下,再按课程号从小到大排序,则索引表达式为_______。 答案: GH+KCH 37.已知教师表(JS.DBF)的结构和内容如35题所示,阅 答案: 3,1 读下列程序段: N=0 M=0 SELE JS SCAN WHILE XB='男' N=N+1 ENDSCAN M=RECCOUNT()-N **RECCOUNT()为统计记录数函数 执行上述程序后,N,M的值分别为_______,_______。 38.已知教师工资表(JSGZ.DBF)的结构如下: 答案: VALUE 男,女 JSGZ.XB 工号(GH)C,5 姓名(XM)C,8 性别(XB)C,2 基本工资(JBGZ)N,6 职务工资(ZWGZ)N,6 奖金(JJ)N,4 将上述JSGZ.DBF加入到表单的数据环境中,创建表单: 要求当按下求实发工资按钮时,显示该职工的实发工资。 显示实发工资的文本框的NAME属性的值为Txtsfgz。 该按钮的Click事件的代码如下,请将它写完整: Local lnsfgz lnsfgz=jsgz.jbgz+jsgz.zwgz+jsgz.jj This.Parent.Txtsfgz.______=lnsfgz Thisform.refresh 表单中的性别设置成组合框,如果它的RowSourceType设 置成1-值,则它的RowSource为 _______,该文本框的 ControlSource为_______。 39.下列程序是用来求长方形的面积,请将它写完整: X=3 Y=5 S=AREA(X,Y)?S FUNCTION AREA _______ S1=X*Y RETURN ________ 答案: PARAMETERS X,Y S1 40. 表达式{09/18/2000}-{09/20/2000}的值是 _________。 表达式INT(6.26*2)%ROUND(3.14,0)的值是___________。 答案:-2 0 41.对于数据绑定型控件,通过对 ___________ 属性的设置来绑定控制和数据源。 答案: ControlSoure 42.执行下列程序段后,X(1,1)和x(2,2)的值分别为___________。 程序清单如下: DIMENSION X(6,10)X=123 答案: 123,123 43.恢复主菜单系统为默认的 Visual FoxPro 系统菜单状态的命令是___________。 答案: SET SYSMENU TO DEFALUT 44.不能用 ___________ 和通用型字段构造索引表达式创建索引。 答案: 备注型 45.如果要将某选项按钮组上的按钮设置为5个,应把选项按钮组的 ___________ 属性值设定为5。 答案: ButtonCount 46.采用面向对象的程序设计方法设计的应用程序,其功能的实现是由 ___________ 驱动的。 答案: 事件 47.VFP系统中,打开项目文件的命令是______。 答案: MODIFY PROJECT 48.对象是______的实例。 答案: 类 49.打开一个空表,函数EOF()的值为______。 答案:.T.50.数据库表可以设置长表名,但存贮在磁盘上的文件名是______。 答案: 表名 51.如果数据库表的插入触发器设置为.F.,则当向该表中插入一条空记录时,屏幕显示 ______。 答案: 触发器失败 52.组合框兼有下拉列表框和______的功能。 答案: 文本框 53.在SELECT-SQL语句中,DISTINCT选项的功能是______。 答案: 排除查询结果中所有重复的行 54.在表单中,一个OLE绑定型控件利用表中的______型字段显示一个OLE对象。 答案: 通用 55.已知N='1',M='2',X12='good',则表达式X&N&M的值为_______。 答案: 'GOOD' 56.下列程序用来求0~100偶数之和,请将它写完整: N=0 S=0 DO WHILE.T.IF N>100 _______ ELSE S=S+N ENDIF N=N+2 ENDDO 答案: EXIT 57.本地视图的______ 表随视图的打开而自动地打开,但是不随视图的关闭而关闭。答案: 基 58.在VFP系统中,多个对象的同一个属性(如width属性)可以同时设定,设定前必须同时_______这些对象。 答案: 选定 59.下述命令执行后,S4的值为______________.S1=' ABCD ' S2=' EFG ' S3=ALLT(S1)+ALLT(S2) S4=SUBSTR(S3,5,2)答案: 'EF' 60.答案: D: DATA MYDATA2.DBC 假定有三个数据库文件MYDATA1,MYDATA2,MYDATA3,它们 分别存放在C盘的DATA目录,D盘的DATA目录,A盘的 DATA目录,执行下列程序以后,DBC()函数的值为 _______。 OPEN DATABASE C:DATAMYDATA1 OPEN DATABASE D:DATAMYDATA2 OPEN DATABASE A:DATAMYDATA3 SET DATABASE TO MYDATA2 ?DBC()61.商品数据库中有两个表:商品基本信息表 答案: VAL IN DTOC(XSRQ)+SPBH(spxx.dbf)和销售情况表(xsqk.dbf),表结构分别如下 ,且spxx表已经建立结构复合索引,索引表达式为spbh。 商品基本信息表(spxx.dbf)销售情况表(xsqk.dbf) 商品编号 spbh C,6 流水号 lsh C, 6 商品名称 spmc C,20 销售日期 xs rq D 进货价 jhj N,12,2 商品编号 spbh C,6 销售价 xsj N,12,2 销售数量 xssl N,8,2 备注 bz M 销售金额 xs e N,12,2 1) 要求在向销售情况表中添加记录时,对流水号自动加1,对位数不足字段宽度的流水号,在字符串前以字符“0”补 足,如“125”补“0”后应为“000125”。下列程序段就是用来 完成上述功能,请将它写完整: SELECT MAX(lsh)FROM xsqk INTO CURSOR cMaxlshtmp LOCAL lcMaxlsh,lcNextlsh lcMaxlsh= cMaxlshtmp.lsh && 求出 xsqk表中最大的流水号 lcNextlsh=_______(lcMaxlsh)+1 &&下一个流 水号在最大流水号上加1 INSERT INTO xsqk(lsh)VALUE(PADL(lcNextlsh,5,'0'))USE ______ cMaxlshtmp &&将临 时表关闭 2)如果对xsqk.dbf表按销售日期升序排序,在销售日期 相同的情况下,按商品编号升序排序,则索引表达 式为 ______。 62.根据上题提供的spxx.dbf和xsqk.dbf创建下列表单,答案: SPXX.SPBH , XSQK.XSSL SPBH SPXX.XSJ*XSQK.XSSL TA 该表单用来录入每笔销售业务。 表单中商品编号为组合框,它的RowSource为______。 销售数量文本框的ControlSource为_______。 当商品编号发生变化时,销售价和销售金额也相应地发生 变化,则表单中组合框的InteractiveChange事件的代码 为:(销售价和销售金额文本框的Name属性值分别 为 Txtxsj,Txtxse)Local lcspbh lcspbh=This.Value SEEK lcspbh ORDER _______ IN spxx Thisform.Txtxse.Value=_____________ Thisform.Txtxsj.Refresh 上述表单的数据环境包括xsqk.dbf,spxx.dbf及它们之间 的关系,并且xsqk表的数据缓冲方式为开放式行缓冲,要 求当按下存盘按钮时,将录入的数据真正写入xsqk表中,则存盘按钮的Click事件代码中一定包含一条_______函数。 63.运行下列程序段以后,显示内容的前二行为:_______、________。 【程序段清单】 SET TALK OFF S='ABCDEF' N=LEN(S)K=1 DO WHILE K<=N ?SUBS(S,K,N-K)K=K+1 ENDDO 答案: 'ABCDE','BCDE' ' 64.VFP系统中,终止事件循环的命令是:________。答案: CLEAR EVFNT 65.OOP中文含义为:______。 答案: 面向对象程序设计 66.数据处理是对各种类型的数据进行_________、____________、分类、计算、加工、检索和传输的过程。 答案: 收集、存储 67.数据库一般要求有最小的冗余度,是指数据尽可能____________。数据库的资源_______性,即数据库以最优的方式服务于一个或多个应用程序。据库的数据___________性,即数据的存储尽可能独立于使用它的应用程序。答案: 不重复 共享 独立 68.表达式STR(YEAR(DATE())+10)的数据类型为 ______。 答案: C 69.项目管理器的功能是组织和管理所有与项目有关的类型的________。答案: 文件 70.在数据库系统中,关系模型的基本结构是一张__________。 答案: 二维表 71.按所用的数据模型来分,VFP属于___________数据库管理系统。 答案: 关系型 72.英文缩写‘DBMS’的中文含义是 __________________。DBMS主要由_____________、存储管理器和事务管理器三部分组成。 答案: 数据库管理系统 查询管理器 73.复选框控件可以为三种状态,其Value 属性值分别为.F.、.T.或 __________。 答案: NULL 74.使用报表打印表中的数据,需在报表中将与表字段相关的控件放在报表中的 ___________ 带区。 答案: 细节 75.如果要物理删除带有删除标志的记录,可使用命令___________,但在该命令的执行前,必须将表以___________方式打开。 答案: PACK,独占 76.Visual FoxPro系统中,表的触发器是绑定在表上的 ___________,当表中的任何记录被指定的操作命令修改时,触发器被激活。 答案: 表达式 77.从二维表的后选关键字中,选出一个可作为____________。 答案: 主关键字 78.XS(学生)表的结构 为: 答案: TABLE xs ZZMM L 字段名 中文含义 类型 长度 XH 学号 字符 6 XM 姓名 字符 8 XB 性别 字符 2 CSRQ 出生日期 日期 8 ZZMM 政治面貌 逻辑 1 BZ 备注 备注 4 下列命令用来创建XS表的结构,请将它完善: CREATE ___________; (XH C(6),XM C(8),XB C(2),CSRQ D, __________ ,BZ M)79.答案: Cdd 已知学生成绩表(CJ.DBF)中含有学号(XH,C,6)、课程代号 (KCDH,C,2)和成绩(CJ,N,3)字段。为了给每个成绩评定成 绩等级(优、良、及格、不及格),在该表所在的数据库中 创建了一个根据成绩分数评定成绩等级的自定义函数 getdd,函数getdd的代码如下: FUNCTION getdd PARAMETERS nCj LOCAL cdd cdd=“" DO CASE CASE nCj>=90 cdd=”优“ CASE BETWEEN(nCj,80,89)cdd=”良“ CASE BETWEEN(nCj,60,79)cdd=”及格“ CASE nCj<60 cdd=”不及格“ ENDCASE RETURN ________ 注:Visual FoxPro系统函数BETWEEN()的功能是判 断一个表达式的值是否在两个相同数据类型的表达式的值 之间。 80.一张表的主关键字被包含到另一张表中时,在另一张表中称这些字段为___________。 答案: 外部关键字 81.表中的一列称为__________,它规定了数据的特征;表中的一行称为一个__________,它是多个字段的集 合。 每个字段都必须有一个____________属性来标识该字段。 答案: 字段,记录 字段名 82.表文件的扩展名为___________,如果表结构中包含_______类型或_________类型的字段时,会产生一个扩展名为___________的备注文件。 答案: DBF 备注,通用 FPT 83.已知成绩表(cj.dbf)的表结构如下: 答案: 1 003 字段名 类型 宽度 含义 xh C 3 学号 qz N 3,0 其中 成绩 qm N 3,0 期末 成绩 表中含有3条记录,按输入时的物理顺序排列如下: xh qz qm 001 89 93 002 98 75 003 80 87 该表已创建结构复合索引如下: 索引顺序 索引名 索引表达式 降序 CJA QZ+QM 升序 CJB STR(QZ)+STR(QM)执行如下命令: USE CJ ORDER TAG CJA BROWSE 在浏览窗口中学号为”002“的记录显示在第 _______ 行。 若在命令窗口中执行命令: SET ORDER TO TAG CJB BROWSE 则在浏览窗口中学号为 _______的记录显示在第1行。 84.在表单的Load、Activate和Init这三个事件中,________ 事件不能引用表单及表单中的对象,________事件最后一个被触发。 答案: ACTIVATE 85.有一表单frmA,该表单中包含一个页框pgfB,页框中包含的页面数未知,在刷新表单时,为了刷新页框中的所有页面,可在页框pgfB的REFRESH方法中编写一段FOR循环结构的代码实现,请完善如下代码: FOR i=1 to This._________ This.Pages[i].refresh ENDFOR 答案: PAGECOUNT 86.调用系统对话框的系统函数MessageBox()的语法如下 答案: 32 7 : MESSAGEBOX(cMessageText [, nDialogBoxType [, cTitleBarText]])参数: cMessageText为字符型参数,指定在对话框中显示的 文本。 nDialogBoxType为整型参数,指定对话框中的按钮和 图标、显示对话框时的默认按钮以及对话框的行为。在下 面的表中,对话框按钮值从 0 到 5 指定了对话框中显示 的按钮。图标值 16、32、64 指定了对话框中的图 标。 cTitleBarText为字符型参数,指定对话框标题栏中的 文本。 数值 对话框按钮 数值 图标 0 仅有”确定“ 16 ” 停止 “图标 ”确定“和”取消“ 32 ”* 屎*“图标 ”放弃“、”重试“和”忽略“ 48 ”惊叹号“图 标 ”是“、”否“和”取消“ 64 ”* 畔*(i)“图标 4 ”是“和”否“ 5 ”重试“和”取消“ Messagebox()函数的返回值取决于用户所选择的按钮,返 回值情况如下表所示: 按 钮 确定 取消 放弃 重试 忽 略 是 否 返回 值 1 2 3 4 7 某应用程序在执行过程中出现了如右图所示的对话框: 根据对话框所显示的有关信息,完善下面程序段: Local nSelect nSelect=MessageBox(”删除吗?“,4+ ________ ,”删除 确认“)IF nSelect=6 select js DELETE ENDIF 如果在出现该对话框时选择”否“,则变量nSelect的值是 ___________。 87.已知教师表JS.DBF(含有字段:工号(GH,C,6), 姓名 答案: AVG(jbgz)as平均工资 WHERE ximing='信息管理系' GROUP BY ximing(XM,C,8), 基本工资(JBGZ,N,7,2), 系名(XIMING,C,16))。完成下列SQL命令,统计JS表中”信息管 理系“ 职工的平均工资。SQL命令如下: SELECT _________;FROM JS;________;INTO CURS JSTMP;_________ 88. 答案: ALLT(STR(n))ENDSCAN 已知学生成绩表(CJ.DBF)的结构由学号(XH,C,6)、课程 代号(KCDH,C,2)和成绩(CJ,N,3)三个字段组成,下面程序 段用来检查表中的CJ是否小于0,如果小于0,给出提示信 息。例如:如果第3条记录的成绩小于0,则显示提示信息 为:”第3条记录的成绩录入不合法“。完善下列程序段,使它完成上述功能: USE CJ SCAN IF CJ<0 n=RECNO()S =”第“+ ________ +”条记录的成绩录入 不合法“ WAIT S ENDIF _________ ***** 一。表、数据字典 ***** 答案: 89。‘银行存款’表(CK.DBF)的表结构字段组成为: 答案: CREATE TABLE ck(zh C(15)NULL,crrq D,cq N(2,0),je Y) ALTER TABLE ck ADD COLUMN BZ M &&修改表结 构 APPEND BLANK 帐号(ZH,C,15,NULL) 存入日期(CRRQ,T,8) 存期(CQ,N,2,0) 金额(JE,Y,8) 要求写出创建CK表的SQL语句_________。 为该表增加一个备注型字段BZ的命令是_____________。 增加一条空记录的命令是____________。90。在js表中要删除所有工龄(字段名gl)大于60的记录的SQL命令是DELETE ________ js WHERE _______; 要彻底删除这些记录,可用_______命令,但这一命令的实施,必须要求表以________方式打开。 答案: FROM,gl>60 PACK 独占 91。在教师表(js)中按如下要求更改基本工资(jbgz)答案: SET jbgz+20 jbgz>=20 : 工龄在10年以下(不含10年)基本工资加 工龄在10--19年 基本工资加 工龄在20年以上(含20年)基本工资加 可用UPDATE命令完成上述更改: update js _______ jbgz=IIF(js.gl<10,_________,; IIF(________,jbgz+50,jbgz+35))92。如果学生表(xs.dbf)已在当前工作区中打开,要筛选出专业代号zydh为“102001”的记录的命令是____________;要取消该筛选的命令是____________。答案: SET FILTER TO zydh=”102001“ SET FILTER TO 93。执行下列一组命令: 答案: 1 stu.T..T.stu CLOSE TABLES ALL select 0 USE xs ALIAS stu 则函数SELECT()的值是___________; ALIAS()的值是____________。 再执行命令: USE js IN 0 则函数USED(”xs“)的值是__________;USED(”js“)的值是__________;ALIAS()的值是__________。94。执行下列一组命令: SET EXCLUSIVE OFF USE js USE xs EXCLUSIVE IN 0 则js表的打开方式是___________;xs表的打开方式是___________。 答案: 共享 独占 95。已知xs表的结构复合索引中已创建xh字段的普通索引,索引标识为xh,在没有设置主控索引的情况下,要用SEEK命令定位到学号“98010”的记录上,则该命令为_______________。答案: SEEK ”98010“ ORDER TAG xh 96。打开一张表时,___________索引文件将自动打开,表关闭时它将自动关闭。答案: 结构复合 97。通用型数据类型只能用于表中字段的定义,用于存储___________对象。答案: OLE 98。如要实现多字段排序,即先按班级(bj,N,1)顺序排序,同班的同学再按出生日期(csrq,D)顺序排序,同班且出生日期也相同的再按性别(xb,C,2)顺序排序,其索引表达式为___________。答案: STR(bj)+DTOC(csrq)+xb 99。记录的定位方式有________定位、____________定位和条件定位三种。答案: 绝对 相对 100。打开一张空表,在不移动记录指针的情况下,函数 答案:.T..T.1 .F..F.1 BOF()的值是_________;函数EOF()的值是 _________;函数RECNO()的值是_________。 如果打开的表中有一条记录,在不移动记录指针的情况下 ,函数BOF()的值是_________;函数EOF()的值是 _________;函数RECNO()的值是_________。101。如果子表中已有相关记录,修改主表记录的主关键字时,要求同时修改子表中相关记录,则参照完整性的___________规则应设置为__________。答案: 更新 级联 102。不允许子表增加或修改记录后出现“孤立记录”,则参照完整性的___________规则应设置为____________。答案:插入 限制 103。对数据库表增加新记录时,为某一字段自动给定一个初始值,这个值称为___________。答案: 默认值 104。数据库中的每一张表能建立_____个主索引。 如某字段定义为候选索引或主索引,要求该字段的值必须具有_________性。 索引可分为多种类型,其中________类型只适用于数据库表。答案: 1 唯一 主索引 105。参照完整性只有在________之间才能建立,以保持不同表之间数据的__________.如果要在课程表与学生成绩表之间设置参照完整性,则首先必须建立它们之间的_________ 关系。如果修改了课程表中课程代号后要求自动更新学生成绩表 中相关记录的课程代号,则应设置更新规则为________;如果课程表中没有的课程代号禁止插入到学生 成绩表中,则应设置插入规则为_________。答案: 数据库表、一致性、永久 级联、限制。 106。触发器指定一个规则,这个规则是一个____________。当某个命令或事件发生后,将自动触发相关触发器的执行,计算逻辑表达式的值,如果返回值是________,将不执行此命令或事件。答案: 逻辑表达式.F.107。纽带表的作用是把___________分解为两个_________。答案:多对多关系 一对多关系 108。某公司数据库中雇员表含有两个日期型字段:出生日期和雇佣日期,为了避免雇佣15岁(包括15岁)以下的童工,应为该表设置________有效性规则,规则表达式为____________。答案:记录级 year(雇佣日期)-year(出生日期)>15 或:(雇佣日期-出生日期)/365>15 109。在数据库jxsj中有视图vkccj,写出用DBGETPROP()函数测试生成该视图的SQL语句的函数表达式______。答案: DBGETPROP('vkccj','VIEW','SQL') 110。已知某公司数据库中包含供货商表和商品表,表结构分别如下: 供货商表的表结构 : | 商品表的表结构: 供应商ID,N(20)| 产品ID,N(20) 公司名称,C(40)| 产品名称,C(40) 联系人姓名,C(30)| 供应商ID,N(20) 联系人头衔,C(30)| 类别ID,N(20) 地址,C(60)| 单位数量,C(20) 城市,C(15)| 单价,N(20,2) 地区,C(15)| 库存量,N(20) 邮政编码,C(10)| 订购量,N(20) 国家,C(15)| 电话,C(24)| 如所有的商品都是来自于已知的供货商,则这两张表的关系是_________关系,其中主表是______表。已知商品表的主关键字是“产品ID”,供货商表的主关键字是“供应商ID”,则该字段在商品表中称为 __________。如果要在这两张表之间建立永久关系,则首先应该在主表中以_________字段为索引关键字建立主索引,在子表中以________字段为索引关键字建立普通索引。答案: 一对多,供货商,外部关键字,供应商ID,供应商ID 一、选择题 1.在VisualFoxPro系统中,下列命名中不能作为变量名的是_____________。 A.姓名 B.2005 姓名 C.A2005 D._2005学生 2.在VisualFoxPro系统中,下列表示中不属于常量的是_____________。 A.[NULL] B.nul C.”NULL“ D..NULL.3.函数ROUND(5.64,-1)的返回值是_____________。A.5 B.5.6 C.0 D.10 4.执行下列命令后,屏幕上显示的结果是_____________。nX=3.14159 nLen=8 nDec=3 ?STR(nX,nLen,nDec) A.3.114159 B.3 C.3.142 D.3.14 5.下列关于数据库、表和索引的叙述中,正确的是_____________。 A.打开一个数据库,将自动打开所有的数据库表 B.打开一个数据库表,将自动打开其所有对应的数据库 C.打开一个数据库表,将自动打开该表的所有索引 D.关闭一个数据库表,将自动关闭该表的所有索引 6.有如下一段程序: CLOSE TABLES ALL USE xs select 3 USE kc USE cj IN 0 上述程序执行后,当前系统中使用工作区及打开的表的情况分别是_____________。 A.0号工作区: cj表;3号工作区: kc表 B.1号工作区: xs表;2号工作区: cj表;3号工作区: kc表 C.0号工作区: xs表;1号工作区: cj表;3号工作区: kc表 D.1号工作区: xs表;3号工作区:kc表;4号工作区: cj表;7.在下列有关表单及其控件的叙述中,错误的是_____________。 A.从容器层次来看,表单集是最高层的容器类,它不可能成为其他对象的集成部分 B.表格容器控件包含列容器控件 C.页控件的PageCount属性值可以为0 D.列表的ColumnCount属性可以为负值 8.对于许多控件来说,可以通过ControlSource属性与数据绑定。在下列VFP对象中,无ControlSource属性的是_____________。 A.标签(Label)B.复选框(CheckBox)C.选项按钮组(OptionGroup)D.列表框(ListBox)9.若要将表文件xs.dbf复制到xs1.dbf文件(假设xs.dbf未打开,且保存在当前默认目录内),则可以使用命令_____________。 A.COPY xs.dbf xs1.dbf B.COPY FILES xs.dbf TO xs1.dbf C.COPY TO xs1 STRU D.COPY TO xs1 10.要在浏览窗口中显示表xs.dbf中职称(jg c(10))为“江苏”的记录(该字段的内容不含空格),下列命令中不能实现此功能的为__________________。A.select * FROM xs WHERE xs.jg==”江苏“ B.select * FROM xs WHERE left(xs.jg,4)=”江苏“ C.select * FROM xs WHERE ”江苏“ $ xs.jg D.select * FROM xs WHERE xs.jg=”江苏" 11.在中文Visual FoxPro系统中,若设置SET DATE TO LONG,则表达式LEN(DTOC({^2005 7 1}))的值为__________。A.12 B.6 C.8 D.10 12.欲限制某数据库表中一字段的值不能重复,则可行的方法是______________。A.对该字段创建主控索引 B.对该字段创建唯一索引 C.对该字段创建主索引 D.对该字段创建主索引或唯一索引 13.Visual FoxPro系统中,0对数据库表设置参照完整性过程时,“更新规则”选择了“级联”选项后,则__________________。 A.在更新父表的关键字的值后,以新的关键字值更新子表中的所有相关记录 B.在更新父表的关键字的值时,若子表中有相关记录则禁止更新 C.在更新父表的关键字的值时,若子表中有相关记录则允许更新 D.在更新父表的关键字的值时,不论子表中是否有相关记录都不允许更新 14.设CmdClose是一个用户创建的“关闭”命令按钮子类,并设置了Click事件代码。在某表单中基于CmdClose类创建了一个命令按钮CmdClose1,则___________________。A.可以为CmdClose1设定Click事件代码,运行时只执行该代码,而不执行CmdClose类的Click事件代码; B.可以为CmdClose1设定Click事件代码,运行时既执行该代码,又执行CmdClose类的Click事件代码; C.可以为CmdClose1设定Click事件代码,运行时只不执行该代码,而执行CmdClose类的Click事件代码; D.不可以再为CmdClose1设定Click事件代码。 15.若为js.dbf表删除一个年龄字段(nl n(3)),以下命令中正确的是___________________。A.ALTER TABLE js ADD nl n(3)B.ALTER TABLE js DROP nl n(3)C.ALTER TABLE js DELETE nl D.ALTER TABLE js DROP nl 16.设有一自由表xx.dbf。下列SELECT-SQL命令中,说法错误的是_______________。 A.select * FROM xx &&将xx表的所有内容送往浏览窗口; B.select * FROM xx INTO CURSOR temp &&将xx表的所有内容送往临时表temp; C.select * FROM xx INTO TABLES temp &&将xx表的所有内容送往表文件temp; D.select * FROM xx TO PRINTER &&将xx表的所有内容送往打印机 17.关于引用对象说法错误的是_____________。 A.绝对引用是指从容器对象的最高层次开始,给出欲引用对象的绝对地址; B.相对引用是指在层次型容器中相对于某个容器层次进行引用; C.this和parent是指向对象的指针; D.绝对引用和相对引用的效果不同 18.件是一个应用程序运行时的起点,是应用程序执行时首先要执行的文件。在一个项目中,只能指定一个文件为主程序。下列说法中正确的是___________________。A.作为主文件必须是可以执行的,并且被首先执行。B.项目、菜单、查询和表单可以作为主文件 C.数据库、查询、表单和程序(.prg)可以作为主文件 D.菜单、查询、表单和表可以作为主文件 19.一个应用程序来说,报表打印输出是常用的部分,其设计工作量通常比较大。在下列有关报表的叙述中,错误的是___________________。 A.所有利用报表设计器创建的报表,其数据环境中一定包含表或视图; B.标签是特殊的报表,二者没有本质的区别; C.报表文件中包括了数据源、需要打印的文本及布局等信息; D.在打印报表时,可以不打印细节行,只打印总计和分类总计信息 20.据库系统由数据库、_____________________________组成。 A.DBMS、应用程序、支持数据库运行的软、硬件环境和DBA B.DBMS和DBA C.DBMS、应用程序和DBA D.DBMS、应用程序、支持数据库运行的软件环境和DBA 21.rivate 命令用来对______________________进行声明。A.公共变量 B.局部变量 C.全局变量 D.私有变量 22.文件经过生成以后形成的菜单程序文件的扩展名是______________。 A.MPR B.MNX C.MPX D.MND 23.SET DATE命令可以设置日期的显示格式。如果要将日期显示为“2002年10月1日”的形式,可以利用命令 ____________。 A.SET DATE TO MDY B.SET DATE TO ANSI C.SET DATE TO YMD D.SET DATE TO LONG 24.管理器不能组织和管理的文件有______________。A.程序文件 B.表文件 C.非结构索引文件 D.数据库文件 25.Visual FoxPro 中创建数据库后,系统自动生成的三个文件的扩展名分别为_______。 A..PJX、.PJT、.PRG B..DBC、.DCT、.DCX C..FPT、.FRX、.FXP D..DBC、.SCT、.SCX 26.关VFP对象(控件)的属性,事件和方法的叙述中,错误的是_____________ A.用户可以为表单创建新的属性,但不能为表单中的对象(控件)创建新的属性 B.用户创建的新属性,其默认值均为.F.C.任何对象(控件)的事件集总是固定的,用户不可能添加新的事件 D.方法和事件总是一一对应的,即一个方法程序对应着一个事件 27.md是一个用户创建的命令按钮子类,并设置了Click事件代码。现在某表单中基于cmd类创建了一个命令按钮,则在定义该命令按钮的Click事件代码,_________。 A.cmd 类的Click事件代码可视,但不能被修改 B.cmd 类的Click事件代码可视,但能被修改 C.cmd 类的Click事件代码不可视,且运行表单并单击按钮时cmd类的Click事件代码不被自动执行,须引用cmd::click才可执行。 D.cmd 类的Click事件代码不可视,且运行表单并单击按钮时该cmd类的Click事件代码总被执行 28.列有关VFP对象(控件)的叙述中,错误的是___________ A.复选框控件的Value值只能为1(.T.)或0(.F.)不能为空值(.NULL.) B.一个标签控件可多行显示文本 C.命令按钮控件上可同时显示文本和图片 D.表格中的每一列都是容器对象,而且拥有自己的属性,事件和方法 29.不属于关系代数运算的是______________。A.查询 B.投影 C.选择 D.联接 30.叙述中,正确的是()。A.在命令窗口中被赋值的变量均为局部变量 B.在命令窗口中用PRIVATE命令说明的变量均为局部变量 C.在被调用的下级程序中用PUBLC命令说明的变量都是全局变量 D.在程序中用PRIVATE命令说明的变量均为全局变量 二、填空题 1、在数据库系统中,实现各种数据管理功能的核心软件称为 数据库管理系统_____。 2、为使表单运行时在主窗口中居中显示,应设置表单的AutoCenter属性值为 _________。 3、?AT(”EN”,RIGHT(“STUDENT”,4))的执行结果是 _______。 4、数据库表上字段有效性规则是一个 _________表达式。 5、在Visual FoxPro中,通过建立数据库表的主索引可以实现数据的 ________ 完整性。 6、连编应用程序时,如果选择连编生成可执行程序,则生成的文件的扩展名是 ________。 8、为修改已建立的报表文件打开报表设计器的命令是__________。 9、VFP的应用程序中菜单系统由菜单栏、________、菜单、菜单项等四部分组成。 10.类(class)是面向对象程序设计的核心。类具有:抽象性、封装性、继承性、多态性的特点,其中______________性是体现并扩充了面向对象程序设计方法的共享机制。11.主文件是一个应用程序执行的开始点,在一个项目中可以指定____个主文件。 12.设当前默认目录有一报表文件“工资表打印.frx”,则调用报表的命令是: __________________________________。 13.在VTP集成环境下可用系统提供的修饰工具提高程序的可读性(缩进、大小写等),用编译检查出语法错误,使用系统提供的________工具来调试程序,排除程序中语义逻辑错误。 14、使用SQL语句将一条新的记录插入学院表 ??INSERT_________ 学院(系号,系名)_________(“04”,“计算机”) 15、使用SQL语句求“工商管理”系的所有职工的工资总和。 ??SELECT _________(工资)FROM 教师; ?? WHERE系号IN 9(SELECT 系号FROM _______ WHERE 系名=“工商管理”) 16、使用SQL语句完成如下操作(将所有教授的工资提高5%)??__________ 教师 SET 工资=工资*1.05 [15] 职称=“教 授”第二篇:全国计算机二级VFP模拟试题[