新手问题:ado连接的数据库,用query.SQL.add的问题(100)

  • 主题发起人 jt780830
  • 开始时间
J

jt780830

Unregistered / Unconfirmed
GUEST, unregistred user!
在网上搜了很多次,也得不出所以然:就是在SQL语句的where 值引用一个变量的问题var classname:string;sql.Add('select * from student where classroom=''' + ClassName + '''');//我觉得问题在这里,还是没搞懂引号怎么用的
 
如果 classroom 字段是VARCHAR型或类似类型,那么你在查询分析器或PL/SQL中应该怎么写语句呢?很明显应该是 Select * From student Where classroom = 'A001',那么这个'A001'用变量代替后放到sql.Add()语句中应该怎样呢?就是你上面的写法,注意A001两边都要有单引号',因此变量 ClassName 前面的 ''' 代表一个单引号,单引号也是字符,也要用一对单引号引起来,就像 'A001' 一样,你把 A001 换成单引号就明白了,同理,变量 ClassName 后面有四个单引号 '''' ,前三个代表一个单引号,最后一个是与sql.Add('...配对的,因为Add方法的参数也是字符串,这样你明白了吗?你如果用ShowMessage(sql.Text)的语句就可以看到最终的命令是不是和前面的一样?还有,如果字段 classroom 是Integer型的,就可以直接写成sql.Add('select * from student where classroom=' + ClassName);(前提是变量 ClassName 是string型,如果是Integer型,要用IntToStr()转换一下)这样最终提交的语句就正好是 Select * From student Where classroom = 101,这是符合语法的,因为最终提交的语句会自动去除两边的单引号,我说的不好,不知你是否明白?祝你好运。
 
读了几遍,有一点是明白的,就是where的值是变量,变量如果是字符串类型,就用单引号引起来,如果是数值型,就不用引号。但是我上面那句是否没有查询到记录?有什么其它办法?
 
那句是否没有查询到记录?有什么其它办法?不明白你的意思,还有一点,如果你不用变量而字段类型又是VARCHAR型的,你可以这样写:sql.Add('select * from student where classroom=''A001''');这样提交后的语句就是 select * from student where classroom='A001'这时的两个单引号 ''其实是一个转义符,因为在字符串中用引号要用这种写法,否则就会报语法出错。你如果想知道是否有记录,先Open后再判 sql.RecordCount 是否大于 0 即可,用完别忘了sql.Close,还有问题就另开贴,这贴可以先结了。
 
a:='select * from student where classroom=''';//最后3个引号中的前两个对应sql的一个引号,后一个对应select的前面的一个引号,是把字符串引起来 —>select * from student where classroom='b:=ClassName; —>ClassName的值 c:='''';//中间两个引号对应sql的一个引号,外面两个引号是把字符串引起来 —> '//—>后面是对应的sql语句,这样看应该更清楚些 //sql.clear;最好加下这句,防止sql有上次遗留的语句sql.Add(a+b+c);//建议查询前先把sql.text里面的内容取出来在数据库里面查下,看看能不能查出来内容至于你的是不是没有查询到记录只能你自己找找了
 
var classname:string;sql.Add('select * from student where classroom=''' + ClassName + '''');如果觉得引号难分辨,可以 用QuotedStr()函数上面的语句可以 改为:sql.Add('select * from student where classroom=' + QuotedStr(ClassName));这样一目了然。
 
谢谢各位,我在程序里遇到问题,我以为是SQL没取得表,实际问题是这样的:请看我的笔记:http://www.delphibbs.com/keylife/iblog_show.asp?xid=34083
 
谁帮我解释一下为什么,我多多的给分!
 
这贴先结了吧。
 
虽然还没清楚是怎么回事,不过先谢谢各位了!
 
再次感谢!
 
1、检查一下表student中有没有classroom这个字段。2、检查classroom的类型。3、在sql.add(。。。)之前要把某个条件赋给classname最后但从add的内容看没问题。
 
With TADOQuery.Create(Nil) Do Begin Try Connection := Frm_DB.ADOConnection1; LockType := ltReadOnly; SQL.Clear; SQL.Add('select * from student '); SQL.Add('where (classroom=:s0) '); With Parameters Do Begin Clear; CreateParameter('s0', ftstring, pdinput, 32, Trim(classroom)); End; Open; //... Close; Finally Free; End; End;
 

Similar threads

顶部