Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

ADOQuery [D5, Access]


Страницы:   1 2 3

Лариса ©   (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 должен их переделать при изменении строки запроса.


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо