Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.06.30;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.53 MB
Время: 0.008 c
14-97842
Separator
2003-06-12 05:12
2003.06.30
asm


14-97884
$ergey
2003-06-13 17:24
2003.06.30
COM-порт


14-97793
Danilka
2003-06-11 13:24
2003.06.30
хех, Вопрос НЕверящим в загробную жизнь.


3-97519
OlegL
2003-06-05 09:49
2003.06.30
lookup


1-97741
konstantinov
2003-06-17 23:19
2003.06.30
Как перехватить изменение размеров компонента?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский