关于记录查找locate的用法

jhcsq 2008-08-08 04:47:39
我想只查一个字段,但发现出错,如查两个字段则没问题了,不知啥?代码如下
arry1[0]:=trim(edit1.Text) ;
arry1[1]:=trim(edit2.Text) ;
arry1[2]:=trim(edit3.Text) ;
with DataModule8.ADOTable1zhzl do
begin
if (length(edit1.text)<>0 )then
begin
if (locate('acno;name',vararrayof(arry1),[loPartialKey])) then //如将 ;name去掉查则出错
delete
else
showmessage('该记录不存在');
end
上面的如这样写则错了,错哪? if (locate('acno',vararrayof(arry1),[loPartialKey])) then
...全文
158 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
JeffChung 2008-08-09
  • 打赏
  • 举报
回复

procedure TfrmMain.btnLocateClick(Sender: TObject);
var
sFields : String;
begin
sFields := GetSerchFields;
dmSearchData.sqlcdsTest.Locate(sFields, GetSearchValues,[loCaseInsensitive, loPartialKey]);
end;

function TfrmMain.GetSearchValues : Variant;
var
iCount : Integer;
sCond : String;
begin
Result := VarArrayCreate([0, Self.clbConditions.Items.Count - 1],varVariant);
for iCount := 0 to Self.clbConditions.Items.Count - 1 do
begin
sCond := Self.clbConditions.Items[iCount];
Result[iCount] := GetSearchValue(sCond);
end;
end;

function TfrmMain.GetSearchFields: String;
var
iCount : Integer;
sCond : String;
begin
Result := '';
for iCount := 0 to Self.clbConditions.Items.Count - 1 do
begin
sCond := Self.clbConditions.Items[iCount];
Result := Result + GetSearchField(sCond) + ';';
end;
Delete(Result, Length(Result), 1);
end;
lyguo 2008-08-09
  • 打赏
  • 举报
回复
if (locate('acno',vararrayof(arry1),[loPartialKey])) then

你这个当然有错, 前面 acno 是一个参数,
而后面arry1 它是三个参数啊。

楼上的几种方式都行。
xmfan2000 2008-08-08
  • 打赏
  • 举报
回复
一个不能使用这样的Locate方法,应该使用:
if Locate('acno', Trim(Edit1.Text), [loPartialKey]) then
.....
yangkunjie 2008-08-08
  • 打赏
  • 举报
回复
if Locate('acno',vararrayof(arry1),[loCaseInsensitive, loPartialKey])
whisht 2008-08-08
  • 打赏
  • 举报
回复
if (locate('acno',vararrayof([trim(edit1.Text)]),[loPartialKey])) then
会计学 1 计算机数据库基础及应用 计算机数据库基础及应用PPT学习教案全文共14页,当前为第1页。 任务一 定位记录 定位记录的3种方法: 1.在浏览窗口中定位记录 2.使用命令定位记录 3.菜单定位记录 任务概述 第1页/共14页 计算机数据库基础及应用PPT学习教案全文共14页,当前为第2页。 在浏览窗口中定位记录 打开学生情况表的浏览窗口,直接单击记录选择器即可实现定位记录。 如图所示: 第2页/共14页 计算机数据库基础及应用PPT学习教案全文共14页,当前为第3页。 2.使用命令定位记录 命令:Go <数值表达式> 功能:将记录指针定位到指定的位置。 说明:<数值表达式>的值为要指向记录记录号,其取值为正数。 特殊格式:go top " bottom 功能:将指针定位到首记录或尾记录。 (1)绝对定位 第3页/共14页 计算机数据库基础及应用PPT学习教案全文共14页,当前为第4页。 例1: 绝对定位 Use xsqk Go bottom Go 3 Go top use &&定位到尾记录 &&定位到3号记录 &&定位到首记录 第4页/共14页 计算机数据库基础及应用PPT学习教案全文共14页,当前为第5页。 (2)相对定位 命令:skip [<数值表达式>] 功能:以当前记录为基点,将记录指针向前 或向后移动指定条记录。 说明: a.若< 数值表达式> 为正,则向记录号 大方向移;超过记录号范围 b.若< 数值表达式> 为负,则向记录号 小的方向移; c.若为1,可简写为Skip。 第5页/共14页 计算机数据库基础及应用PPT学习教案全文共14页,当前为第6页。 例2: 相对定位记录 Use xsqk Skip Skip 3 Skip -2 use &&定位到5号记录 &&定位到3号记录 &&定位到下一条记录即2号记录 第6页/共14页 计算机数据库基础及应用PPT学习教案全文共14页,当前为第7页。 (4)条件定位 命令:locate [<范围>][] continue 功能:在当前数据表中按记录顺序依次查找满足条件 的第1条记录,然后使用continue命令继续查找。 说明:若没找到满足条件的记录,指针指到文件尾。 查找测试函数:Found() 功能:测试最后一次条件查找是否找到,找到为.T. 反之为.F. 第7页/共14页 计算机数据库基础及应用PPT学习教案全文共14页,当前为第8页。 3.菜单定位记录 具体操作步聚: 打开要操作的表。 单击"显示"—>"浏览"菜单,打开浏览窗口。 单击"表"—>"转到记录"菜单,弹出下一级菜单。 根据而要选择相应的菜单项。 第8页/共14页 计算机数据库基础及应用PPT学习教案全文共14页,当前为第9页。 菜单项与命令操作的对应关系如图: 第一个(T) 最后一个(B) 下一个(N) 上一个(p) 记录号(R) 定位 (L) ————go top ————go bottom ————ship ————skip -1 ————go n ————locate for 第9页/共14页 计算机数据库基础及应用PPT学习教案全文共14页,当前为第10页。 练习与思考 1.填空题 (1)定位记录就是将指针移到相应的记录上,按定位的方式分为____________________ _______,其命令关键字分别是 (2)Go top 命令的作用是 2.判断题 ( )(1)相对定位是以当前记录为基准,向上或向下移 动记录指针。 ( )(2)表文件头就是表的首记录,文件尾就是尾记录。 ( )(3)当数据表刚打开时,记录指针指妻文件头, Bof()的值为.T. ( )(4) go <数值表达式> 中,数值表达式的值不能超过最大记录号。 3. 写出下列 第10页/共14页 计算机数据库基础及应用PPT学习教案全文共14页,当前为第11页。 (3)相关函数 Record() 功能:测试当前记录记录号。 说明:当指针指到文件头或表中无记录时,函数值为 1。 当指针指到文件尾时,函数值为最大记录号加 1。 Reccount() 功能:测试当前表的记录总数。 说明:当表无记录时,函数值为 0。 Bof () 功能:测试记录指针是否到了文件头。是为.T. 反之为.F. Eof() 功能:测试记录指针是不到了文件尾。是为.F. 反之为.F. 表中无记录时,bof()和eof()都为真。 第11页/共14页 计算机数据库基础及应用PPT学习教案全文共14页,当前为第12页。 数据表文件中的记录范围与记录指针的移动关系如图所示: 文件头 首记录 . . . 第i条记录 . . . 尾记录 文件尾 skip -1 Go top Go i Go bottom skip Bof()=.T.

16,747

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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