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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.03.2011, 13:33   #1
g04
Новичок
Джуниор
 
Регистрация: 18.03.2011
Сообщений: 2
По умолчанию Проверка на дублирующиеся записи MySQL

Здравствуйте!
Есть 2 базы данных с одинаковой структурой. Необходимо из одной таблицы первой базы делать выборку по некоторым параметрам, а результат записывать в аналогичную таблицу локальной базы.
Кое-как написал код с использованием ZeosLib он даже заработал (см. код).
Теперь не могу придумать, как сделать проверку на дублирующиеся записи. Причём желательно сделать проверку ещё на этапе запроса ZQuery1, чтобы не гонять лишний трафик. Ну, если не во время запроса, то хотя бы перед вставкой...

В таблице 3 поля - Primary Keys.

Есть какие-нибудь идеи?

Код:
    ZQuery1.First;
    ZTable1.First;
      while not ZQuery1.Eof do
        begin
         ZTable1.Edit;
         ZTable1.Append;
          for i := 0 to ZQuery1.FieldCount - 1 do
               ZTable1.FieldByName(ZQuery1.Fields[i].FieldName).Assign(ZQuery1.Fields[i]);
          ZQuery1.Next;
          ZTable1.Next;
        end;

Последний раз редактировалось g04; 18.03.2011 в 14:17.
g04 вне форума Ответить с цитированием
Старый 18.03.2011, 13:57   #2
Dimasw
Пользователь
 
Регистрация: 12.09.2010
Сообщений: 69
По умолчанию

Код:
ZQuery1.First;
      while not ZQuery1.Eof do
        begin
         ZTable1.Insert;
          for i := 0 to ZQuery1.FieldCount - 1 do
               ZTable1.FieldByName(ZQuery1.Fields[i].FieldName).Assign(ZQuery1.Fields[i]);
          ZTable1.Post;
          ZQuery1.Next;
        end;
SELECT BEST FROM LIFE

Последний раз редактировалось Dimasw; 18.03.2011 в 14:00.
Dimasw вне форума Ответить с цитированием
Старый 18.03.2011, 14:03   #3
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Как я понял, нужно не
ZTable1.Edit;
а
ZTable1.Insert;
Это во-первых.

Во-вторых, ZTable1.Post; делать не нужно?

В третьих, изначально неправильная задумка.
Если таблицы нужно сделать идентичными, то я бы сделал
сначала DROP TABLE Table2, а потом
Код:
CREATE TABLE Table2 (SELECT * FROM Table1)
А вот этот код
Код:
 ZTable1.Edit;
          for i := 0 to ZQuery1.FieldCount - 1 do
у тебя не должен работать при правильной структуре таблицы, т.к. автоинкрементное поле не даст создать дубликат, который вполне возможен при таком подходе.
Я писал так
Код:
 for i := 0 to FieldCount - 1 do
 if Fields[i].DataType <> ftAutoInc then
_SERGEYX_ вне форума Ответить с цитированием
Старый 18.03.2011, 14:31   #4
g04
Новичок
Джуниор
 
Регистрация: 18.03.2011
Сообщений: 2
По умолчанию

Спасибо ответившим,

Прошу прощения за каламбур в заглавном сообщении: решил проблему вставки сам, появилась другая задача - решил поменять текст, но не успел до ответов

_SERGEYX_,

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

Дело в том, что полная идентичность таблиц не нужна. Во второй таблице данные будут "кусками".
g04 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как обновить столбец одной таблицы из другой таблицы kairat_tuyakbaev Microsoft Office Access 2 24.09.2010 12:46
Как обновить столбец одной таблицы из другой таблицы kairat_tuyakbaev SQL, базы данных 0 23.09.2010 23:42
Заполнение одной таблицы из другой Ольга Ларина Microsoft Office Excel 8 08.02.2010 19:10
авт. перенос данных из нескольких столбцов одной таблицы в один столбец другой таблицы A_ALL Microsoft Office Access 7 24.08.2009 21:13
Заполнение одной таблицы данными из другой melok_s Microsoft Office Excel 7 20.11.2008 03:56