Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.06.30;
Скачать: CL | DM;

Вниз

ADOQuery   Найти похожие ветки 

 
Лариса   (2003-05-30 11:37) [0]

Добрый день, всем. Подскажите почему я не могу передать параметры в Query. Это мой первый опыт работы с данным компонентом и почем утакая проблема понять не могу. Я с помощью компонента ADOQuery пытаюсь удалить данные по условию из таблицы в Аccess. В самом Query написано:
delete from tab1
where god=:god and mes=:mes
а в программе пишу:
q1.close;
q1.parameters[0].value:=2000;
q1.parameters[1].value:="01";
q1.execsql;
После запуска программы выдается ошибка, что слишком мало параметров нужно 2. Что делать?


 
sniknik ©   (2003-05-30 11:46) [1]

q1.Params[0].Value:= 2000;


 
Лариса   (2003-05-30 11:51) [2]

Не-а, так не проходит. Выдает ошибку: Undeklared identifier "params"


 
sniknik ©   (2003-05-30 11:54) [3]

sorry глюк в ответе. сбило
> В самом Query написано:


 
Max Zyuzin ©   (2003-05-30 11:56) [4]

>Лариса (30.05.03 11:51)
А если как в обчном Query обратится по имени?
q1.ParamByName("god").AsInteger:=2000;
q1.ParamByName("mes").AsString:="01";
Ну в зависимоти от типов полей As...


 
Лариса   (2003-05-30 12:00) [5]

Я уже пробовала обращаться именно по имени. С ADO так не проходит. У него нет, чтобы можно было либо по имени, либо по номеру, только по номеру и все.


 
sniknik ©   (2003-05-30 12:02) [6]

а на какой команде ругается? так вроде все нормально выглядит, ну может еще тип явно указать, не помешает
q1.parameters[0].DataType:= ftInteger;
q1.parameters[0].value:=2000;
q1.parameters[1].DataType:= ftString;
q1.parameters[1].value:="01";

попробуй.


 
sniknik ©   (2003-05-30 12:06) [7]

Лариса (30.05.03 12:00)
>Я уже пробовала обращаться именно по имени. С ADO так не проходит. У него нет, чтобы можно было либо по имени, либо по номеру, только по номеру и все.

есть
q1.Parameters.ParamByName().Value
нет AsInteger/string ....


 
Лариса   (2003-05-30 13:56) [8]

Извините, по по работе вызывали.
Нет такого, чтобы можно было задать либо Parambyname или Params. Только Parameters[0].


 
sniknik ©   (2003-05-30 14:05) [9]

TParameters.ParamByName
TParameters See also
Locates the parameter with a given name.
function ParamByName(const Value: WideString): TParameter;

поспорим? а за Params я уже извинился он тоже есть но у TQuery, незачем его здесь вспоминать.


 
Лариса   (2003-05-30 14:12) [10]

попробовала с ParamByName-прошло, но ошибку так и выдало. У меня проблема не в том, что я не могу написать как параметры передать.а в том, что он их не принимает и все время мне выдает ошибку, что то слишком мало параметров, то слишком много.


 
WarLord ©   (2003-05-30 14:16) [11]


> delete from tab1
> where god=:god and mes=:mes
> а в программе пишу:
> q1.close;
> q1.parameters[0].value:=2000;
> q1.parameters[1].value:="01";
> q1.execsql;

должно работать
SQL нигде не переопределяется?


 
Ann ©   (2003-05-30 14:20) [12]

Ларис, а какую точно ошибку выдает?


 
Лариса   (2003-05-30 14:21) [13]

Нет, я только начала писать программку и там ничего еще кроме этого нет. Самое интересное, что когда выдется ошибка, то иногда пишется: слишком мало параметров, нужно 2, а иногда нужно 4.


 
NAlexey ©   (2003-05-30 14:24) [14]

Parameters.FindParam("YourName").Value


 
NAlexey ©   (2003-05-30 14:27) [15]

>слишком мало параметров, нужно 2, а иногда нужно 4.
Ты дорогая Лариса нами не доконца с нами честнА :) Такого не может быть, потому что быть такого не может. Приводи полный текст запроса и выполняющегося кода.


 
WarLord ©   (2003-05-30 14:30) [16]


> Лариса (30.05.03 14:21)

самый интересный вопрос: ADOQuery к ADOConnection подключен? ADOConnection активен?


 
Лариса   (2003-05-30 14:32) [17]

Слушайте, издевательство какое-то. :) Я уже все пеерпробовала, а итог такой же.


 
WarLord ©   (2003-05-30 14:34) [18]


> Лариса (30.05.03 14:32)
> Слушайте, издевательство какое-то. :) Я уже все пеерпробовала,
> а итог такой же.

чудес не бывает!


 
Лариса   (2003-05-30 14:37) [19]

NAlexey честна я с вами :) Я что в начале написла с тех пор ничего не изменилось :) Только передачу параметров меняла когда кто-нибудь что-то советовал. В итоге - ничего. Та же ошибка.

WarLord ADOQuery к ADOConnection подключен и он активен.

p.s. 1 параметр передает нормально, на 2 затыкается


 
sniknik ©   (2003-05-30 14:37) [20]

чем дальше тем больше ощущение что самое интересное за кадром...

