I’ve had a chance to try this with a compiler I must install one at home sometime.
While I still find your use of WITH unusual, it does seem to work OK.
I have seen the error you are getting in several cases:
- Trying to run more than one query
against a connection at once (due to threading or a timer + processMessages) - With TADOStoredProc when the ProcedureName is incorrect
- Sometimes if ADO cannot parse the query — can’t test this without your DB schema.
Note that there is no need in SQL Server to explicitly define the parameter type. These are automatically assigned by a OnChanged event attached to the SQL TStringList object.
As a result, it is best to either assign the SQL.Text property (as you do), or if using .Add(‘SELECT …’), use a SQL.BeginUpdate/SQL.EndUpdate pair.
Original reply:
with AQ_Query do
begin
try
AQ_Query := TADOQuery.Create(nil);
ConnectionString := strConnectionString;
While this seems to work, it seems a bit strange to refer to an object before you instantiate it.
AQ_Query should be instantiated before the with statement:
AQ_Query := TADOQuery.Create(nil);
with AQ_Query do
begin
try
ConnectionString := strConnectionString;
Better yet don’t use WITH — It’s asking for trouble.
Also note that object creation should be BEFORE a try..finally. As written you would have a compiler warning. Don’t ignore these — they help you write better code.
naon 1 / 1 / 1 Регистрация: 11.09.2013 Сообщений: 268 |
||||
1 |
||||
11.12.2016, 22:17. Показов 18233. Ответов 13 Метки нет (Все метки)
Пишу запрос:
Сначала была ошибка » ошибка синтаксиса во FROM». После же стало писать «неправильно определен объект parameter предоставлены несогласованные илине полные сведения». Подскажите в чем ошибка?
0 |
1073 / 986 / 340 Регистрация: 07.08.2012 Сообщений: 2,790 |
|
11.12.2016, 22:36 |
2 |
AND S.FIO=:S.FIO А это как понимать? Источник ошибки, видимо, здесь.
0 |
naon 1 / 1 / 1 Регистрация: 11.09.2013 Сообщений: 268 |
||||
11.12.2016, 22:46 [ТС] |
3 |
|||
А это как понимать? Источник ошибки, видимо, здесь. Я хочу сделать отчет в Rave по параметрическому запросу. Сам код юнита:
Но даже убрав то что Вы сказали пишет ошибка синтаксиса во FROM
0 |
1073 / 986 / 340 Регистрация: 07.08.2012 Сообщений: 2,790 |
|
11.12.2016, 22:56 |
4 |
Параметры с точками не пишут.
0 |
YuryK 1039 / 855 / 335 Регистрация: 08.12.2016 Сообщений: 3,283 |
||||||||||||
12.12.2016, 02:42 |
5 |
|||||||||||
Сообщение было отмечено naon как решение Решение
were
Добавлено через 3 минуты
Parameters.ParamByName(‘S.FIO’).Value
AND S.FIO=:S.FIO
1 |
пофигист широкого профиля 4662 / 3096 / 855 Регистрация: 15.07.2013 Сообщений: 17,857 |
|
12.12.2016, 03:36 |
6 |
Недоумение вызывает и то что в запросе используется неявное объединение данных нескольких таблиц, но тем не менее содержит выходные поля только из одной таблицы. Присоединяюсь. Мне тоже не понятна сия логика.
0 |
1 / 1 / 1 Регистрация: 11.09.2013 Сообщений: 268 |
|
15.12.2016, 10:51 [ТС] |
7 |
С этим разобрался. Спасибо. Но возник другой вопрос. В комбобоксе некоторые поля повторяются. То есть сколько раз они упоминаются в таблице tbl2 столько раз они отображаются в комбобоксе. Как сделать что бы они отображались по 1 разу?
0 |
Модератор 4206 / 3046 / 581 Регистрация: 21.01.2011 Сообщений: 13,190 |
|
15.12.2016, 10:55 |
8 |
Как сделать что бы они отображались по 1 разу DISTINCT
0 |
1 / 1 / 1 Регистрация: 11.09.2013 Сообщений: 268 |
|
17.12.2016, 00:38 [ТС] |
9 |
DISTINCT А это где найти можно? или куда прописывается?
0 |
пофигист широкого профиля 4662 / 3096 / 855 Регистрация: 15.07.2013 Сообщений: 17,857 |
|
17.12.2016, 02:02 |
10 |
0 |
1 / 1 / 1 Регистрация: 11.09.2013 Сообщений: 268 |
|
17.12.2016, 15:28 [ТС] |
11 |
Спасибо, но это слегка не то что я имел ввиду. По вашему совету это прописывается в SQL, и отражается в самом отчете.
0 |
5095 / 4106 / 1029 Регистрация: 29.08.2013 Сообщений: 26,054 Записей в блоге: 3 |
|
17.12.2016, 16:15 |
12 |
вы или выгружайте в Combobox так как вам надо
0 |
naon 1 / 1 / 1 Регистрация: 11.09.2013 Сообщений: 268 |
||||
17.12.2016, 17:04 [ТС] |
13 |
|||
выгружайте в Combobox
Вот я при открытии формы заполняю комбобокс. Но как ограничить повторения?
0 |
5095 / 4106 / 1029 Регистрация: 29.08.2013 Сообщений: 26,054 Записей в блоге: 3 |
|
17.12.2016, 19:59 |
14 |
Но как ограничить повторения? 1. написать запрос что бы в нем не было повторений
1 |
Неправильно определен объект Parameter. Предаставлены неполные или несовместимые сведения.
Ошибка возникает при выполнении процедуры
Код:
qryWork_Insert.ExecSql;
{-запрос-}
qryWorker_Insert.SQL.Text :=
format(‘INSERT INTO Workers (worker_id, passport_num, person_num, family, name, patronymic, reg_td, date_reg, name_firm, end_td, add_inf) ‘+
‘ VALUES (%s, %s, %s, %s, %s, %s, :p_d1, :p_d2, %s, :p_d3, %s)’,
[VartoStr(unqID), QuotedStr(Trim(edtPassport.Text)),QuotedStr(Trim(edtPersonNum.Text)), QuotedStr(Trim(edtFamily.Text)), QuotedStr(Trim(edtName.Text)),
QuotedStr(Trim(edtPatronymic.Text)), QuotedStr(Trim(edtFirmName.Text)),QuotedStr(Trim(edtAddInfo.Text))]);
Форум программистов Vingrad
Поиск: |
|
ADOQuery «Неправильно опеределен объект Parameter», Выгрузка данных из FireBird 2.5 в DBF |
Опции темы |
GraNit |
|
||||
Шустрый Профиль Репутация: нет
|
Здравствуйте, уважаемые форумчане!
Получаю ошибку: Неправильно определен объект Parameter. Предоставлены несогласованные или не полные данные.
некоторые данные имеют значение nil. Видать ADOQuery это не устраивает и он ругается. |
||||
|
|||||
GraNit |
|
||
Шустрый Профиль Репутация: нет
|
Дополню. …тихо сам с собою, я веду беседу… |
||
|
|||
GraNit |
|
||
Шустрый Профиль Репутация: нет
|
Все решил я проблему. В запросе использовал Coalesce(); Теперь все поля у меня заполнены значениями. |
||
|
|||
|
Правила форума «Delphi: Базы данных и репортинг» | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) |
0 Пользователей: |
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
← →
moybobr ©
(2006-11-27 12:57)
[0]
Кто работал с параметрами для TADOQuery.
Подскажите, если кто знает как задать параметр с одним и тем же именем для TADOQuery, причем в запросе на этот параметр несколько ссылок.
Есть запрос к Ораклу. В запросе есть параметры, причем один и тот же параметр в запросе встречается несколько раз (Например
select * from
(select * from table1 where arcdate=:bdate) a1,
table2 a2
where a1.id=a2.id and a2.arcdate=:bdate).
Параметры задаются программно.
…
ADOQuery.Params.ParamByName(«bdate»).Value:=»21/12/2006″;
ADOQuery.Open;
…
Втаком случае выдается ошибка: «Неправильно определен объект Parameter. Предоставлены несовместимые или неполные сведения»
Проблема в том, что т.к. в запросе 2 параметра, то их необходимо явно задать.
…
ADOQuery.Params.Items[0].Value:=»21/12/2006″;
ADOQuery.Params.Items[1].Value:=»21/12/2006″;
ADOQuery.Open;
…
При отлдаке, смотрю в Object Inspector оба параметра заданы, но ошибка та же.
Если же значения параметров задать статически запрос отрабатывает.
Если изменить запрос и вместо bdate записать :bdate1 и :bdate2
и в программе соответственно
…
ADOQuery.Params.Items[0].Value:=»21/12/2006″;
ADOQuery.Params.Items[1].Value:=»21/12/2006″;
ADOQuery.Open;
…
То все работает.
Запрос сложный, используется bdate несколько раз. Поменять на bdate1 … bdateN я не могу, т.к. ухудшиться его время выполнения. Проверял.
Подскажите, если кто знает, как задать параметр с одним и тем же именем для TADOQuery, причем в запросе на этот параметр несколько ссылок.
← →
Stanislav ©
(2006-11-27 13:28)
[1]
Использовать переменные сервера.
незнаю как в оракле в MS SQL так:
declare @A int
set @a= :par
select …,@a from … where pole1=@a or pole2=@a
и т.д.
← →
k2 ©
(2006-11-27 13:41)
[2]
а тип какой у arcdate, bdate, bdate1, bdate2?
← →
moybobr ©
(2006-11-27 13:58)
[3]
to stanislav:
да, действительно можно использовать переменные ораклa.
declare
bdate date;
begin
….
select into ….
….
end;
В таком случае получается PL/SQL блок. Который не выполняется в TADOQUERY просто так, поскольку TADOQUERY должна возвращать результирующее значение. Здесь можно через курсор, но это излишняя сложность.
to k2:
типы у arcdate,bdate,bdate1, bdate2 одинаковые
← →
k2 ©
(2006-11-27 14:00)
[4]
одинаковые какие? даты или варчары
← →
Stanislav ©
(2006-11-27 14:04)
[5]
а в TADODATASET ?
на MS SQL работает нормально, только не редактируемый набор данных получается.
← →
moybobr ©
(2006-11-27 14:32)
[6]
to k2:
Даты. Хотя в примере приведено как варчар, но в самой программе begindate_DTP.DateTime, где begindate_DTP: TDateTimePicker;
← →
moybobr ©
(2006-11-27 16:34)
[7]
Спасибо всем. Проблема решена путем полной программной инициализации всех параметров:
…
bal_Q.Parameters.Items[i].Direction:=pdInput;
bal_Q.Parameters.Items[i].DataType:=ftDateTime;
bal_Q.Parameters.Items[i].Value:=main_fm.begindate_DTP.DateTime;
…