在程序中建表,表名值通过参数传递,用的是adoquery控件,出现@'p1'附近有语法错误,请问这是参数引起的,还是其他的原因!!!

解决方案 »

  1.   

    表名、字段名、函数数名、SQL命令等都不能用参数。
      

  2.   

    参数的意义在于数据库可以进行预编译,然后用调用时的实际数据加进去运行,而表名等内容会影响SQL语句编译的结果,是不能用参数传递的,只能用动态生成SQL语句的办法。
      

  3.   

    我已经说了:动态生成SQL语句。就是用自己的代码生成SQL语句。一种简单的办法是:先写好SQL语句,其中可能变化的地方用特殊字符+普通字符串占位,使用时用StringReplace如:
    const
      SQLTemp = 'Create Table '#1'TableName'#2' ('#1'FieldName1'#2' varchar(50), '#1'FieldName2'#2' varchar(240))';
    ...
      SQL = StringReplace(SQLTemp, #1'TableName'#2, 'NewTable', [rfReplaceAll]);
      SQL = StringReplace(SQL, #1'FieldName1'#2, 'Name', [rfReplaceAll]);
      SQL = StringReplace(SQL, #1'FieldName2'#2, 'Description', [rfReplaceAll]);
    ...