2015-05-18 33 views
0

是否有机会编辑SQL代​​码而不擦除它? 我需要查询的更表和字段,而我不能添加它们全部是800多个符号Delphi和SQL代码添加

的代码,这是就我所知德尔福丝毫SQL:

Form4.ADOQuery1.SQL.Clear; 
    Form4.ADOQuery1.SQL.ADD('SELECT * FROM SKTech WHERE SKtech.Tech='+#39+ComboBox1.Text+#39+';'); 
    Form4.ADOQuery1.Active := true; 

正如你所看到的,我正在使用sql whit combobox来选择不同的字段来显示。此代码完美工作,但我不能添加我所有的表&字段... 只有这样做才能将所有查询存储在多个字符串中?

+0

ADO可以返回多个记录集由一个命令执行(不知道是否有'TADOQuery'组件)。然而,问题是这对你有多舒适。 – TLama

+1

我不明白你在问什么。 SQL只是文本,因此您可以*编辑SQL代​​码,而无需以任何方式删除*您想要的所有内容。我强烈建议你在这里搜索'[delphi] sql参数',这会让你的生活变得更加简单(并且你的代码更加安全。) –

+2

你知道吗,你不必使用designtime组件并且您可以在运行时即时创建查询?请不要使用[sql注入漏洞查询](http://en.wikipedia.org/wiki/SQL_injection)并学习如何使用[参数化查询](http ://docwiki.embarcadero.com/CodeExamples/en/ADOQuery_(Delphi))。 – whosrdaddy

回答

1

对于短的查询,我通常使用TStringList,我可以使用循环(或完整字符串匹配的TStringList.IndexOf)解析来定位“FROM”,“WHERE”和其他SQL令牌。然后我可以在正确的地方插入新的字段或条件。

对于较长的查询(数百行)我有时用一个TQueryBuilder类,基于相同的原则,但在那里查询令牌分裂:

TQueryBuilder = class 
private 
    FSelect: TStrings; 
    FFrom: TStrings; 
    FWhere: TStrings; 
    FOrderBy: TStrings; 
    ... 
public 
    function GetQuery: TStrings; 

然后:

myDataset.SQL := myQueryBuilder.GetQuery;