从DELPHI转向VFP9的入门六大困惑求已有解决方法的对应帖子

guilinlzy1978 2009-06-24 04:09:08
因为公司需求,要求必须基本掌握VFP9的基本软件开发技能,之前一直都在用DELPHI开发应用管理软件,突转向VFP,经过几天的学习和摸索,感觉用桌面型程序开发工具开发一般的关系数据管理应用系统,一般要掌握的技能要求包括:
1、数据表的操作(连接、新增、修改、删除、查询)
要的是操作方法,不用复杂例子,以及如何刷新本地数据?

2、客户端数据如何绑定浏览
如果使用SQL SERVER数据库,用BPT的SQLEXEC命令,后面跟的cursor,感觉不怎么理解的是“是否需要在本地建立DBF表来对应GRID的数据源”,不然怎么在客户端显示数据?

3、客户端GRID表格表头标题的设置
是否可以采用哈希表之类的方法来设置每个数据集中英文字段对应?

4、查询数据导出EXCEL
求解决问题的帖子

5、报表统计
求解决问题的帖子

6、功能性常用函数的积累
每个开发人员在不同开发工具中都要面临的积累

7、通过论坛了解其他开发人员在学习过程中碰上的各种问题及解决方法,并做好帖子集锦

其余则是控件的熟练掌握程度,软件应用业务需求分析设计

在熟练掌握一门开发工具的基础上,再上手另外一门开发工具,个人觉得如果能比较快的解决好以上问题,即使刚开始做出来的东西丑陋些,

但是一般性功能性开发应该能基本完成

到处都找不到合适的VFP9的数据库程序来更进一步熟悉数据操作功能,从网上下载的程序总是提示少这样,少那样,希望有热心人提供好的能正常打开的学习例程
...全文
101 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
xy111222333 2009-06-24
  • 打赏
  • 举报
回复
学习中~~~~~~~~~~~~~·
十豆三 2009-06-24
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 guilinlzy1978 的回复:]
一线软件开发人员,特别是有相当企业信息化实施经验的,进企业还是相当有机会,尽量努力跨入企业中层管理行列,延续自己的工作生涯,能转型为专门的管理人员也不失为一种不错的选择之一
[/Quote]

有道理。
guilinlzy1978 2009-06-24
  • 打赏
  • 举报
回复
一线软件开发人员,特别是有相当企业信息化实施经验的,进企业还是相当有机会,尽量努力跨入企业中层管理行列,延续自己的工作生涯,能转型为专门的管理人员也不失为一种不错的选择之一
wwwwb 2009-06-24
  • 打赏
  • 举报
回复
VFP已经被MS放弃了,DELPHI也被BORLAND卖了,呵呵,同病相连。
十豆三 2009-06-24
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 guilinlzy1978 的回复:]
谢谢各版主,呵呵


什么原因使你从 Delphi 转到 Vfp?
回复:已经过了30岁,换单位前认真考虑过转型的问题(趁着现在年轻进单位既有丰富的软件开发经验和其他电脑管理应用经验,再过几年进单位就不会再具有现在这样大的优势),目前转型进入一家企业做电脑管理,其主要职责是管理、维护原有
公司已经使用几年的一套VFP9开发的管理系统,公司主管要求这个岗位必须要掌握VFP,等业务熟悉后再用DELPHI重新开发一套
一样的…
[/Quote]

好呀,你既然会 Delphi ,那转 VFP 应该不会有问题。
关键要掌握业务,业务掌握了,用什么都可以开发。

十豆三 2009-06-24
  • 打赏
  • 举报
回复
这是本版的 FAQ(常见问题解答)

http://faq.csdn.net/ListFAQ.aspx?roomid=1803
guilinlzy1978 2009-06-24
  • 打赏
  • 举报
回复
谢谢各版主,呵呵


什么原因使你从 Delphi 转到 Vfp?
回复:已经过了30岁,换单位前认真考虑过转型的问题(趁着现在年轻进单位既有丰富的软件开发经验和其他电脑管理应用经验,再过几年进单位就不会再具有现在这样大的优势),目前转型进入一家企业做电脑管理,其主要职责是管理、维护原有
公司已经使用几年的一套VFP9开发的管理系统,公司主管要求这个岗位必须要掌握VFP,等业务熟悉后再用DELPHI重新开发一套
一样的程序

其实IT从业人员特别是偏软件开发的人员很多都会面临我这样的选择
ACMAIN_CHM 2009-06-24
  • 打赏
  • 举报
回复

按照楼上十豆三老师的建议系统了解一下VFP,其实各种高级程序语言差不了太多,关键是熟悉。
有空看一下VFP的帮助手册。
十豆三 2009-06-24
  • 打赏
  • 举报
回复
问题1请参考:

设计一组维护记录的命令按钮

*-------------------------------------

