Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

SELECT DISTINCT :myParameter FROM ... можно ли так? [D2005, XP]


Alex7 ©   (2007-08-11 08:52:00) 

Здравствуйте, уважаемые мастера.
Возможно ли задать в строке запроса имя поля как параметр,
SELECT DISTINCT :myParameter FROM ...
если можно, то какого типа он должен быть. Пробовал задавать Olestr - пишет : ошибка во время выполнения многошаговой операции OLE DB. (Использую MS ACCESS)
Заранее благодарен.


Anatoly Podgoretsky   (2007-08-11 18:40:00) [1]


> Динамическое изменения текста запроса разрушает статически
> созданные свойства параметров.

Динамическое создания текста запроса требует применения динамических параметров. Раз ты создаешь текст запроса динамически, то ты знаешь какие параметры создаешь. В этом случае ничего не рушится, если конечно включена проверка параметров или вызывается вручную их создание.


Desdechado   (2007-08-11 18:29:00) [2]


> MyQuery.SQL[0] := 'SELECT DISTINCT MyField';MyQuery.Open;
> Дальнейший текст запроса вместе с участием параметров - статичен.

Что мешает поставить вместо поля звездочку?
Тогда из выбранных данных можно обраиться только к нужному полю.


Lacmus   (2007-08-11 12:12:00) [3]

>Alex7 ©   (11.08.07 11:58) [8]

См. adodb.pas


procedure TADOCommand.AssignCommandText(const Value: WideString; Loading: Boolean);



Изменение этих параметров происходит там


Alex7   (2007-08-11 11:58:00) [4]

Рушатся прямо DisignTime. Вижу это в инспекторе объектов  (свойства: DataType, Size, Value.Size).


Lacmus   (2007-08-11 11:42:00) [5]

>заданные свойства параметров - рушатся

Какие именно свойства рушатся ?


Alex7   (2007-08-11 11:31:00) [6]

Текст запроса динамически меняю так:
MyQuery.Close;
MyQuery.SQL[0] := 'SELECT DISTINCT MyField';
MyQuery.Open;
Дальнейший текст запроса вместе с участием параметров - статичен.
В DisignTime, после замены текста в MyQuery.SQL[0] заданные свойства параметров - рушатся. Может это один из глюков Дельфи 2005?


Lacmus   (2007-08-11 11:08:00) [7]

>Alex7 ©   (11.08.07 10:46) [4]

При присвоении параметры не меняются


procedure TForm30.Button3Click(Sender: TObject);
var
 i: Integer;
begin
 ADOQuery1.SQL.Text := '...';
 for i := 0 to ADOQuery1.Parameters.Count - 1 do
   ShowMessage(VarToStr(ADOQuery1.Parameters[i].Value))
end;


Но если они все таки меняются, можно их скопировать до изменения запроса и восстановить после.


Alex7   (2007-08-11 10:46:00) [8]

>Lacmus ©
Использую TADOQuery,
ParamCheck = TRUE
оно автоматически становится TRUE  при статическом задании текста запроса, т.к. в тексте есть параметры.


Lacmus   (2007-08-11 10:28:00) [9]

>Alex7 ©

Используется TADOQuery ?
Какое значение у ParamCheck ?


Alex7   (2007-08-11 09:53:00) [10]

В запросе много параметров разного типа (в условиях отбора).
Динамическое изменения текста запроса разрушает статически созданные свойства параметров. Необходимо каждый раз формировать эти свойства заново. Это большой кусок кода. Есть ли какой-нибудь другой способ?
Не знаю, можно ли унаследовать эти свойства от чего-нибудь, после того, как текст запроса динамически изменился?


Savek   (2007-08-11 09:18:00) [11]

Имена таблиц и полей нельзя передавать в качестве параметров, формируй запрос динамически

SQL.Text:='select distinct '+FieldName+' from ...'


Наверх

Титульная страница Поиск, карта сайта Написать письмо