怎么用query.FieldByName(a).value读取字段b等于某个特定值xxx的记录的字段a的值? (20分)

  • 主题发起人 主题发起人 zh_2001
  • 开始时间 开始时间
Z

zh_2001

Unregistered / Unconfirmed
GUEST, unregistred user!
怎么用query.FieldByName(a).value读取字段b等于某个特定值xxx的记录的字段a的值?
a、b为字段名。
我在程序中是这么写的,不行!
.....................
query1.Close;
query1.SQL.clear;
query1.SQL.add('select a as a1 from tb where b="xxx"');
query1.execsql;
if (cjsss<>query1.FieldByName('a1').value) then
...........
错误是:query:field 'a1' not found!
a1不是a的别名吗?怎么不能用?另外在tb中符合where b="xxx"的只有一条记录,不用
考虑返回的是不是一条!
谁知道请告诉我!
 
TQuery中返回数据集的查询应该用Query.Open或Query.Active := True。
另外,select a from tb where b='xxx'返回的结果可能不止一条记录,可能为多个记录的数据集,
应筛选其中记录。
 
用filter属性过滤一下试试,具体用法可以查一下帮助
 
符合 where b='xxx'的只有一条,不用考虑是不是不止一条!
用query.sql.add也可以呀!?我在其他地方用的都对!当然也可以用open,这不是问题的
关键。
 
就象楼上同志说的那样,你得弄清楚,你到底是要返回一个特定的A字段值,还是要一个集合?
你这样写的结果是返回一个结果集合,因为你的表B中满足条件的记录可能不直一条.
建议:
query1.Close;
query1.SQL.clear;
query1.SQL.add('select a as a1 from tb where b="xxx"');
query1.open;
if (cjsss<>query1.FieldByName('a1').value) then
 
你可以用Query.RecordCount属性查一下返回记录数,若有返回,
则可能是字段值类型的问题,请在读取字段值时指定数据类型
query1.FieldByName('a1').AsString
~~~~~~~~~~ 或者AsInteger等,应与cjsss的类型匹配。
若不能解决问题,请公布出错信息,便于大家分析。
 
yong9898,怎么用Query.RecordCount属性查一下返回记录数?cjss是single类型,
a是numeric类型的,tb是.dbf。
 
>>当然也可以用open,这不是问题的关键。
好好看看帮助文件中的关于open 和 execsql 的解释!
execsql是不返回结果的!
 
dlnew,改为open后,这句没问题了,可是后面一句有了问题:
cjsss=query1.FieldByName('a').value
错误是:query:field 'a' not found
这是怎么拉?难道给a起了别名a1后,a不能用了?
 
多人接受答案了。
 
当然!
一般来说,用“as”是因为字段名重复,或计算字段没有字段名时给人为加一个等类似情况下用的,
如果你的语句真如所写的那样简单的话,根本就用不着用别名。
 
后退
顶部