2010-10-11 26 views
0

我的2006年德尔福TADOCommand删除有它能参数安全地从一个Delphi TADOCommand在运行时

 CommandText (including parameters), 
    Prepared (True), 
    ParamCheck (True)

属性都设置在设计时。

有没有办法让我去删除它的一些参数运行时,无需改变的CommandText,以适应这些变化。在参数引用的某些表列不需要更新/插入的情况下,这是可取的。

我沿着

TADOCommand.Parameters.ParamByName('MyParam').SafelyRemove; 

非常感谢,
邓肯

回答

4

在参数每个项目收集对应的命令文本参数标记线思维的东西。这就像这个标记的API。从参数中删除项目不会删除相应的标记。如果您不需要在命令文本中触摸某个字段,则必须修改命令文本并删除相应的参数标记。

准备命令文本时,DBMS已经构建了命令执行计划并分配了一些命令执行所需的资源。如果您要更改命令文本,那么DBMS必须构建新的命令执行计划。

类是...

+2

此外,从命令文本中删除参数不是微不足道的。你需要一个SQL验证器来确保最终的SQL是有效的,而且还需要一系列规则来管理每种情况下被删除的内容。将DELETE FROM Customers WHERE CustomerID = CustID转换为DELETE FROM Customers很容易,但是更复杂的查询如DELETE FROM Orders WHERE OrderLanguage =:language和ShipToCustomer IN(SELECT CustomerID FROM Customers WHERE Address_Country_Language <>:language) ? – 2010-10-12 04:29:03

+0

非常感谢大家的回答。不幸的是你已经证实了我的怀疑。在这种情况下,我会从头开始重建命令文本,而不是试图有选择地修改现有的字符串。 – DuncanGiles 2010-10-15 12:58:28

0

由于参数占位符(:PARAMn)嵌入到SQL文本,我不看你怎么可以在不改变CommandText中添加或删除参数。你会有一个不匹配的。

+0

非常感谢大家的回答。不幸的是你已经证实了我的怀疑。在这种情况下,我会从头开始重建命令文本,而不是试图有选择地修改现有的字符串。 – DuncanGiles 2010-10-15 13:00:33

0

如果命令文本是动态更新的,我通常使用这样的参数:* Parameters.Clear; Parameters.ParseSQL(ADOCommand.CommandText,true); *它会自动创建具有正确参数名称的参数列表。

相关问题