Главная страница
    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]

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


 
NAlexey   (2003-05-30 16:04) [41]

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


 
sniknik   (2003-05-30 16:21) [42]

Лариса (30.05.03 15:52)
чегото сорвалось :(. не получил, ну до понедельника. надеюсь перешлеш.

можно на yandex продублировать (в остальном совпадает) для гарантии.


 
WarLord   (2003-05-30 16:22) [43]


> sniknik © (30.05.03 15:41)
> это уже интересно... не вышлеш проект вместе с базой? надеюсь
> база у тебя небольшая, а если еще заархивировать...

ну и что там?


 
sniknik   (2003-05-30 16:29) [44]

WarLord © (30.05.03 16:22)
нет ничего пока(в смысле письма нет), или ушло в никуда или пока в пути.


 
NAlexey   (2003-05-30 16:31) [45]

Да кстати, если разберешся напиши... Интересно всеже.


 
sniknik   (2003-05-30 17:09) [46]

NAlexey © (30.05.03 16:31)
догадываюсь :о). но письма до сих пор нет. так что всем умерить любопытство до понедельника... (или навсегда) :о))


 
sniknik   (2003-06-05 22:31) [47]

Hi всем.
подымаю ветку ради всех кого это интересовало, как наверное догадались уже, до меня дошло письмо... ну не то чтобы я его несколько дней перечитывал... нет, только что получил. ;о))

ну и вот что там.
поля в базе
год,месяц,собственник,пользователи,.... все поля на русском.
запрос
q1.SQL.Text:= "delete from tab1 where god=:pGod and mes=:pMes";
после замены на
q1.SQL.Text:= "delete from tab1 where [год]=:pGod and [месяц]=:pMes";
ошибка с количеством параметров исчезла. (какое чудо! ;о)

но начала выдавать "невозможно удаление данных из указанных таблиц" (типа база ридонли)
используемая строка
Provider=MSDASQL.1;Password="";Persist Security Info=True;User ID=bypakbayev_zh;Data Source=База данных MS Access;Mode=ReadWrite;Extended Properties="DSN=База данных MS Access;DBQ=D:\vag;DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;UID=admin;";Initial Catalog=D:\vag
причем юзеров нет, и системная база не используется, и база указана DBQ=D:\vag заметьте неправильно (нужно d:\vad.mdb) т.е. строка базу не определяет, работает исключительно за счет указанной в ODBC DSN (и не совсем правильно).

после замены на (раз уж ODBC)
Provider=MSDASQL.1;Persist Security Info=False;Mode=ReadWrite;Extended Properties="DRIVER={Microsoft Access Driver (*.mdb)};DBQ=D:\vag.mdb;DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;UID=admin;"
запрос заработал...

но лутше бы всетаки использовать Jet
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\vag.mdb;Persist Security Info=False
то же самое.
+ некоторые мелочи, как то - поля на английском, компоненты для работы с базой ADOxxxxx хранить в датамодуле а не на выделенной для этого форме. вместо ADOQuery/Table использовать ADODataSet/ADOCommand. В таблицу добавить ключевое поле. И т.д. (то что я еше упустил, ненамерено).

:о)) все.
p.s. если базу сжать (в аксесс) то вместо 29мег она будет меньше 4мег. потом "exe" с исходниками никогда не посылай это -605кб. -*.dcu(хотя и мелочь) итого в архиве не 628кб а 210. (почуствуйте разницу :о)) а в общем было весело, можеш еще обращатся. :о)))


 
WarLord   (2003-06-06 08:52) [48]

ну что ж... надеюсь, дальше будет лучше...


 
SlavonDT   (2003-06-06 09:56) [49]

Ребята, вы конечно извините, но вы гоните!
Для запроса такого вида ОБЯЗАТЕЛЬНО использование ADOCommand, а не ADOQuery, т.к. второе предполагает возврат результата, а из контекста запроса результатов быть не должно!!!!


 
sniknik   (2003-06-06 10:43) [50]

SlavonDT (06.06.03 09:56)
Желательно, желательно, не путай.
у кверей q1. execsql; не возвращеет датасет, и сам вызывает ADOCommand.Execute, сначала вызвав еще какуюто процедуру. (но помню, но можете посмотреть)

никто же не делает Open.

p.s. не считайте себя самым умным, сдесь все евреи. ;о))) и почитайте чего нибудь, пригодится.


 
Mc'key   (2003-06-06 16:34) [51]

Может prepare забыла сделать оттого и ен понимаит?



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

Форум: "Базы";
Текущий архив: 2003.06.30;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.57 MB
Время: 0.007 c
14-97814
Sergey13
2003-06-11 08:52
2003.06.30
Вопрос к женатым и с детьми.


11-97559
VadimSmirnoff
2002-10-15 18:35
2003.06.30
Application.Handle .Handle


14-97846
Nik8.
2003-06-12 22:57
2003.06.30
кто знает где здесь ошибка


11-97567
Alexander
2002-08-19 10:02
2003.06.30
Несколько вопросов и предложений ...


14-97869
Дмитрий К.К.
2003-06-13 06:36
2003.06.30
Именинники 13 июня





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский