powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Ключ поиска не найден ни в одной записи
21 сообщений из 21, страница 1 из 1
Ключ поиска не найден ни в одной записи
    #37094471
Tigera
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте. Есть приложение написанное на Delphi с использованием DAO компонент. На одной из баз Access, с которой работает приложение появляется ошибка "Ключ поиска не найден ни в одной записи" при попытке записи в одну из таблиц БД. С чем может быть связана эта ошибка? Как ее побороть? Что может быть причиной: приложение или Access, при том что проблема только на одной базе на одной таблице?
...
Рейтинг: 0 / 0
Ключ поиска не найден ни в одной записи
    #37094501
ё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ё
Гость
TigeraЗдравствуйте. Есть приложение написанное на Delphi с использованием DAO компонент. На одной из баз Access, с которой работает приложение появляется ошибка "Ключ поиска не найден ни в одной записи" при попытке записи в одну из таблиц БД. С чем может быть связана эта ошибка? Как ее побороть? Что может быть причиной: приложение или Access, при том что проблема только на одной базе на одной таблице?
изменяете через рекордсет ?
изменяете ключевое поле ?
...
Рейтинг: 0 / 0
Ключ поиска не найден ни в одной записи
    #37094504
Tigera
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да, изменяю через рекордсет.
ключевое поле не трогаю. В нем записан Id строки, по нему просто идет отбор нужной записи для изменения.
...
Рейтинг: 0 / 0
Ключ поиска не найден ни в одной записи
    #37094530
ё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ё
Гость
Tigeraда, изменяю через рекордсет.
ключевое поле не трогаю. В нем записан Id строки, по нему просто идет отбор нужной записи для изменения.
прилож. - многопользов. ?
может запись удалена к тому времени ?
...
Рейтинг: 0 / 0
Ключ поиска не найден ни в одной записи
    #37094549
Tigera
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да, приложение многопользовательское.
Запись не удалена, это проверено на 100%. Он отбирает запись по значению ключевого поля, но вот обновить ее почему-то не потом может. Время меджу отбором и попыткой обновлдения проходит не так уж и много, это около 3 строк кода с установкой новых значений полей.
Т.е. происходит примерно следующее(псевдокод):

CreateRecordset("select * from table where id=1") - тут все отобрали, получили одну выбранную запись
SetField("data1","1") - новое значение указали для колонки data1
SetField("data2","2") - новое значение указали для колонки data2
UpdateRecordset() - тут получили ошибку про ключ.
...
Рейтинг: 0 / 0
Ключ поиска не найден ни в одной записи
    #37094719
ё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ё
Гость
Tigera...
Т.е. происходит примерно следующее(псевдокод):

CreateRecordset("select * from table where id=1") - тут все отобрали, получили одну выбранную запись
SetField("data1","1") - новое значение указали для колонки data1
SetField("data2","2") - новое значение указали для колонки data2
UpdateRecordset() - тут получили ошибку про ключ.
вы бы псевдокодом не напрягались - выложили бы реальный фрагмент

но, навсякий, - в псевдокоде незаметил EditRecordset()
...
Рейтинг: 0 / 0
Ключ поиска не найден ни в одной записи
    #37094867
Tigera
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
просто не хотала засорять форум по Access дельфячим кодом.
вот реальный код:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
loc_TableCalls.SQL.Text:='select * from Calls where CallId='+IntToStr(loc_callId);
 try 
  loc_TableCalls.Open;

   if  loc_TableCalls.RecordCount<= 0   then 
   begin 
    WriteFileLog( 0 ,'Запись с CallId='+IntToStr(loc_callId)+' не найдена','TCallsClass.Save');
    Exit;
   end ;

  loc_TableCalls.Edit;
  loc_TableCalls.FieldByName('PhoneNumber').Value:=loc_PhoneNumber;
  loc_TableCalls.FieldByName('Result').Value:=loc_Result;
  loc_TableCalls.Post;
  loc_TableCalls.Close;
 except 
  on E:Exception  do   WriteFileLog(GetLastError,E.Message,'TCallsClass.Save(error)');
 end ;

собсвенно спотыкается на loc_TableCalls.Post;
...
Рейтинг: 0 / 0
Ключ поиска не найден ни в одной записи
    #37095042
ё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ё
Гость
Tigera,

у таблицы Calls - вообще ключ-то есть ?
НЕ поле с автоинкриментом, а ключевое(ые) поле

