Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Access Violation in msjet40.dll, Не могу понять природу ошибки 
:(
    Опции темы
Norfonzor
Дата 25.7.2011, 09:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 17.10.2008

Репутация: нет
Всего: нет



Делфи, работаю с: ADOConnection, ADOCommand, DataSource, ADODataSet, DBGridEh. БД в excel.

Схема цепочки для работы с БД
user posted image

DBGridEh3 -таблица, которую заполняет пользователь
DBGridEh2- таблица служебная (пользователь ее не видит) для обработки запросов к БД

Код

//перебор по таблице DBGridEh3, (используются DataSource3, DataSet3, DBGridEh3)
while not (DBGridEh3.DataSource.DataSet.EOF) do
BEGIN

//выполняются куча запросов SELECT (используются DataSource2, DataSet2, DBGridEh2)
s:='SELECT...'
ADODataSet2.Active:=false;
ADODataSet2.CommandText:=s;
ADODataSet2.Active:=true;

...

ADOCommand.CommandText:='UPDATE ...'; //изменение полей (используются ADOCommand)
ADOCommand.execute;

...

HISTORY1(VAR_id_login,id_tovara,id_tari,'Продажа',0,kol,cena_punkta);
//ЗДЕСЬ возникает ошибка "Нарушение прав доступа в msjet40.dll"


END;


ошибка появляется при работе с 1ой процедурой:
Код

procedure HISTORY(id_sotr,id_tovara,id_tari:integer; soderjanie:string; types:integer; value,summa:real);
begin
// 0 - продажа
// 1 - вход
// 2 - выход
// 3 - приход товара
// 4 - отчет
// 5 - откат
// 6 - служебное сообщение
// 7 - открытие смены

FrmMain.ADOCommand.CommandText:='INSERT INTO история (дата, id_сотрудника,id_товара, содержание, тип, значение, id_тары, сумма) VALUES ("'+DateTimeToStr(Now)+'", '+inttostr(id_sotr)+', '+inttostr(id_tovara)+', "'+soderjanie+'", '+inttostr(types)+', '+floattostr(value)+', '+inttostr(id_tari)+', '+floattostr(summa)+');';  
FrmMain.ADOCommand.execute;
end;


ошибка появляется случайно, с одними и теми же входными данными может появится а может и нет. Причем появляется только в этой процедуре. 
В других процедурах аналогично обращаюсь к FrmMain.ADOCommand.CommandText:=ТЕКСТ

Перевод ошибки: "Нарушение прав доступа в msjet40.dll"

таблица история:


Господа подскажите пожалуйста в чем может быть ошибка! Голову уже сломал над этим вопросом.

Это сообщение отредактировал(а) Norfonzor - 25.7.2011, 10:58
PM MAIL   Вверх
Norfonzor
Дата 25.7.2011, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 17.10.2008

Репутация: нет
Всего: нет



Добавил схему БД. Может быть проблема в связях? как будто бы ошибка появляется при работе с INSERT

Это сообщение отредактировал(а) Norfonzor - 25.7.2011, 10:57
PM MAIL   Вверх
14SatanA88
Дата 25.7.2011, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 393
Регистрация: 13.5.2010

Репутация: 1
Всего: 5



http://www.restoreguard.com/p/file-Msjet40.dll.html

попробуй пропатчить саму либу
PM MAIL ICQ   Вверх
14SatanA88
Дата 25.7.2011, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 393
Регистрация: 13.5.2010

Репутация: 1
Всего: 5



Цитата(Norfonzor @  25.7.2011,  10:52 Найти цитируемый пост)
Может быть проблема в связях?


если
Цитата(Norfonzor @  25.7.2011,  09:31 Найти цитируемый пост)
ошибка появляется случайно, с одними и теми же входными данными может появится а может и нет


то не в связях дело

PM MAIL ICQ   Вверх
Norfonzor
Дата 25.7.2011, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 17.10.2008

Репутация: нет
Всего: нет



В инете читал что такая ошибка возникает если коряво написан запрос. 
Может быть ли ошибка изза того что я работаю с "while not (DBGridEh3.DataSource.DataSet.EOF) do" и оттуда обращаюсь к ADOCommand?
PM MAIL   Вверх
14SatanA88
Дата 25.7.2011, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 393
Регистрация: 13.5.2010

Репутация: 1
Всего: 5



Цитата(Norfonzor @  25.7.2011,  11:34 Найти цитируемый пост)
коряво написан запрос

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

попробуй все-таки пропатчить либу.

p.s. если ошибка выпадает на одних и тех же данных не каждый раз, то дело точно не в запросе
PM MAIL ICQ   Вверх
Norfonzor
Дата 25.7.2011, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 17.10.2008

Репутация: нет
Всего: нет



Ошибка появляется на нескольких ПК. Обновить MDAC и MS Jet 4.0 SP3 не удается тк установлены последние версии
PM MAIL   Вверх
14SatanA88
Дата 25.7.2011, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 393
Регистрация: 13.5.2010

Репутация: 1
Всего: 5



у меня больше нет идей...
PM MAIL ICQ   Вверх
Norfonzor
Дата 25.7.2011, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 17.10.2008

Репутация: нет
Всего: нет



А какими средствами вы вносите данные в БД INSERT ??
PM MAIL   Вверх
14SatanA88
Дата 25.7.2011, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 393
Регистрация: 13.5.2010

Репутация: 1
Всего: 5



Цитата(Norfonzor @  25.7.2011,  12:29 Найти цитируемый пост)
А какими средствами вы вносите данные в БД INSERT ??


AdoQuery.SQL - сюда вношу запрос
AdoQuery.ExecSQL - выполняю

Добавлено через 34 секунды
AdoCommand не пользовался.
PM MAIL ICQ   Вверх
Norfonzor
Дата 25.7.2011, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 17.10.2008

Репутация: нет
Всего: нет



AdoQuery ясно, встречался с ним, слышал что были глюки с INSERT в нем, мне рекомендовали ADOCommand=) сейчас вижу обратное

