程序如下: 
  SqlL:='select * from 31msn04 where';
  SqlL:=SqlL+'id=:10';
  datamodule1.Tempquery.Close;
  datamodule1.Tempquery.Prepared:=false;
  datamodule1.Tempquery.SQL.Clear;
  datamodule1.Tempquery.SQL.Add(SqlL);  DataModule1.Tempquery.Prepare ;
当程序运行到这一步时,总是提示:
            Invalid use of keyword
            Token:31msn04
            Line Number:1
31msn04数据表是在程序运行中建立起来的,不知该数据表有什么问题?
  datamodule1.Tempquery.Open;

解决方案 »

  1.   

    SqlL:=SqlL+'id=:10';
    是不是这句写错了,只有在使用变量时,才在前面加:号的.你后面可不是一个变量呀.
      

  2.   

    SqlL:='select * from 31msn04 where';
      SqlL:=SqlL+' id=10';
                  ^   ^
                 <1> <2>  datamodule1.Tempquery.Close;
      datamodule1.Tempquery.Prepared:=false;
      datamodule1.Tempquery.SQL.Clear;
      datamodule1.Tempquery.SQL.Add(SqlL);  DataModule1.Tempquery.Prepare ;
      

  3.   

    SqlL:=SqlL+' id=10';这句怎么改都没有用的,哪怕使用变量也不行
    提示好像是数据表有什么问题,可是数据表是存在并可以打的开的
    如果用上述程序把31msn04表换成其它的表就可以通过的
    不知SQL本身对数据表有什么要求
      

  4.   

    测试了一下:SqlL:=SqlL+'id=:10'; 是正确的学习
      

  5.   

    当程序运行到这一步(Tempquery.Prepare)时,总是提示:
                Invalid use of keyword
                Token:31msn04
                Line Number
      这个就是错误提示如果把SQL语句改成如下所示
       SqlL:='select max(id) from 31msn04';
       Tempquery.Close;
       Tempquery.Prepared:=false;
       Tempquery.SQL.Clear;
       Tempquery.SQL.Add(SqlL);
       Tempquery.Prepare ;
    提示为
       raised exception class EDBEngineError with message'Invalid use
       of keyword
       Token:from
       Line Number:1'.Process stopped. Use Step or Run to continue.如果换成一个其它的数据库,哪怕没有ID字段,也不会是在Prepare的地方提示此错误,而是在open时才提示,而该数据表用非SQL语句则可以访问,添加 删除 查询 均可
      

  6.   

    问题终于搞清楚了,原来在用SQL查询时是数据表的名称不能是数字开头,用字母开头就好了,谢谢各位的热心参与