![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ADOQuery [D5, Access]
Лариса © (2003-05-30 11:37:00)Добрый день, всем. Подскажите почему я не могу передать параметры в 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. Что делать?
Mc'key (2003-06-06 16:34:00) [1]Может prepare забыла сделать оттого и ен понимаит?
sniknik (2003-06-06 10:43:00) [2]SlavonDT (06.06.03 09:56)
Желательно, желательно, не путай.
у кверей q1. execsql; не возвращеет датасет, и сам вызывает ADOCommand.Execute, сначала вызвав еще какуюто процедуру. (но помню, но можете посмотреть)
никто же не делает Open.
p.s. не считайте себя самым умным, сдесь все евреи. ;о))) и почитайте чего нибудь, пригодится.
SlavonDT (2003-06-06 09:56:00) [3]Ребята, вы конечно извините, но вы гоните!
Для запроса такого вида ОБЯЗАТЕЛЬНО использование ADOCommand, а не ADOQuery, т.к. второе предполагает возврат результата, а из контекста запроса результатов быть не должно!!!!
WarLord (2003-06-06 08:52:00) [4]ну что ж... надеюсь, дальше будет лучше...
sniknik (2003-06-05 22:31:00) [5]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. (почуствуйте разницу :о)) а в общем было весело, можеш еще обращатся. :о)))
sniknik (2003-05-30 17:09:00) [6]NAlexey © (30.05.03 16:31)
догадываюсь :о). но письма до сих пор нет. так что всем умерить любопытство до понедельника... (или навсегда) :о))
NAlexey (2003-05-30 16:31:00) [7]Да кстати, если разберешся напиши... Интересно всеже.
sniknik (2003-05-30 16:29:00) [8]WarLord © (30.05.03 16:22)
нет ничего пока(в смысле письма нет), или ушло в никуда или пока в пути.
WarLord (2003-05-30 16:22:00) [9]
> sniknik © (30.05.03 15:41)
> это уже интересно... не вышлеш проект вместе с базой? надеюсь
> база у тебя небольшая, а если еще заархивировать...
ну и что там?
sniknik (2003-05-30 16:21:00) [10]Лариса (30.05.03 15:52)
чегото сорвалось :(. не получил, ну до понедельника. надеюсь перешлеш.
можно на yandex продублировать (в остальном совпадает) для гарантии.
NAlexey (2003-05-30 16:04:00) [11]Прямо треугольник какойто, извините за пошлость бермудский.
Лариса (2003-05-30 15:59:00) [12]Ладно, я ушла домой, у нас конец рабочего дня. буду добивать программку в понедельник.
Всем спасибо за советы.
Пока.
Лариса (2003-05-30 15:52:00) [13]sniknik выслала
sniknik (2003-05-30 15:41:00) [14]это уже интересно... не вышлеш проект вместе с базой? надеюсь база у тебя небольшая, а если еще заархивировать...
Лариса (2003-05-30 15:34:00) [15]sniknik стоит оно в true
Лариса (2003-05-30 15:33:00) [16]NAlexey да я уже так делала поначалу. С этого все и началось :)
sniknik (2003-05-30 15:32:00) [17]Лариса (30.05.03 15:23)
считай что меня осенило :о) (если получится)
а там ли мы ищем? если у ADOConnection1.Connected свойство прям в разработке в true поставить что будет?
Лариса (2003-05-30 15:23:00) [18]Да нигде я вас не кидаю. Я разобраться не могу, почему так, в чем проблема? :(
И я в первый раз компонентами ADO пользуюсь и не получается , что еще больше удручает.
NAlexey (2003-05-30 15:23:00) [19]>NAlexey где параметры добавлены?????
Э-э-э-...Мммм. Ну не знаю где, в ADOQuery наверное... прям жмешь на свойство Parameters(там где 3 точки) и добавляешь их. Но как уже сказал "sniknik" ParamCheck развеял наши сомнения. Так ты всеже попробуй их добавить так, прям жёстко прописать тип и значение и запустить.
sniknik (2003-05-30 15:19:00) [20]NAlexey © (30.05.03 15:06)
q1.ParamCheck:= true;
q1.SQL.Text:= "delete from tab1 where god=:pGod and mes=:pMes";
ParamCheck должен их переделать при изменении строки запроса.