что за компонент loc_TableCalls ?
...
Рейтинг: 0 / 0
Ключ поиска не найден ни в одной записи
    #37095117
Tigera
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
конечно есть. Такая база не одна. Их много подобных, и со всеми приложение ведет себя нормально, проблем не возникат. А вот с этой такая беда.
Проблема вылазит не постоянно. Ориентировочно на 10 нормально обновленных записей из этой таблицы приходится одна с такой проблемой.

loc_TableCalls это объект TDAOQuery;
...
Рейтинг: 0 / 0
Ключ поиска не найден ни в одной записи
    #37095356
MAYAKOV_SV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tigeraпоявляется ошибка "Ключ поиска не найден ни в одной записи" при попытке записи в одну из таблиц БД. С чем может быть связана эта ошибка?
...
Проблема вылазит не постоянно. Ориентировочно на 10 нормально обновленных записей из этой таблицы приходится одна с такой проблемой.
Я помню вы год назад обращались с похожими вопросами.
Может быть дело все в том же - в повреждении базы при многопользовательской работе?
...
Рейтинг: 0 / 0
Ключ поиска не найден ни в одной записи
    #37095392
Tigera
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
повреждение может быть, покрайней мере у меня такое же ощущение. Вопрос в том, как его починить. Из того что успела уже почитать по этому поводу, вероятно проблемы с индексами. Но вот как эти индексы поправить не знаю. Говорят функция "Сжать и востановить БД..." не помогает при такой проблеме, но я не поверила и попробовала сделать. И вот ведь, действительно НЕ помогло. Проблема осталась. А других способов "борьбы" с Access я не знаю.
Ну и плюс может кто подскажет куда еще покопать, вдруг я чего не знаю или сама где накосячила :-)
...
Рейтинг: 0 / 0
Ключ поиска не найден ни в одной записи
    #37095464
MAYAKOV_SV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TigeraНу и плюс может кто подскажет куда еще покопать, вдруг я чего не знаю или сама где накосячила :-)
Помните прошлый раз были ошибки с блокировками записей.
Вы решили эту проблему?
Судя по прошлым обсуждением, проблема в том, что вы как-то по-особенному работаете с Access - и у него шарики за ролики из-за этого заезжают...
Поиск по ошибке "Ключ поиска не найден ни в одной записи" привел меня к такой информации, что это повреждается база. Тем более ключ-то у Вас есть, как Вы утверждаете.
...
Рейтинг: 0 / 0
Ключ поиска не найден ни в одной записи
    #37095483
Tigera
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MAYAKOV_SV Помните прошлый раз были ошибки с блокировками записей.
Вы решили эту проблему?
Да, мы просто перешли с компонентов ADO, на DAO. И забыли про эту проблему как про страшный сон :-)

MAYAKOV_SV Судя по прошлым обсуждением, проблема в том, что вы как-то по-особенному работаете с Access - и у него шарики за ролики из-за этого заезжают...
Поиск по ошибке "Ключ поиска не найден ни в одной записи" привел меня к такой информации, что это повреждается база. Тем более ключ-то у Вас есть, как Вы утверждаете.

Хорошо, остановимся на вариате что повреждается база. Вопрос как ее починить? "Сжать и восстановить БД..." как я уже сказала не помогает.
...
Рейтинг: 0 / 0
Ключ поиска не найден ни в одной записи
    #37095549
MAYAKOV_SV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TigeraДа, мы просто перешли с компонентов ADO, на DAO. И забыли про эту проблему как про страшный сон :-)

Я очень рад.
TigeraХорошо, остановимся на вариате что повреждается база. Вопрос как ее починить? "Сжать и восстановить БД..." как я уже сказала не помогает.
В конце года мне дали задание - писать прогу.
Приложение получилось многопоточное.
У меня были всякие проблемы - портился BLOB в DBF, и еще какие-то.
Все таки знаний меня где-то тоже бывает немного. Не знал как быть.
Решил их при помощи критических секций - на операции с базой повесил блокировку на уровне кода DELPHI:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
m_cs := TCriticalSection.Create;  // Критическая секция 
...
loc_TableCalls.SQL.Text:='select * from Calls where CallId='+IntToStr(loc_callId);
m_cs.Enter;
 try 
  try 
   loc_TableCalls.Open;

    if  loc_TableCalls.RecordCount<= 0   then 
    begin 
     WriteFileLog( 0 ,'Запись с CallId='+IntToStr(loc_callId)+' не найдена','TCallsClass.Save');
     Exit;
    end ;

   loc_TableCalls.Edit;
   loc_TableCalls.FieldByName('PhoneNumber').Value:=loc_PhoneNumber;
   loc_TableCalls.FieldByName('Result').Value:=loc_Result;
   loc_TableCalls.Post;
   loc_TableCalls.Close;
  except 
  on E:Exception  do   WriteFileLog(GetLastError,E.Message,'TCallsClass.Save(error)');
  end ;
 finally 
 m_cs.Leave;
 end ;

