应用问答
问:我用VB5编写了一个数据录入程序,使用Access数据库。当我使用DBGrid控件时,希望对某一 列数据的修改不存入数据库中,而其他的列允许修改存入,但我发现DBGrid中DATACHANGE属性只 支持整行的操作,不支持单独的列,有办法解决吗?
答:DBGrid有一个事件BeforeColUpdate,其语法如下:
Private Sub object_BeforeColUpdate ([ index As Integer,] colindex As Integer, oldvalue As Variant, cancel As Integer)
其中colindex是列号,如果cancel为False就允许更新数据库,如果为True就不允许更新数据库。
问:我需要对Access的FORM的一个输入框进行值的判断,如果该值大于30,就出现一个警告 信息,并把光标定在此框中,不移到下一个框。但无论我怎么做,光标还是会移到下一 个框中,该框的事件触发程序如下:
Private Sub EDP_LostFocus()
If Me![edp] 30 Then
MsgBox "值不能大于30,请重新!"
Me![edp].SetFocus
End If
End Sub
不知道为何实现不了我的愿望?这是否是Access的Bug?
答:确实存在你所说的问题,这同Access的工作方式有关,它在用户移动光标时总是先保存 数据,而在LostFocus中无法组织它进行保存工作。如果你想避免错误的数据存入数据库,应该在 BeforeUpdate中进行控制。
问:我自己建立了一个mdb数据库,其中有aa,bb,cc三个表:aa中有name(text,50,可变长度)、 age(integer)字段,name为主索引,单向增大,唯一值;bb中有name(text,50,可变)、 unit(text,50,可变长度)、id(long)字段,name为主索引、增大、唯一,id为索引、增大、唯 一;cc表中有id(long)、money(integer)字段,id为主索引、增大、唯一。现在我有如下:
1. select * from aa inner join bb on aa.name=bb.name 或者select * from bb inner join cc on bb.id=cc.id都可以创建一个可updateable的recordset,但select * from aa inner join (bb inner join cc on bb.id=cc.id) on aa.name=bb.name却只能创建一个不能更新的 recordset,不能创建一个可更新的recordset,这是为何?
2. 如何利用insert into, update, delete对多表进行同时操作?
答:如果多表的recordset是可更新的,那么至少要满足两个条件:一个是join的关系必须是“一 对多”的,另一个条件是在“一”这方面必须有唯一(或主)索引。你可以用这两个条件来判断 是否可以更新。Update等在进行多表操作时也要满足这两个基本条件。
问:我打算学习Visual FoxPro,请您推荐几个有关学习Visual FoxPro和数据库方面知识的网 点, 最好是中文的。您认为数据库理论方面的知识对于学习VFP重要吗?他们之间的关系是怎样 的?
答:Visual FoxPro的网点并不是很多,这当然是因为它的用户数目比较少。Visual FoxPro的官 方网点是msdn.microsoft.com/vfoxpro,上面有不少关于FoxPro第三方软件的链接。在中文网点 方面,我推荐两个:思达工作室(http://www.zg169.net/~addie98,GB码)和Visual FoxPro User Club (http://vfp.gtic.com.tw/scripts/vfp_user_club/logon.idc?vip_id2=200273password2=120 5, BIG5码)。Neil’s FoxPro Resources (http://adams.patriot.net/~johnson/neil/fox.html)是我所见过的最好的FoxPro个人网点,它 完全可以同Delphi的DSP和VB的VBNet相媲美。此外,Colin’s FoxPro Site (http://www.state.sd.us/people/colink/foxpage.htm)、Virtual FoxPro User Group (http://www.vfug.org/)、Inside Visual FoxPro (http://www.cobb.com/vfp/)、Visual FoxPro Yellow Pages (http://www.universalthread.com/)都是相当不错的网点。
数据库理论对于学习Visual FoxPro当然重要,但这里也有个理论和实际结合的。我反对 空谈理论,学习理论不是什么热门学什么,而应根据需要。对于VFP的初学者,学习一些关系数据 库的基本理论是十分必要的,许多人设计数据库时根本不考虑数据冗余、关系的完整性这些最基 本的,这对于有一定规模的数据库来说十分危险。
感谢您对翰文计算机学习网的支持