分都散出去了,有关数据库的简单问题:)各位高手帮忙(100分)

  • 主题发起人 主题发起人 学海小妹
  • 开始时间 开始时间

学海小妹

Unregistered / Unconfirmed
GUEST, unregistred user!
我想用ADO数据集(此数据集在后台,不显示数据)的locate函数来确定
数据库里是否有某条记录,如果能找到是不是此数据集就定位到那条找到的记录上,
且返回值为真?如果找不到则返回值为假?
源代码如下:
var
bool:boolean;
begin
bool:=false;
bool:=adodataset1.locate('pro','aaa',[]);
if bool=true then
//找到了
else
//没找到
但为什么我测试,返回的都是false?请高手出手指点!最好给出源代码
 
不会吧,加个TLocateOption试试。
 
adodataset1.locate('pro','aaa',[loCaseInsensitive]);
 
不可能呀,试一试楼上的方法,应该是没有问题的
 
var
b:Boolean;
begin
b := ADODataSet1.Locate('id',78,[]);
if b then
begin
showmessage('true');
end
else
showmessage('false');
不加也行的,看看数据库里有没有这条记录???? 注意 一下大小写
 
就是看看数据库里有没有这条记录!
给个小例子
with ADOTable1 do
Locate('Company;Contact;Phone', VarArrayOf(['Sight Diver', 'P', '408-431-1000']), [loPartialKey]);
 
if adodataset1.locate('pro','aaa',[]) then
showmessage('found')
else
showmessage('not found')

aaa 是区分大小写的
 
是不是没有打数据集呀
 
我用了很多次,没有发现找不到的。
begin
adodataset1.First;
if adodataset1.locate('pro','aaa',[loCaseInsensitive]) then
//找到了
else
//没找到
end;
 
肯定是库里没有这个记录了
 
先自己尝试一个存在的 记录。
那不知道了?
 
没有记录。
 
这个是不是Delphi6的bug啊,我测试过加不加loCaseInsensitive对数,
对大小写不影响,好象打个补丁2就可以了。
 
最好还是不要用Locate,因为如果做两层或者三层应用的话,
都是尽量减少数据的传输量为标准,而Locate其实是把数据
全部取到前台,然后定位,显示的。最好还是用SQL语句。

with ADOquery1 do
begin
Close;
SQL.clear;
SQL.add('select * form XXXX where XXX=XXXX');
Open;
if RecordCount >0 then
showmessage('已经找到该记录!')
else
showmessage('所查找的数据不存在!');
end;
 
字段长度在15位以内没问题,超过15位要加loCaseInsensitive,加了又会影响效率,还是用SQL比较合适
 
后退
顶部