Смысл этого в том, что разных потоков данная операция будет не будет выполнятся одновременно.
Если это не поможет, можно побробовать блокировки делать на все операции для данной таблицы или даже для всей базы.
Ну это эксперимент провести можно.
Хотя не факт, что это то, что Вам нужно...
А два коннекта в одной программе остались?
...
Рейтинг: 0 / 0
Ключ поиска не найден ни в одной записи
    #37095582
Tigera
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MAYAKOV_SVХотя не факт, что это то, что Вам нужно...
А два коннекта в одной программе остались?
Нет, он теперь один.

Блокировки это хорошо конечно, но что-то пока не тянет лезть в код, ради одной "сумашедшей" базы. Да и клиент далеко и на нем экспериментровать с ПО не совсевсем корректно из определенных соображений(не прямой заказчик).
Попробую еще с Access повоевать, если знаете действенные средства для этого, буду рада попробовать сделать.
...
Рейтинг: 0 / 0
Ключ поиска не найден ни в одной записи
    #37095607
ё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ё
Гость
Tigera...
Но вот как эти индексы поправить не знаю. Говорят функция "Сжать и востановить БД..." не помогает при такой проблеме, но я не поверила и попробовала сделать. И вот ведь, действительно НЕ помогло. Проблема осталась. А других способов "борьбы" с Access я не знаю.

импорт в новую пустую БД ещё попробуйте
...
Рейтинг: 0 / 0
Ключ поиска не найден ни в одной записи
    #37095635
MAYAKOV_SV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ёимпорт в новую пустую БД ещё попробуйте
Да, хороший совет. В первую очередь это лучше сделать.
Если это не поможет, значит сама программа базу повреждает, как мне кажется.
...
Рейтинг: 0 / 0
Ключ поиска не найден ни в одной записи
    #37103759
Tigera
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
наконец дождалась ответ от клиента. Они попробовали импорт в новую БД, действия не помогли. Прога может и повреждает данные, но вот где и как тогда. И как можно еще попробовать починить ключи в БД Access.
...
Рейтинг: 0 / 0
Ключ поиска не найден ни в одной записи
    #37104402
MAYAKOV_SV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TigeraИ как можно еще попробовать починить ключи в БД Access.
1) Открыть таблицу.
2) В ключевом поле убрать признак "Ключевое поле" (Желтый ключик).
3) Нажать "Сохранить"
4) Опять установить данного поле как ключевое и сохранить.

Вы писали, что это в одной базе только происходит, а что в других? Другие базы связанны с этой поврежденной?
Если нет, то Вам нужно будет как-то восстановить ее, либо в программе разбиратся. Ну там SELECT на UPDATE можно поменять попробовать, к примеру.
А лучше всего запросить у них базу, если возможно, и самой потестировать/поремонтировать - так вы быстрее разберетесь.

Лучше, конечно, заранее тестировать все, перед опытной эксплуатацией. Мои пользователи, бывают в шоке иногда и начинают паниковать, когда в моих программах появляются неожиданно ошибки. Да и начальство бывает этим недовольно. Теперь стараюсь уделять больше внимание тестированию. Ну это так, лирическое отступление.
...
Рейтинг: 0 / 0
Ключ поиска не найден ни в одной записи
    #37110542
Tigera
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо всем большое за помощь! Проблема найдена в несколько кривоватых настройках прав доступа к БД, а так же не совсем правильных действиях пользователя.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Ключ поиска не найден ни в одной записи
    #39600410
Фотография Rikozenit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TigeraСпасибо всем большое за помощь! Проблема найдена в несколько кривоватых настройках прав доступа к БД, а так же не совсем правильных действиях пользователя.
А расскажите поподробнее, плиз!!
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Ключ поиска не найден ни в одной записи
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]