设计思路:
1.该命令按钮组含有[新增]、[修改]、[删除]、[存储]、[取消]等命令按钮。
2.在运行新增或修改功能时,除了[存储]、[取消]按钮可操作,其余按钮都设置为禁止状态,防止使用者操作不当引起错误。
3.不是运行新增或修改功能时,除了[存储]、[取消]按钮为禁止状态外,其它按钮都是可以选择操作。
4.在运行新增或修改功能时,光标自动会跳到第一个输入框(文本框)中。  

设计步骤:
1、从[表单控件]工具栏点工具按钮,添加一个命令按钮组到表单上,默认有Command1和Command2两个命令按钮。  

2.设置CommandGroup对象的AutoSize属性为.T.,BottonCount属性为5,Name属性为UpdateBtn。  

3.设置其中的各个按钮属性如下:
Command1:Caption="新增" FontSize=12 Name=CmdNew
Command2:Caption="修改" FontSize=12 Name=CmdEdit
Command3:Caption="删除" FontSize=12 Name=CmdDel
Command4:Caption="存储" FontSize=12 Name=CmdSave
Command5:Caption="取消" FontSize=12 Name=CmdCancel

4.在表单新增一属性UpDateMode,用于存储表单当前是否处于可编辑状态(即新增或修改状态),初始值为.f.。

5.在表单上所有可编辑对象的When Event方法程序里都写上一句: RETURN ThisForm.UpDateMode

6.设置表单的数据环境的表缓冲模式为“3-开放式行缓冲”。

7.因为在编写代码时一般要控制定位记录的按钮,以下编写代码假设表单上存在另一组用于定位记录的按钮组,取名为Navigator,其中的四个按钮分别为:
首记录:CmdTop;
上一记录:CmdPrior;
下一记录:CmdNext;
末记录:CmdBottom

8.编写[新增]按钮的Click Event方法程序的代码:
ThisForm.UpdateMode=.t. &&进入新增状态后,将该属性的值设为.t.,每个字段可编辑 Append Blank
With This.Parent
.Parent.Refresh
.CmdNew.Enabled=.f.
.CmdEdit.Enabled=.f.
.CmdDel.Enabled=.f.
.CmdSave.Enabled=.t.
.CmdCancel.Enabled=.t.
.Parent.Navigator.SetAll("Enabled",.f.) &&将记录定位按钮设置为禁止状态
.Parent.Text1.SetFocus &&进入新增状态后,光标自动进入第一个输入框。
EndWith

9.编写[修改]按钮的Click Event方法程序的代码:
ThisForm.UpdateMode=.t.
With This.Parent
.Parent.Refresh
.CmdNew.Enabled=.f.
.CmdEdit.Enabled=.f.
.CmdDel.Enabled=.f.
.CmdSave.Enabled=.t.
.CmdCancel.Enabled=.t.
.Parent.Navigator.SetAll("Enabled",.f.)
.Parent.Text1.SetFocus EndWith

10.编写[删除]按钮的Click Event方法程序的代码:
nSure=MessageBox("是否确定删除此记录?",4+32+256,"警告")
if nSure=6
Delete
Skip
If Eof()
Go Bottom
With This.Parent
.Parent.Navigator
.CmdTop.Enabled=.t.
.CmdPrior.Enabled=.t.
.CmdNext.Enabled=.f.
.CmdBottom.Enabled=.t.
EndWith
Else
This.Parent.Parent.Navigator.SetAll("Enabled",.t.)
EndIf
This.Parent.Parent.Refresh
EndIf

说明:为了提高程序运行效率,应将程序的运行环境中的Set Deleted设置为On,即隐藏删除记录,但是在运行删除命令后,必须移动记录指针,被删除的记录才会隐藏。一般来说在删除记录后应该用TableUpdate()更新原始表,但这里我们开始将数据环境设置为开放式的行缓冲,所以Skip以后会自动更新。

11.编写[存储]按钮的Click Event方法程序的代码:
ThisForm.UpdateMode=.f. &&恢复编辑框的只读状态
=TableUpdate(.f.) &&将缓冲区所编辑的数据写回原始记录。
With This.Parent
.CmdNew.Enabled=.t.
.CmdEdit.Enabled=.t.
.CmdDel.Enabled=.t.
.CmdSave.Enabled=.f.
.CmdCancel.Enabled=.f.
.Parent.Navigator.SetAll("Enabled",.t.)
EndWith

12.编写[取消]按钮的Click Event方法程序的代码:
ThisForm.UpdateMode=.f. &&恢复编辑框的只读状态
=TableRevent(.f.)
If Eof()
Go Bottom
With This.Parent
.Parent.Navigator
.CmdTop.Enabled=.t.
.CmdPrior.Enabled=.t.
.CmdNext.Enabled=.f.
.CmdBottom.Enabled=.t.
EndWith
Else
This.Parent.Parent.Navigator.SetAll("Enabled",.t.)
EndIf
With This.Parent
.CmdNew.Enabled=.t.
.CmdEdit.Enabled=.t.
.CmdDel.Enabled=.t.
.CmdSave.Enabled=.f.
.CmdCancel.Enabled=.f.
.Parent.Refresh
EndWith

