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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.03.2011, 23:43   #1
NieL
Форумчанин
 
Регистрация: 17.11.2008
Сообщений: 116
По умолчанию добавление в таблицу БД

Есть 2 таблицы БД

Categories (ID, Name)
Products (ID, Name, category_id)

Есть список, каждая запись которого является Categories.ID:

11
36
17
57
21
88
..

Задача: пройти по списку, проверя существование каждой записи в таблице Gategories, если существует добавить в таблицу Products новую запись назначив полю categories_id значение из списка. В списке около 15 000 записей, как сделать проверку и добавление максимально быстрым. Вот мой код, но выполняется все долго.

Код:
procedure TForm2.Add(categories_ids: TStrings);
var
 field_category_id: TField;
 I, category_id: Integer;
begin
 field_category_id := tbl_products.FindByName('category_id');
 for I := 0 to categories_ids.Count - 1 do
 begin
   category_id := categories_ids[I];
   // проверяем существование category_id в таблице tbl_categories
   if tbl_categories.FindKey([category_id]) then
   begin
     tbl_products.Append;
     try
       field_category_id.AsInteger := category_id;
       tbl_products.Post;
     except
       tbl_products.Cancel;
     end;
   end;
 end;
end;
Еще пытался делать через запросы (проверка (SELECT) и добавление (INSERT)) так вообще, в секунду по 2-3 записи добавляется.
NieL вне форума Ответить с цитированием
Старый 16.03.2011, 00:09   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

1. А поля ID и Name в Products вы не заполняете?
2. А может легче список загнать как временную таблицу в базу и все добавление одним INSERT-ом реализовать?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 16.03.2011, 00:15   #3
NieL
Форумчанин
 
Регистрация: 17.11.2008
Сообщений: 116
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
1. А поля ID и Name в Products вы не заполняете?
2. А может легче список загнать как временную таблицу в базу и все добавление одним INSERT-ом реализовать?
ID - автоинкрементное поле
Name - для тестов пока не критично

можете привести пример, не совсем понятно, с временной таблицей
NieL вне форума Ответить с цитированием
Старый 16.03.2011, 00:25   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Я не имею понятия в какую базу вы пишите. Под временной я имел ввиду таблицу для разового использования, которую потом удаляете. Наполнить ее можно как программно, так и возможно средствами вашей SQL-базы (если таковые имеются)
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Добавление данных в таблицу slai SQL, базы данных 1 13.12.2010 16:33
Добавление записи в таблицу chinock Microsoft Office Access 2 24.09.2010 14:39
Добавление записи в таблицу Galiska БД в Delphi 3 25.05.2010 08:07
добавление записей в таблицу MDmitry PHP 3 27.12.2009 11:08
Добавление даты в таблицу smoky Microsoft Office Access 5 24.11.2008 12:56