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

Вниз

Внутренняя ошибка программирования объектов (Access)   Найти похожие ветки 

 
FH   (2006-02-27 17:03) [0]

работаю с mdb через ADO. делаю несколько селектов. Из под "Администраторов" все работает на ура. Из под остальных пользователей - возникают косяки: один селект 315 записей выполняется около 10 секунд, при чем приложение загружает проц на 100 процентов. второй селект не выполняется вообще, возвращает ошибку ODBC "Внутренняя ошибка программирования объектов". Третий выполняется без проблем. Может, кто сталкивался с подобным? WinXP SP2, mdac 2.81


 
FH   (2006-02-27 17:13) [1]

добавлю, что пользовал оба варианта, Jet и ODBC. Ничего не изменилось.


 
FH   (2006-02-27 17:26) [2]

еще добавлю, что Jet 3.51 не получается использовать, говорит, что формат базы не распознан, независимо от того, в каком формате база, Access 97, 2000 или 2003. работает только Jet 4.0


 
msguns ©   (2006-02-27 17:33) [3]

Если работает через 4, зачем дергать старые версии джета ?

Что именно не работает (текст запроса)


 
FH   (2006-02-27 17:42) [4]

procedure TMovieDetailesForm.GetMovie(id : integer);
begin
 dm.ds1.CommandText := "select stars.id, stars.name " +
                       "from stars inner join m_s on stars.id = m_s.s_id " +
                       "where m_s.m_id = " + IntToStr(id);
 try
   dm.ds1.Open;
 except
   on e : Exception do begin
     ShowMessage(e.Message);
     Exit;
   end;
 end;
   if dm.ds1.Recordset.RecordCount > 0 then begin
     dm.ds1.Recordset.MoveFirst;
     while not dm.ds1.Recordset.EOF do begin
       lbStars.Items.Add(dm.ds1.Recordset.Fields.Item["name"].Value);
       dm.ds1.Recordset.MoveNext;
     end;
   end;
 dm.ds1.Close;

 dm.ds1.CommandText := "select movies.id, movies.name as mname, movies.name2 as mname2, disks.id as did, disks.name as dname " +
                       "from (movies inner join disks on movies.disk_id = disks.id) inner join dtypes on disks.media = dtypes.id " +
                       "where movies.id = " + IntToStr(id);
 dm.ds1.Open;
 if dm.ds1.Recordset.RecordCount > 0 then begin
   dm.ds1.Recordset.MoveFirst;
   edId.Text := IntToStr(dm.ds1.Recordset.Fields.Item["id"].Value);
   edName.Text := VarToStr(dm.ds1.Recordset.Fields.Item["mname"].Value);
   edName2.Text := dm.ds1.Recordset.Fields.Item["mname2"].Value;
   edDiskId.Text := IntToStr(dm.ds1.Recordset.Fields.Item["did"].Value);
   edDiskName.Text := VarToStr(dm.ds1.Recordset.Fields.Item["dname"].Value);
 end;
 dm.ds1.Close;
end;

Вот код.
dm - это видимый из формы DataModule
ds1 - TADODataSet

Не работает первый запрос. Второй работает(если поменять их местами)


 
FH   (2006-02-27 17:45) [5]

Еще раз уточняю, что этот код не работает под пользователями-не администраторами, под админами работает.


 
FH   (2006-02-27 18:23) [6]

Ну помогите кто-нить!!!


 
Desdechado ©   (2006-02-27 19:12) [7]

как насчет выдачи прав на таблицы?


 
FH   (2006-02-28 20:06) [8]

ничего не крутил, все по умолчанию. Шас еще раз посмотрел, владелец всех обьектов - Admin, прога заходит в базу под ним, пароля нет.


 
FH   (2006-02-28 20:22) [9]

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


 
FH   (2006-02-28 20:32) [10]

Еще добавлю, что на 2003 винде все работает и под админиами, и под юзверями. Бред какой-то. Завтра отнесу на работу, посмотрю, что будет на других машинах. Может, у меня в винде дело? не верю.



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

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

Наверх




Память: 0.49 MB
Время: 0.055 c
3-1141100337
Vladimir M
2006-02-28 07:18
2006.04.23
Как передать массив данных в параметр SQL запроса


2-1144733806
Сергей И.
2006-04-11 09:36
2006.04.23
Работа с принтером


15-1143711509
Некто
2006-03-30 13:38
2006.04.23
Запретить пользователям играть


2-1144386533
Fostr
2006-04-07 09:08
2006.04.23
Win2000 и WinXP


15-1143744259
LordOfRock
2006-03-30 22:44
2006.04.23
Просто интересно...