对我很难,对你很易的问题(delphi+sql)

hzzkf 2000-07-11 05:52:00
高手们:
小生在漫长的岁月中掌握了单机编写数据库的方法(包括sql语言),在近段的服务器/客户机结构的应用程序编写中也掌握了一定的知识。但是,目前我碰见了一个关于数据库记录锁定的问题很伤脑子,具体情况是这样的:某个用户在找到一条数据后按下'开始修改'键,此时,我想用某个方法或函数使这条数据的状态变为锁定(我查阅了一些资料,在讲到排他锁等概念时很笼统,不知如何进行锁定操作?)。而其他用户如果在查看到这条锁定记录时如果按下'开始修改'键,此时程序调用某个函数将检测这条记录的状态,如果锁定,则弹出一个提醒框,否则也能进行修改操作。在修改结束后按下'修改结束'调用某个方法或函数将这条记录修改成功并恢复能查能改的状态。以上是我的理想方法,但由于水平有限,只能将它束之在脑海中,请各高手赐教!!(小生目前的解决办法是在表中增加一个'锁定情况'的字段,在某个用户开始修改时记录的这个字段中人工加进一些字符,这样,在别的用户也修改时先看这条记录的'锁定情况'字段的内容,如果无内容便进行修改,当修改完毕后再清空记录的这个字段内容。虽然这是一个办法,但占用资源较大,况且如果用户在按下'开始修改'键而没有按下'修改完毕'键时巧遇断电,那么就需要在服务器中手工将记录的'锁定情况'字段的内容清空,非常麻烦。)
...全文
150 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Wonny 2000-07-12
  • 打赏
  • 举报
回复
确实很悲观!我的程序从来就不考虑断电问题,管它呢,不行拉倒。
liyang 2000-07-12
  • 打赏
  • 举报
回复
如果你在修改时打开一个新的recordset,就好办。在打开时,使用悲观锁。即一开始编辑就锁定该条纪录。在程序中,打开纪录时判断recordset的status属性,看是否是adRecUnmodified。即可.
zigzag 2000-07-12
  • 打赏
  • 举报
