Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 10.05.2011
Сообщений: 14

Пересечение таблиц

17.07.2012, 08:44. Показов 1667. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть 2 таблицы (больных) в DBGride (ADOQuery, ADOConection)импортированных из Excel-я. Нужно сделать пересечение этих таблиц по первому столбцу. И заполнить 3-тью таблицу. т.е. если больной есть и в 1 и во 2 таблице то его ужно записать в 3-ть таблицу.

Добавлено через 22 часа 51 минуту
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
procedure TForm1.btn10Click(Sender: TObject);
var
  i,k:integer;
  s,l:string;
begin
qry1.first;
while not qry1.EOF
do begin
  s:=qry1.fieldbyname('F1').Value;
  for i:=0 to qry2.RecordCount-1
  do begin
  l:=qry2.fieldbyname('F1').Value;
  qry2.next;
  if s=l then   begin
  qry3.Edit;
  qry3.Insert;
  qry3.fieldbyname('F1').Value:=l;
  qry3.Post;
  end;
   qry1.Next; qry2.first;
  end;
  end;
 
  end;


в чем ошибка?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.07.2012, 08:44
Ответы с готовыми решениями:

Соединение двух таблиц, фильтрация данных по данным из этих 2 таблиц
Помогите, пожалуйста, написать запрос SQL в Delphi 7. Есть форма, на ней кнопка и DBGrid. DBGrid привязан к таблице Table_Dislokaciua....