Это сообщение отредактировал(а) Norfonzor - 25.7.2011, 13:35
PM MAIL   Вверх
14SatanA88
Дата 25.7.2011, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 393
Регистрация: 13.5.2010

Репутация: 1
Всего: 5



Цитата(Norfonzor @  25.7.2011,  13:34 Найти цитируемый пост)
были глюки с INSERT

честно говоря, первый раз слышу)
да и ошибка, насколько я знаю, не связана с самим запросом.
хотя я могу и ошибаться
PM MAIL ICQ   Вверх
Norfonzor
Дата 25.7.2011, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 17.10.2008

Репутация: нет
Всего: нет



Воспользовался компонентом ADOQuery, пока ошибка не появлялась, для внесения информации достаточно ли этого:
Код

ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Text := 'INSERT INTO история (дата, id_сотрудника,id_товара, содержание, тип, значение, id_тары, сумма) VALUES ("'+DateTimeToStr(Now)+'", '+inttostr(id_sotr)+', '+inttostr(id_tovara)+', "'+soderjanie+'", '+inttostr(types)+', '+floattostr(value)+', '+inttostr(id_tari)+', '+floattostr(summa)+');';
ADOQuery2.ExecSQL;


Слышал что кто то перед началом работы пишет ADOQuery2.Active:=False;
PM MAIL   Вверх
14SatanA88
Дата 25.7.2011, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 393
Регистрация: 13.5.2010

Репутация: 1
Всего: 5



Цитата

Слышал что кто то перед началом работы пишет ADOQuery2.Active:=False;


Ну, это не повлияет в худшую сторону, все что могу сказать.

можно ADOQuery2.Close; это то же самое
PM MAIL ICQ   Вверх
Norfonzor
Дата 26.7.2011, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 17.10.2008

Репутация: нет
Всего: нет



Ошибка не появляется больше, тьфу тьфу тьфу =) Спасибо 14SatanA88
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0854 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.