напиши так, только точно,
q1.close;
q1.ParamCheck:= true;
q1.SQL.Text:= "delete from tab1 where god=:pGod and mes=:pMes";
q1.parameters[0].DataType:= ftInteger;
q1.parameters[0].value:= 2000;
q1.parameters[1].DataType:= ftString;
q1.parameters[1].value:= "01";
q1.execsql;
что дает в результате? и где (строка ошибки).


 
NAlexey ©   (2003-05-30 14:38) [21]

>Cлушайте, издевательство какое-то. :) Я уже все пеерпробовала, а итог такой же.
Предположение: не есть ли у тебя где триггерок или процедура какая которая срабатывает на удаление из этой таблицы?


 
NAlexey ©   (2003-05-30 14:42) [22]

>Предположение
Ах да, чтоэто я, у тебя дело до запуска даже не доходит...


 
Лариса   (2003-05-30 14:43) [23]

sniknik прям скопировала в свою программу. В итоге на строках:q1.parameters[0].DataType:= ftInteger; и q1.parameters[1].DataType:= ftString; ошибка Undeklared identifier ftInteger и ftString;
если эти строки забить, то в итоге та же ошибка с парметрами только теперь ему мало и надо 4 :))))



 
sniknik ©   (2003-05-30 14:45) [24]

Лариса (30.05.03 14:43)
модуль DB в uses.


 
Лариса   (2003-05-30 14:52) [25]

sniknik додавила, теперь ошибок на строки q1.parameters[0].DataType:= ftInteger; и q1.parameters[1].DataType:= ftString; не выдает. Но ошибка по поводу параметров осталась.


 
sniknik ©   (2003-05-30 15:03) [26]

бред.
ну ладно, код правильный, теперь давай со свойствами компонента разбиратся.
сделай все по умолчанию а лутше добавь новый и нечего не меняй кроме Connection. а то может у тебя там фильтры или связи какие. и сделай то же но с q 2. ???


 
NAlexey ©   (2003-05-30 15:06) [27]

Да там наверное в DesignTime добавлено параметров скорее всего.


 
Лариса   (2003-05-30 15:11) [28]

Попробовала. Ошибка опять-таки на строке q2.execsql; Пишет: "[Microsoft][Драйвер ODBC Microsoft Access] Слишком мало параметров.Требуется 4."


 
Лариса   (2003-05-30 15:13) [29]

NAlexey где параметры добавлены?????


 
Zz_   (2003-05-30 15:14) [30]

А может попробовать руками ?

q1.parameters.Clear;
q1.parameters.CreateParameter(...);


 
NAlexey ©   (2003-05-30 15:18) [31]

Гдето ты нас кидаешь...
Предполагаемые действия:
1) Создать эти параметры в DesignTime, принудительно присвоить им тип и значение потом запустить и смотреть что будет.
2)Попробывать написать так:
with TADOQuery.Create(nil) do
Connection := YourADOConnection;
SQL.Text := Format("delete from tab1 where god = %d and mes = %s", [1, "Blah-Blah"]);
try
ExecSQL;
finally
Free;
end;
end;
3)Сообщить о результатах.


 
sniknik ©   (2003-05-30 15:19) [32]

NAlexey © (30.05.03 15:06)
q1.ParamCheck:= true;
q1.SQL.Text:= "delete from tab1 where god=:pGod and mes=:pMes";

ParamCheck должен их переделать при изменении строки запроса.


 
Лариса   (2003-05-30 15:23) [33]

Да нигде я вас не кидаю. Я разобраться не могу, почему так, в чем проблема? :(
И я в первый раз компонентами ADO пользуюсь и не получается , что еще больше удручает.


 
NAlexey ©   (2003-05-30 15:23) [34]

>NAlexey где параметры добавлены?????
Э-э-э-...Мммм. Ну не знаю где, в ADOQuery наверное... прям жмешь на свойство Parameters(там где 3 точки) и добавляешь их. Но как уже сказал "sniknik" ParamCheck развеял наши сомнения. Так ты всеже попробуй их добавить так, прям жёстко прописать тип и значение и запустить.


 
sniknik ©   (2003-05-30 15:32) [35]

Лариса (30.05.03 15:23)
считай что меня осенило :о) (если получится)
а там ли мы ищем? если у ADOConnection1.Connected свойство прям в разработке в true поставить что будет?


 
Лариса   (2003-05-30 15:33) [36]

NAlexey да я уже так делала поначалу. С этого все и началось :)


 
Лариса   (2003-05-30 15:34) [37]

sniknik стоит оно в true


 
sniknik ©   (2003-05-30 15:41) [38]

это уже интересно... не вышлеш проект вместе с базой? надеюсь база у тебя небольшая, а если еще заархивировать...


 
Лариса   (2003-05-30 15:52) [39]

sniknik выслала


 
Лариса   (2003-05-30 15:59) [40]

Ладно, я ушла домой, у нас конец рабочего дня. буду добивать программку в понедельник.
Всем спасибо за советы.
Пока.



Страницы: 1 2 вся ветка

Текущий архив: 2003.06.30;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.024 c
14-97810
Johnny Smith
2003-06-11 12:43
2003.06.30
Трахеотомия непрофессионалом


6-97776
Nesterovsky
2003-04-23 23:04
2003.06.30
Как можно отобразить .eml файл


1-97720
QUE
2003-06-18 14:00
2003.06.30
Как избавиться от пунктирных линий при отрисовке ячеек StringGrid


1-97716
Zerg5
2003-06-18 13:21
2003.06.30
Время создания файла в виде MMDD : String


3-97546
Alexey
2003-06-06 18:20
2003.06.30
Индексация