delphi 访问 oracle 问题(200分)

  • 主题发起人 主题发起人 一叶风铃
  • 开始时间 开始时间

一叶风铃

Unregistered / Unconfirmed
GUEST, unregistred user!
在DELPHI 访问oracle <br>ADOQUERY -- DataSetProvider1-- ClientDataSet1<br>访问NUMBER类型(如 ID NUMBER)<br>我新增一条记录<br>ClientDataSet1.FieldByName('id').AsInteger := ClientDataSet1.RecordCount + 1 ;<br>保存后<br>ID的值不是我设定的值了.<br>然后删除就出现record not find错误了..<br>这个问题我答出来就给份了. &nbsp; &nbsp;<br>QQ154162809 &nbsp;小弟先谢谢各位了.
 
ADOQUERY 中是怎么写的?
 
select id, connectcontent, station_id, employee_id, connecttype_id, remark,<br>&nbsp;deletetag, createuser_id, createdatetime, createstation_id, <br>&nbsp;updateuser_id, updatedatetime, updatestation_id <br>from dict_employeeconnectinfo<br><br>这是我的SQL语句
 
try<br><br>ClientDataSet1.FieldByName('id').AsInteger <br>-------------&gt;<br>ClientDataSet1.FieldByName('id').AsFloat
 
估计是增加数据之后没有刷新。你可以测试在查询数据之后插入数据之前将 ClientDataSet1.RecordCount 的值转化成字符型用showmessage显示出来,再在你的插入语句之后再次显示。应该能取到值,但是插入语句可能没刷新所以显示值不正确。
 
update了吗?不提交是没用的。
 
你那些做是有问题的,比如:数据库里面有3条数据,ID为1,2,3;突然ID为2的数据删除了,再次添加的时候ID又是3,那时就会出现问题,所以最好使用先用query查找数据ID的最大值,然后加1,点击保存的时候记得ADOQUERY.ApplyUpdates,然后删除的时候直接调用ADOQUERY.delete,然后ADOQUERY.ApplyUpdates(保存)
 
可以试试ODAC控件
 
你用ClientDataSet.RecordCount作为ID?这样做有很大的问题的(如楼上一位朋友所说),为了考虑效率,你可以把ID字段设置成自增量的,然后这个值就不由客户端控制了。在Oracle里建立自增量字段的做法是建立一个计数器一类的东西(3年不用Oracle,术语名词忘了),然后把字段绑定到这个计数器上。
 
后退
顶部