Пересечение таблиц
В программировании совсем новичок, цель задачи заключается вот в чем. Программа должна брать 2 .accdb файла с таблицами(все имена...

Пересечение нескольких таблиц
Здравствуйте! Пробую организовать поиск текста в файлах. По одному слову, сделал: public void GetFilesFromWord(string dbname,...

15
 Аватар для Аватар
5393 / 1465 / 513
Регистрация: 31.05.2012
Сообщений: 5,153
17.07.2012, 09:05
А еще один ADOQuery и sql-запрос? По проге - внутренний цикл зачем? Есть метод Locate. Напишите текст с выравниванием по операторным скобкам и сразу видно станет где и что не в тех местах стоит
1
0 / 0 / 0
Регистрация: 10.05.2011
Сообщений: 14
17.07.2012, 09:17  [ТС]
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
procedure TForm1.btn10Click(Sender: TObject);
var
  i,k:integer;
  s,l:string;
begin
qry1.first;
while not qry1.EOF
do begin
  s:=qry1.fieldbyname('F1').Value;
  Qry2.Locate('F1', s, [loPartialKey]);
  l:=qry2.fieldbyname('F1').Value;
  qry2.next;
  if s=l then   begin
  qry3.Edit;
  qry3.Insert;
  qry3.fieldbyname('F1').Value:=l;
  qry3.Post;
  end;
  end;
  qry1.Next; qry2.first;
  end;
  end;

так тоже не работает!
Испарвтье если не сложно. Не могу просто понять что куда добавить.
0
 Аватар для Аватар
5393 / 1465 / 513
Регистрация: 31.05.2012
Сообщений: 5,153
17.07.2012, 09:26
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
procedure TForm1.btn10Click(Sender: TObject);
begin
  qry1.first;
  while not qry1.EOF do begin
    if Qry2.Locate('F1', qry1.fieldbyname('F1').AsString, [loPartialKey]) then begin
      qry3.Insert;
      qry3.fieldbyname('F1').Value:=qry2.fieldbyname('F1').Value;
      qry3.Post;
    end;
    qry1.Next;
  end;
end;
loPartialKey - ????
1
0 / 0 / 0
Регистрация: 10.05.2011
Сообщений: 14
17.07.2012, 09:39  [ТС]
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
procedure TForm1.btn10Click(Sender: TObject);
begin
  qry1.first;
  while not qry1.EOF do begin
    if Qry2.Locate('F1', qry1.fieldbyname('F1').AsString, [loPartialKey]) then begin
      qry3.Insert;
      qry3.fieldbyname('F1').Value:=qry2.fieldbyname('F1').Value;
      qry3.Post;
    end;
    qry1.Next;
  end;
end;

нет не работает. loPartialKey - не знаю зачем он.
первая таблица
2
3
4
5
6
7
8

вторая таблицы
4
2
13
9
2
1
10

выводит
4
2
4
2
4
2
4

должно
2
2
4
0
0 / 0 / 0
Регистрация: 10.05.2011
Сообщений: 14
17.07.2012, 09:53  [ТС]
вот окно программы
Миниатюры
Пересечение таблиц  
0
 Аватар для Аватар
5393 / 1465 / 513
Регистрация: 31.05.2012
Сообщений: 5,153
17.07.2012, 10:03
Должно было вывести просто 4 и 2. Если записи повторяются в 2, тогда вложенный цикл нужен
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
procedure TForm1.btn10Click(Sender: TObject);
begin
  qry1.first;
  while not qry1.EOF do begin
    Qry2.first;
    while not Qry2.EOF do begin
      IF qry2.fieldbyname('F1').AsString=qry1.fieldbyname('F1').AsString then begin
        qry3.Insert;
        qry3.fieldbyname('F1').Value:=qry2.fieldbyname('F1').Value;
        qry3.Post;
      end;
      Qry2.Next;
    end;
    qry1.Next;
  end;
end;
0
0 / 0 / 0
Регистрация: 10.05.2011
Сообщений: 14
17.07.2012, 10:10  [ТС]
теперь вот что выводит
Миниатюры
Пересечение таблиц  
0
 Аватар для Аватар
5393 / 1465 / 513
Регистрация: 31.05.2012
Сообщений: 5,153
17.07.2012, 10:12
У тебя btn10Click несколько раз отрабатывает
1
0 / 0 / 0
Регистрация: 10.05.2011
Сообщений: 14
17.07.2012, 10:15  [ТС]
Всмысле? и как это убрать?
0
 Аватар для Аватар
5393 / 1465 / 513
Регистрация: 31.05.2012
Сообщений: 5,153
17.07.2012, 10:21
Всмысле? и как это убрать?
Раскрыть глаза на исходники
1
0 / 0 / 0
Регистрация: 10.05.2011
Сообщений: 14
17.07.2012, 13:23  [ТС]
Да норм вроде с btn-ом

Добавлено через 2 часа 51 минуту
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
procedure TForm1.btn10Click(Sender: TObject);
begin
  qry1.first;
  while not qry1.EOF do begin
    Qry2.first;
    while not Qry2.EOF do begin
      IF qry2.fieldbyname('F1').AsString=qry1.fieldbyname('F1').AsString then begin
        qry3.Insert;
        qry3.fieldbyname('F1').Value:=qry2.fieldbyname('F1').Value;
        qry3.Post;
      end;
      Qry2.Next;
    end;
    qry1.Next;
  end;
end;
еще один вопрос. Как можно ускорить это сравнение. Сравнивает где то 7 минут.

Добавлено через 3 минуты
В таблица по 1000 записей в каждом
0
 Аватар для Аватар
5393 / 1465 / 513
Регистрация: 31.05.2012
Сообщений: 5,153
17.07.2012, 13:41
Выбросить этот код и сформировать данные SQL-запросом
1
0 / 0 / 0
Регистрация: 10.05.2011
Сообщений: 14
17.07.2012, 13:48  [ТС]
ни разу не формировал SQL-запрос. Подскажите хоть начало.
0
 Аватар для Аватар
5393 / 1465 / 513
Регистрация: 31.05.2012
Сообщений: 5,153
17.07.2012, 14:48
А как же ADOQuery пользуетесь? Можно так (t1 и t2 имена таблиц соответствущие qry1 и qry2)
SQL
1
2
3
SELECT t1.F1
  FROM t1,t2
  WHERE t1.F1=t2.F1
1
0 / 0 / 0
Регистрация: 10.05.2011
Сообщений: 14
18.07.2012, 10:15  [ТС]
Че то не получается. Да коы с инета находил и подставлял.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
procedure TForm1.btn16Click(Sender: TObject);
var  strConn: widestring;
  i,k,j:integer;
  s,l:string;
begin
qry1.Close;
qry1.SQL.Text:=Edt6.Text;
 strConn:='Provider=Microsoft.Jet.OLEDB.4.0;' +
'Data Source=' +SELECT qry1.F1 FROM [qry1,qry2] WHERE qry1.F1=qry2.F1+ ';' +
'Extended Properties=Excel 8.0;';
con1.Connected:=False;
con1.ConnectionString:=strConn;
try
qry1.Open;
qry2.Open;
except
ShowMessage( 'Íå ìîãó âûïîëíèòü Sql çàïðîñ ' + Edt1.Text +'!');
raise;
end;
end;
Видимо не правильно ни че. Исправтье пожалуйста. Буду очень лагодарен.

Добавлено через 19 часов 0 минут
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
procedure TForm1.btn17Click(Sender: TObject);
var
  i,j:Integer;
  A: array [0..10000, 0..10000] of integer;
  s,m,k:string;
  l:string;
begin
qry1.First;
qry2.First;
  for i:=0 to qry1.RecordCount-1
  do begin
  A[i]:=qry1.fieldbyname('F1').Value;
    for j:=0 to qry2.RecordCount-1 do begin
    A[j]:=qry1.fieldbyname('F1').Value;
    if a[i]=a[j] then begin a[i]:=s;
        qry3.Insert;
        qry3.fieldbyname('ÈÁ').Value:=s;
        qry3.Post;
        end;
        end;
end;
end;
может через массив сделать. ТОка он зачем то не работет.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.07.2012, 10:15
Помогаю со студенческими работами здесь

Запрос на пересечение данных из 2 однотипных таблиц
Вроде был уверен что в СУБД которые не поддерживают INTERCECT заменой ему будет вложенный запрос с EXISTS т е например SELECT *...

Найти пересечение двух множеств и вывести данное пересечение и кол-во элементов в нем
Здравствуйте, помогите, пожалуйста, дорешать задачу. Условие: найти пересечение двух множеств и вывести данное пересечение и кол-во...

Пересечение двух прямых и проверка на пересечение
Доброго времени суток слизал функцию проверки отсюда:/segments_intersection_checking на всякий случай у меня она выглядит так: int...

Требуется запрос. Дополнительные поля, с текстом не из таблиц, но в зависимости от данных таблиц
Суть такая, есть три таблицы (пример) T_Main ID|Name|Pos 1|Вася|21 2|Вася|10 3|Вася|25 4|Вася|16 5|Вася|254 6|Петя|5 ...

Выбрать из таблиц с повторяющимися записями те записи, которых нет в одной из таблиц
Есть две таблицы в которых некоторые записи повторяються, надо выбрать записи которых нет в одной из таблицы!!!! Спасибо за ранее!!!


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru