Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.03.2010, 13:10   #1
Lotus_erlan
Новичок
Джуниор
 
Регистрация: 11.03.2010
Сообщений: 4
Радость Недостаточные или не полные сведения о ключе

Здраствуйте! У меня возникла проблема при выполнении кода
Код:
procedure TForm1.FindData(ii, n: integer);
var i,j: integer;
begin
ADOQuery2.First;

for i:=1 to ADOQuery2.RecordCount do
      begin
          ADOQuery1.First;

          for j:=1 to ADOQuery1.RecordCount do
           begin

                    if ((ADOQuery2.FieldByName('kod').AsString=ADOQuery1.FieldByName('kod').AsString) and (ADOQuery2.FieldByName('name').AsString='')) then
                         begin
                         ADOQuery2.Edit;
                         ADOQuery2.FieldByName('name').AsString:=ADOQuery1.FieldByName('name').AsString;
                         ADOQuery2.FieldByName('form').AsString:=ADOQuery1.FieldByName('form').AsString;
                         ADOQuery2.FieldByName('ed_izm').AsString:=ADOQuery1.FieldByName('ed_izm').AsString;
                         ADOQuery2.FieldByName('sred').AsString:=ADOQuery1.FieldByName('sred').AsString;
                         ADOQuery2.Post;
                         //ADOQuery2.Close;
                         end;
           //ADOQuery2.Open;
           ADOQuery1.Next;
           end;
           ADOQuery2.Next;
      end;

end;
Вылетает ошибка Недостаточные или не полные сведения о ключевом поле. Обновления влияет на слишком большое число строк

Понимаю что это ошибка вылетает от того что есть повторяющиеся значения в поле kod, но как этого можно избежать.

Задача стоит так:

Есть справочник в Excel:
kod | name | form | ed_izm | sred |
09289 |name1 |Триквилар® |таблетка |39,73 |
05471 |name2 |Аджисепт |стрип |5,76 |
03219 |name3 |Инфлюцид |шт. |10,44 |
05507 |name4 |Тонзилотрен |таблетка |13,14 |
11718 |name5 |Циннабсин |таблетка |13,6 |
11005 |name6 |Бонджигар |таблетка |38,21 |
06040 |name7 |Гинолакт |таблетка |10,07 |
03834 |name8 |Инсти |таблетка |14,25 |

И есть еще один файл в Excel
kod | name | form | ed_izm | sred |
09289 |name1 | | | |
05471 |name2 | | | |
03219 |name3 | | | |
05507 |name4 | | | |
05507 |name5 | | | |
05507 |name6 | | | |
06040 |name7 | | | |
06040 |name8 | | | |

Так вот нужно заполнить второй файл взяв значения полей из справочника, но как только программа находит совподение в поле KOD, вылетает ошибка. Но удалять совподающие значение в поле KOD категорически нельзя! Подскажите как решить данную задачу?
Lotus_erlan вне форума Ответить с цитированием
Старый 12.03.2010, 14:41   #2
Kotofff
Участник клуба
 
Аватар для Kotofff
 
Регистрация: 11.01.2009
Сообщений: 1,917
По умолчанию

А ключевое поле назначено в таблицах в которых ведешь работу ?
"Заряженному танку в дуло не смотрят" @Dekmer in WoT
Kotofff вне форума Ответить с цитированием
Старый 13.03.2010, 07:52   #3
Lotus_erlan
Новичок
Джуниор
 
Регистрация: 11.03.2010
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Kotofff Посмотреть сообщение
А ключевое поле назначено в таблицах в которых ведешь работу ?
Нет не назначено!!! Так что мне нужно сделать, если можно поподробнее?

Прекращайте ненужное цитирование предыдущих сообщений!
Рекомендую. Помимо общих правил форума есть и дополнения к ним в каждом разделе...
А кроме кнопки "Цитата" внизу есть простое окно для ввода своего сообщения.
Или маленькая правая кнопочка "Быстрый ответ" справа от кнопки "Цитата".
Попадаете туда же.
Модератор

Последний раз редактировалось mihali4; 13.03.2010 в 21:57.
Lotus_erlan вне форума Ответить с цитированием
Старый 13.03.2010, 08:19   #4
Lotus_erlan
Новичок
Джуниор
 
Регистрация: 11.03.2010
Сообщений: 4
По умолчанию

Все, спасибо разобрался!!! Решение оказалось очень простым!!! Я просто добавил в exel файл столбец ID и проставил номерацию, и программа заработала! Но только вот результат придеться ждать довольно таки приличное время, примерно час выполняеться процедура! Записей в справочнике 5000 и во втором файле 6890!!!!
Lotus_erlan вне форума Ответить с цитированием
Старый 13.03.2010, 10:00   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
вот результат придеться ждать довольно таки приличное время, примерно час выполняеться процедура! Записей в справочнике 5000 и во втором файле 6890!!!!
а позвольте поинтересоваться - таблицы в одной БД ?
Если да, то Вы выбрали КРАЙНЕ неэффективный путь!
update SQL решит эту проблему в считанные секунды(минуты)...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.03.2010, 10:43   #6
Lotus_erlan
Новичок
Джуниор
 
Регистрация: 11.03.2010
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
а позвольте поинтересоваться - таблицы в одной БД ?
Если да, то Вы выбрали КРАЙНЕ неэффективный путь!
update SQL решит эту проблему в считанные секунды(минуты)...
Нет не какой БД нет, есть только два файла в EXCEL, один использую как справочник, втрой файл мне дали чтобы я его обработал используя этот справочник!

Прекращайте ненужное цитирование предыдущих сообщений!
Рекомендую. Помимо общих правил форума есть и дополнения к ним в каждом разделе...
А кроме кнопки "Цитата" внизу есть простое окно для ввода своего сообщения.
Или маленькая правая кнопочка "Быстрый ответ" справа от кнопки "Цитата".
Попадаете туда же.
Модератор

Последний раз редактировалось mihali4; 13.03.2010 в 21:57.
Lotus_erlan вне форума Ответить с цитированием
Старый 13.03.2010, 11:20   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ясно. тогда понятно.
а тогда чем решение через формулы не устраивает?
=ВПР() в Excel решит Ваши проблемы. да и решение через VBA всё по шустрее будет...

кроме того, если в Вашем коде НЕ ПЕРЕБИРАТЬ все записи в ADOQuery1, а воспользоваться ADOQuery1.Locate, мне кажется работать будет намного быстрее...
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определение функции "полные квадраты" C++ xnise Помощь студентам 7 15.07.2011 06:29
KAV удалить информацию о ключе. jojahti Софт 5 15.01.2010 09:25
В графе найти все его четырехвершинные полные подграфы[PROLOG] Bruster Помощь студентам 1 24.12.2009 09:55
Удаление записей при внешнем ключе DrewBlin SQL, базы данных 3 27.07.2009 13:44