delphi TDBGrid的一个疑问:Grid和ADOquery不兼容吗?
在一段代码中本来是向将grid中的Fields[0].AsString作为adoquery查询sql中的查询字段内容进行查询,可是不管怎么调试运行时总是报内存地址读取错误,最后只能先声明一个字符串型的变量S,先讲Fields[0].AsString中的值赋给S,然后将S作为查询条件来查询。。。现在有个疑问,Fields[0].AsString不能直接作为查询条件进行查询吗?求详细解答
追问:呵呵,我现在就是这样写的,曲线救国但是写代码还是有代码质量的啊,一个功能几种不同的写法造成的程序大小有可能相差好几行代码也有可能,所以用最少的代码写出最好的功能也是程序员需要追求的东西嘛。select * from suit where suitname='''+suit.Fields[0].Value+'''
你说的是这个吧?用过了,不行,任何方法都用过。。。否则我不会这么纠结了,或者是我这个格式不对?可以给我发个正确的代码吗?避免这样的现象以后还是有同样的问题出现,所以答案完全不知道是什么
答案:楼主,你可以这样写,应该是不会报错的:
S:=DBGrid1.DataSource.DataSet.fieldbyname('student_name').AsString; //等价于DBGrid1.Fields[0].value (括号里的0是指student_name在DBGrid中对应的字段序号)
....
ADOQuery1.SQL.text := 'select * from Student where student_name = :s_name';
ADOQuery1.Parameters.ParamByName(s_name).Value := S ;
ADOQuery1.open;
其他:Fields[0].AsString是可以放在sql查询语句中的 ,在写sql查询语句的时候应该是这样的格式吧
sql=‘select from table where ***=***’;
注意:Fields[0].AsString 跟变量S 是不一样的,一个是字符串(也就是存在变量中的值),另一个是变量,在sql中应该注意转义符的使用。 我猜你的代码是
adoquery.close;
adoquery.sql.text:='select * from suit where suitname='''+suit.Fields[0].Value+''''
如果你的grid连接的是你用来查询的这个adoquery,在此时adoquery已经被关闭,那么引用suit.Fields[0].Value自然就报内存错误
上一个:delphi 怎么改变按钮背景
下一个:delphi已知A字段某记录的值求同记录的B字段的值