dunin: У меня на этот счёт BSQLClass ^_^ Вернее, транзакция и TUIBDatabase определяется BQueryClass(например для одного проекта, который работает с 2 базами данных (локальной и удалённой) я определил 2 класса - BLocalQueryClass и BForeignQueryClass. А для упрощения создания запросов - или создание константы (например SQL_INSERT ITEM = 'INSERT INTO MYTABLE(ID, CAPTION) VALUES (:ID, :CAPTION), а затем
- Код: Выделить всё
aSQL := BSQLClass.Build(SQL_INSERT_ITEM);
aSQL.AddParam('ID', 1);
aSQL.AddParam('CAPTION', 'Random' + IntToStr(Random(1000)));
aQuery.Post(aSQL);
aQuery.Go;
aSQL.Burn;
или определить ещё один конструктор для BSQLClass -
- Код: Выделить всё
...BSQLClass = Class
Private
bIsProcedure: Boolean;
bParams: TList;
bSQL: String;
Public
Property SQL: String Read bSQL;
Property Params: TList Read bParams;
Property IsProcedure: Boolean Read bIsProcedure;
Procedure AddParam(Const aIterator, aValue: String);
Procedure AddParam(Const aIterator: String; Const aValue: Integer);
Procedure AddParam(Const aIterator: String; Const aValue: TDateTime);
Constructor Build(Const aString: String; Const ForProcedure: Boolean = FALSE);
Constructor BuildForBoolSQL(Const TableName, FieldName: String; Const aValue: Variant): Boolean;
Destructor Burn;
End;
...
Constructor BSQLClass.BuildForBoolSQL(Const TableName, FieldName: String; Const aValue: Variant): Boolean;
Begin
Inherited Create;
bParams := TList.Create;
bSQL := 'SELECT FIRST 1 COUNT (' + FieldName + ') AS ITIS FROM ' + TableName + ' WHERE ' + FieldName + ' = :ITIS';
AddParam('ITIS', aValue);
End;
и потом, соответственно
- Код: Выделить всё
aQuery.Get(BSQLClass.BuildForBoolSQL('MYTABLE', 'MYFIELD', 1));
v-t-l, Params.Clear - это так, для перестраховки ^_^ У меня один BQueryClass может помнить довольно много запросов, так что, чтобы вдруг чего от предыдущих не осталось ^_^ А BSQLClass.AddParam - это устанавливает значение для параметра. Вернее, даже сохраняет его, чтобы потом установить при исполнении запроса ^_^ Как-то так ^_^