13.在Form的load里写:
Set Deleted On
Go Top
在Form的Unload里写:
Set Deleted Off
至此编写一组记录维护的命令按钮组基本完成,你可以将这组命令按钮保存为类方便今后调用。当然在情况发生变化的时候仍需要修改相应的代码以适应新的情况。


*----------------------------------------------------------------------

以下是一个简单的例子,请参考使用:

设表名为:BOTO1
设表字段:NAME,SEX,AGE 均为字符型,长度10。
建立一个表单:DEMO.SCX
表单上有:
四个按钮:添加、保存、删除、退出
三个文本框:TEXT1、TEXT2、TEXT3
一个Grid表:

表单的Load事件:
Use boto1

表单的Init事件:
This.GRID1.RecordSource='BOTO1'
This.GRID1.DeleteMark=.F.
This.GRID1.ReadOnly=.T.
For I=1 To 3
J=Alltrim(Str(I))
This.Text&J..Enabled=.F.
Endfor
This.Text1.Value=Alltrim(Name)
This.Text2.Value=Alltrim(sex)
This.Text3.Value=Alltrim(age)

表单的Unload事件:
Use In BOTO1

Grid的AfterRowColChange事件:
Lparameters nColIndex
Thisform.Text1.Value=Alltrim(Name)
Thisform.Text2.Value=Alltrim(sex)
Thisform.Text3.Value=Alltrim(age)
Thisform.Refresh

添加按钮的Click事件:
If Messagebox('是否使用录前值?',4+32+256,'信息提示')=7
Thisform.text1.Value=''
Thisform.text2.Value=''
Thisform.text3.Value=''
Endif
Thisform.text1.Enabled= .T.
Thisform.text2.Enabled= .T.
Thisform.text3.Enabled= .T.
Thisform.Text1.SetFocus

保存按钮的Click事件:
Append Blank
Replace Name With Alltrim(Thisform.text1.Value)
Replace sex With Alltrim(Thisform.text2.Value)
Replace age With Alltrim(Thisform.text3.Value)
Thisform.text1.Enabled= .F.
Thisform.text2.Enabled= .F.
Thisform.text3.Enabled= .F.
Thisform.grid1.Refresh

删除按钮的Click事件:
If Messagebox('是否删除此条记录?',4+32+256,'信息提示')=7 Or Reccount('BOTO1')=0
Return
Endif
Select BOTO1
Delete
Thisform.GRID1.RecordSource=Null
Pack
Thisform.GRID1.RecordSource='BOTO1'
Go Top
Thisform.GRID1.Refresh

退出按钮的Click事件:
Thisform.Release
十豆三 2009-06-24
  • 打赏
  • 举报
回复
什么原因使你从 Delphi 转到 Vfp?


问题2请参考

<vfp如何使用spt>
http://faq.csdn.net/read/175938.html



VFP远程视图使用面面观

文章出处:
http://www.ithome-cn.net/technology/fox/fox16.htm




请参考下面这个帖子中8-10楼的回复
http://topic.csdn.net/u/20081001/08/aa4b2ecf-ce26-4598-91bb-3f7e17939606.html



问题3请参考:

如果想让 Grid 的列标题与表字段一样,就无需设置。
如果想让 Grid 的列标题与表字段不一样(如表字段为英文,而列标题想显示为中文),可以这样设置 Grid
Thisform.Grid1.Columns(1).Header1.Caption="第1列标题名"
Thisform.Grid1.Columns(2).Header1.Caption="第2列标题名"
......
Thisform.Grid1.Columns(N).Header1.Caption="第N列标题名"

Thisform.Grid1.Column1.Header1.Caption="第1列标题名"
Thisform.Grid1.Column2.Header1.Caption="第2列标题名"
......
Thisform.Grid1.ColumnN.Header1.Caption="第N列标题名"


问题4请参考:

Select Dbf表名
Copy To Excel表名.Xls Type Xl5

问题5 - 7请参考:

VFP 自带的帮助或找一些示例及教程、书籍。
十豆三 2009-06-24
  • 打赏
  • 举报
回复
WWWWA 2009-06-24
  • 打赏
  • 举报
回复
问题太多,多看看的VFP的HELP,具体到某一问题再问,你可以在CSDN用关键字搜索,大致讲一下
1、在表单中用GRID OR 直接用BROW编辑数据;
2、用SPT、远程视图、ADO、CA连接后台数据库,用CURSORSETPROP设置5个属性,可以更新后台数据;
3、可以,用SELECT AS,动态生成SQL语句,也可以动态修改GRID中列的CAPTION;
4、看看EXCEL的VBA、宏,转换为VFP的代码即可;
5、一般用SQL语句计算好,报表只用来打印;
6、到MYF1、梅子论坛看看,这个是在平时积累;
7、这个不容易。

2,749

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