回复
使用ADO访问数据库,打开记录集时使用锁。其中悲观锁在编辑记录时就上锁,其他用户将不能不能对记录编辑;乐观锁在调用Update方法时才加锁。可根据你的需要使用两种方式。关于ADO的知识,可以参考这方面的资料。
快速查询控件2.0 -----------------------打造中国快捷,明了,直观,易查,易用的查询控件 一。创作初衷: 在创作此控件时,作者曾用万能查询控件开发之各类ERP及通讯用软件,但客户普遍反应此控件查,学,用。绝大多数客户反应他们仅仅只要一个简单的查询就行了,不要求太多的功能。但要快捷,明了,直观,易查,易用。为了满足客户的需求,遂起综合以前所写的各类查询方法,集合而成为本控件--快速查询控件。 二。控件优势: 1:快速查询控件2.0发布了。此快速查询控件,综合各查询控件的优势,取其精华弃其糟粕。 2.本控件生成的查询界面快捷,明了,直观,易查,易用。 3.本快速查询控件,在运行时不与数据库发生交付查询访问,即与数据一点联系都没有,消除了与数据库的访问负荷。用户可用sql profiler查看证实。而因不与数据库发生关系,故也与数据库连接接驱动程序无关。 4.本控件由于与数据库无关,则可应用于三层结构客户端的查询用。 5.可保存前一次查询条件以及在需要时进行多条件查询,使用方便,功能强大。 三。安装方法: 1.双击d6或d7文件夹下的ZQComponent打开组件包,在组件包面板上点compile,再点Install则安装完毕。安装完毕后会在delphi的组件面板里看到ZQSoft面板,第一个组件即fastSearch. 2.设置组件库目录。点delphi菜单tools-->Environment options-->library页-->点library path -->点右边...按钮则弹出directories窗口--->点...按钮选择安装组件包的路径--->确定-->Add-->Ok-OK则正确设置了组件路径。如果组件路径设置错误则运时会提示找不到dcu文件的错误。 四。使用方法。 具体见我的demo。简述如下: 1.拖曳FastSearch控件到你的Form上。设置DatabaseType属性即你所用的数据库类型,默认为SQL Server。 2.可设置DataSet属性或不设置DataSet属性 2.1设置DataSet属性,此方法简单常用,此DataSet即你用来访问数据库的数据集组件。设完DataSet后,则本控件会自动把DataSet里的fields里所有的字段域拿过来到DataFields里去,省去重新输入字段域的麻烦,用户也可在里面自行修改或删除字段域。如果用户DataSet里没设固定的列对象则控件在运行时会自动用默认域。如demo1. 2.2不设置DataSet属性。则直接设置DataFields里添加各项内容。在没有设置DataSet时,注意设置DataFields里的各项的AutoCheckType设为false。AutoCheckType为True时,控件在运行时会自动到DataSet里检查DataFields里各项的数据类型。如demo2. 3.运用FastSearch的Search方法执行查询。返回成功后从QueryCondition取得查询所得到的SQL 条件语句。也可用QuerySql方法,此方法会自动分析sql语句然后把查询后的条件插入到正确的位置,则当QuerySql返回结果不为空时,即是结果SQL语句,此方法对长SQL语句很简单。 4.是不是很简单,哈哈,FastSearch查询设计就这么简单的哦。 联系方式: Email:qzxit@126.com QQ:1282329592 五、历史版本: 1.2.02 解决了在oracle8i下日期数据查询出错的BUG。 2. 2.01 解决了在多条件下不选择任何条时出错提示信息压于查询框下面看不到的BUG. 3. 2.0 加入DataFields编辑器,解决多表关联的同名字段查询问题,并可完全脱离DataSet进行查询,使查询控件更独立。 4. v1.21 修改非模试窗口在顶部时压于底层看不见。并对使界面更友好。 5. v1.2 加入多条件查询,并修正了1.0的一些bug 六、注意 1.目录中demo1与demo2为在delphi7下编译通过的例子。 2.D2005中的控件仍为2.0版本的,因我没有delphi2005,有朋友须要时可联系我。D6与D7为2.02版本的控件。
delphi,学pascal那么久了,很多知识也都是互联网上搜索,也是依靠很多网友提供的资料去学习的,在此感谢互联网, 感谢那些技术分享的朋友们,近来打算在鄙人这年纪最后完成一个二次开发框架的软件(全凭自己的兴趣,因本人就一IT宅男,搞完后 估计本人也没有精力学习其它了),此软件想尽量少用第三方控件,但里面的DBTree功能不可避免,本以为网上找个DBTree是个手到擒来 的事情,没想到百度了一整天,居然没有一个好的DBTree,也许有人会说Ehlib的dbgridEH+Memtableeh可以,但这第三方软件包还需要带 有其它的东西,有点大,前面说过了,本软件想尽量少用第三方,除此外,国内的DBTree控件居然没有几个行的,看来delphi真的落寞了, 只能祝福delphi借xe5跨平台再次崛起吧!其实也不是说国产的DBTree没有,有那么两三个人做过,但我测试后很多问题,有些还把SQL做 到控件里,而且关联死TADOQuery,这样的控件让人以后如何用,国外的DBTree目前就发现一个还可以的是Dxdbtree, 公司也是大名顶顶的Developer Express Inc ,但不知道为何,网上找的只有1.3.1版本,而且只是For D7的,装上后, 发现还是要引用自己的内存数据(MemData)表才行,看了下源码,写得很复杂,晕啊,我只想找个简简单单功能的DBTree控件,怎么那么呢, 要求也不高,只需要继承于TTreeView,载入数据表树结构,展示出一个TreeView,能简单的拖动,删除树结构的操作就行, 求人不如求自,既然简单的就自己来做一个控件吧!经过三天参看源码和网络技术资料搜索,基本学会了delphi控件开发了, 因鄙人之前并没有真正做过什么控件,最后做出来的结果感觉还是不错的,鄙人在此公布源码并对源码关键地方用中文详细注释, 目的是希望给以后有类似像我这样的找DBTree的朋友一点帮助!同时也是给初学delphi控件编程的朋友是一个好教材!

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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