关于数据库的小问题:(100分)

  • 主题发起人 主题发起人 silverwolf
  • 开始时间 开始时间
S

silverwolf

Unregistered / Unconfirmed
GUEST, unregistred user!
我用Query查训数据库(*.DB)后,如何将所选的信息从数据库里删除?
每次我做del,update操作时(用SQL语句),为何系统总是提示:DataSet Read Only.
 
是不是表被锁了?
 
那就先EDIT
 
你是写Sql语句的吗?要用exesql方法
如果是insert ;post的话,设置requestlive := True;
 
agree 完颜康
 
如果你的TQUERY中SQL语句涉及到多个表的话,建议用UPDATESQL控件。
 
就是完颜康的后一种情况吧.
query.requestlive:=true就行了.
 
我做的是单表查询.
表(*.db)应该没有锁,因为我根本不知道如何锁,呵呵.如果默认设置是锁的,请说一下
如何解锁.
dit用过,不管用.当然比没加还是有区别的加的错误是(Query1:Cannot modify a
read-only dataset)不加的时候是Error creating cursor handle(设置requestlive
时同此),不过却可以修改成功
那位能够高手能告知原因,请举个具体的例子(能用的),不胜感激.

补充一句:执行SQL好像是execsql或者是open;
 
你是直接改的,不用INSERT INTO 或UPDATE???
adoconnection1.mode有没有改过?
 
如果你使用了order by,那么需要index那些列
 
我是用SQL语句修改的,没有order by
而且所做的程序只涉及的DBGrid,Query,DataSource各一个。
是个很奇怪的现象对不?
原来众位大大是如何删除数据库中选定的数据?
 
这应该是个小问题,看看控件的属性,楼上的大侠也说了许多。
 
干脆,贴代码
 
动态创建或则专门一个query,完成删除,记得将requestlive 设为True
 
把原来的Query删了,重建一个Query!!
 
你看你的*.DB是不是只读?!
你用DbGrid的时候,是否正在编辑某条记录,加锁有时候是自动的,不一定需要你操作!
 
还是查看一下控件属性吧。
 
谢谢诸位,问题解决了,完颜康大大的答案是正确的,由于我一贯以为
execsql和open的功能一样,所以……不好意思了,今天查书的时候发现
自己错了.
顺便将区别摘录如下:
execsql与open区别如下:当一个select sql时,Query的结果是一个结果集
,故可以用open,当执行一个insert,delete,update,create table,drop table
等非select操作(不返回一贯结果数据集)的时候,须使用execsq
 
多人接受答案了。
 
后退
顶部