2015-05-18 3 views
0

Есть ли возможность редактировать код SQL без его удаления? мне нужен запрос для гораздо большего количества таблиц и полей, и я не могу добавить их в коде оно более 800 символовDelphi & SQL code add

И это много, как я знаю о Дельфи йоту 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

Знаете ли вы, что вам не нужно использовать компоненты времени разработки и что вы можете создавать свои запросы «на лету» во время выполнения? И, пожалуйста, не используйте [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;