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

Sql запрос

12.05.2015, 23:47. Показов 2580. Ответов 38
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Delphi
1
2
3
4
5
6
7
8
ADOQuery1.Active:=false;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('INSERT INTO Таблица2 (фамилия, имя) ');
ADOQuery1.SQL.Add('SELECT фамилия, имя ');
ADOQuery1.SQL.Add('FROM Таблица1');
ADOQuery1.ExecSQL;
ADOQuery1.SQL.Text:='SELECT * FROM Таблица2';
ADOQuery1.Active:=true;
этот код что я кинул копирует записи, например занес я в таблицу 1, три записи
1
2
3 и беру нажимаю на кнопку с кодом они копируется
и во второй таблице появляются записи
1
2
3
а если я захочу опять добавить в таблицу 1 запись ещё например одну
4
и нажму копировать то в таблице 2 получится так
1
2
3
1
2
3
4
а как мне сделать чтобы в этот раз оно скопировала только 4 запись?
чтобы было
1
2
3
4
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.05.2015, 23:47
Ответы с готовыми решениями:

SQL запрос по фрагменту строки сохраненной в таблице SQL
Прошу помощи. Есть SQL таблица-1, в ней есть столбец по имени Model_Vagona с типом данных ntext Есть SQL таблица-2, в ней есть столбец...

SQL запрос, работающий в MS SQL Menegment'e не работает в делфи
Требуется выполнить запрос по нажатию кнопки, запрос сначала написал в Microsoft SQL Managment, где и написал свою БД, там запрос работает,...

SQL и ComboBox в Delphi. Нужно чтобы при выборе специальности в комбобоксе это значение вносилось в SQL запрос
procedure TForm3.Button2Click(Sender: TObject); begin try ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add('SELECT Абитуриент.фамилия,...

38
пофигист широкого профиля
4769 / 3204 / 862
Регистрация: 15.07.2013
Сообщений: 18,609
13.05.2015, 01:21
Цитата Сообщение от niTecep Посмотреть сообщение
этот код что я кинул копирует записи
Что то я сомневаюсь, что этот запрос вообще может работать.
Цитата Сообщение от niTecep Посмотреть сообщение
а как мне сделать чтобы в этот раз оно скопировала только 4 запись?
А собственно никак, если речь о формировании простого запроса .INSERT INTO
0
480 / 393 / 113
Регистрация: 24.04.2012
Сообщений: 1,632
Записей в блоге: 3
13.05.2015, 06:13
Может так пойдет?
SQL
1
2
3
4
5
6
7
INSERT INTO Таблица2 (фамилия, имя)
SELECT Таблица1.фамилия, Таблица1.имя 
FROM Таблица1
LEFT JOIN Таблица2 ON Таблица2.фамилия = Таблица2.фамилия 
AND Таблица2.имя = Таблица2.имя
WHERE Таблица2.фамилия IS NULL
AND Таблица2.имя IS NULL
0
0 / 0 / 0
Регистрация: 08.05.2015
Сообщений: 59
13.05.2015, 15:23  [ТС]
Цитата Сообщение от Bit_Man Посмотреть сообщение
Может так пойдет?
ошибка
Delphi
1
2
3
4
5
6
7
8
9
10
11
ADOQuery1.Active:=false;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('INSERT INTO Таблица2 (фамилия, имя)');
ADOQuery1.SQL.Add('SELECT Таблица1.фамилия, Таблица1.имя ');
ADOQuery1.SQL.Add('FROM Таблица1');
ADOQuery1.SQL.Add('LEFT JOIN Таблица2 ON Таблица2.фамилия = Таблица2.фамилия');
ADOQuery1.SQL.Add('AND Таблица2.имя = Таблица2.имя');
ADOQuery1.SQL.Add('WHERE Таблица2.фамилия IS NULL');
ADOQuery1.SQL.Add('AND Таблица2.имя IS NULL');
ADOQuery1.ExecSQL;
ADOQuery1.Active:=true;
0
Эксперт Pascal/Delphi
 Аватар для xxbesoxx
1135 / 616 / 129
Регистрация: 13.02.2009
Сообщений: 3,600
13.05.2015, 15:44
Цитата Сообщение от niTecep Посмотреть сообщение
ошибка
Запрос проверяйте сам в СУБД он работает ?

Добавлено через 7 минут
и пиши код красиво
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
procedure TForm1.Button1Click(Sender: TObject);
begin
  with ADOQuery1  do
  begin
    Close;
    SQL.Clear;
    SQL.Add('INSERT INTO Таблица2 (фамилия, имя)' +
            'SELECT Таблица1.фамилия, Таблица1.имя '+
            'FROM Таблица1'+
            'LEFT JOIN Таблица2 ON Таблица2.фамилия = Таблица2.фамилия'+
            'AND Таблица2.имя = Таблица2.имя '+
            'WHERE Таблица2.фамилия IS NULL' +
            'AND Таблица2.имя IS NULL');
   ExecSQL;
   Open;
  end;
end;
0
0 / 0 / 0
Регистрация: 08.05.2015
Сообщений: 59
13.05.2015, 16:18  [ТС]
Цитата Сообщение от xxbesoxx Посмотреть сообщение
Запрос проверяйте сам в СУБД он работает ?
не работает
0
Эксперт Pascal/Delphi
 Аватар для xxbesoxx
1135 / 616 / 129
Регистрация: 13.02.2009
Сообщений: 3,600
13.05.2015, 16:51
Это Access да ? Выложите сам БД посмотрю
0
0 / 0 / 0
Регистрация: 08.05.2015
Сообщений: 59
13.05.2015, 17:05  [ТС]
Цитата Сообщение от xxbesoxx Посмотреть сообщение
Это Access да ? Выложите сам БД посмотрю
да, Database10.rar
0
Эксперт Pascal/Delphi
 Аватар для xxbesoxx
1135 / 616 / 129
Регистрация: 13.02.2009
Сообщений: 3,600
13.05.2015, 18:54
Лучший ответ Сообщение было отмечено niTecep как решение

Решение

На Access можно писать SQL запрос ! Но не все как в SQL ! Давайте эту задачу переносим в MS SQL Server
1)
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
create database TestDB
 
create table Таблица1
( id int identity(1,1),
  Фамилия varchar(30),
  Имя varchar(30),
  Отчество  varchar(30)
)
 
--------------------
create table Таблица2
( id int identity(1,1),
  Фамилия varchar(30),
  Имя varchar(30),
  Отчество  varchar(30)
)
2) добавлю пару запис в Таблица1
SQL
1
2
3
4
INSERT INTO Таблица1(Фамилия, Имя, Отчество)
           VALUES('Иванов','Иване','Иванович'),
                 ('Микифоров','Денис','Василич')
SELECT * FROM Таблица1
и ваши задача решаю с помощью инструкции MERGE смотрите
T-SQL
1
2
3
4
5
6
7
8
MERGE Таблица2 AS T2 -- Делаем абдейть или инсерт в таблицу  Таблица2
USING Таблица1 AS T1 -- из таблици Таблица1
ON (T2.Фамилия = T1.Фамилия and T2.Имя = T1.Имя  and T2.Имя = T1.Имя 
   and T2.Отчество = T1.Отчество) -- Вот здесь после ON проверка что бы не добовлят одно и тот же 
WHEN NOT MATCHED BY TARGET -- если не сушествуйть такой запись Таблица2 
    THEN -- тогда 
    INSERT(Фамилия, Имя, Отчество) -- добавляем в Таблица2
    VALUES(T1.Фамилия, T1.Имя, T1.Отчество); -- из таблицу Таблица1
Так это уже решили и через на кнопку копирование пишу
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
25
procedure TForm1.Button1Click(Sender: TObject);
begin
  with ADOQuery2 do
  begin
    Close;
    SQL.Clear;
    SQL.Text := 'MERGE Таблица2 AS T2  '+
                'USING Таблица1 AS T1 '+
                'ON (T2.Фамилия = T1.Фамилия and T2.Имя = T1.Имя  and T2.Имя = T1.Имя '+
                'and T2.Отчество = T1.Отчество) '+
                'WHEN NOT MATCHED BY TARGET  '+
                ' THEN  '+
                ' INSERT(Фамилия, Имя, Отчество)'+
                'VALUES(T1.Фамилия, T1.Имя, T1.Отчество);';
    ExecSQL;
 end;
  with ADOQuery2 do
  begin
    SQL.Text := ' SELECT * FROM Таблица2';
    Open;
  end;
 
end;
 
end.
и все ваши задача решается
1
0 / 0 / 0
Регистрация: 08.05.2015
Сообщений: 59
13.05.2015, 19:14  [ТС]
Цитата Сообщение от xxbesoxx Посмотреть сообщение
и все ваши задача решается
чтобы выполнить эту задачу нужно, вместо Access использовать MS SQL Server?
0
Эксперт Pascal/Delphi
 Аватар для xxbesoxx
1135 / 616 / 129
Регистрация: 13.02.2009
Сообщений: 3,600
13.05.2015, 19:19
Цитата Сообщение от niTecep Посмотреть сообщение
чтобы выполнить эту задачу нужно, вместо Access использовать MS SQL Server?
Да.... Просто забить эту Access и установите MS SQL Express есть бесплатные . и начинайте создать таблици и все по шагом если что то не понятно пишите . ваши задача решаю с помощью инструкции MERGE в Access эту не поддерживает
1
0 / 0 / 0
Регистрация: 08.05.2015
Сообщений: 59
13.05.2015, 19:22  [ТС]
Цитата Сообщение от xxbesoxx Посмотреть сообщение
Да.... Просто забить эту Access и установите MS SQL Express есть бесплатные . и начинайте создать таблици и все по шагом если что то не понятно пишите . ваши задача решаю с помощью инструкции MERGE в Access эту не поддерживает
хорошо, спасибо)
0
Эксперт Pascal/Delphi
 Аватар для xxbesoxx
1135 / 616 / 129
Регистрация: 13.02.2009
Сообщений: 3,600
13.05.2015, 19:24
Пожалуйста
0
1234 / 424 / 107
Регистрация: 31.03.2012
Сообщений: 1,159
14.05.2015, 02:46
Цитата Сообщение от niTecep Посмотреть сообщение
чтобы выполнить эту задачу нужно, вместо Access использовать MS SQL Server?
Совсем не обязательно
запрос должен быть примерно таким (в предположении, что в таблицах есть ключевое поле - типа счетчик. Иначе соединять по join нужно будет по другому критерию и кляузу where пересмотреть)
SQL
1
2
3
4
INSERT INTO t2
  SELECT t1.id, t1.fio, t1.name FROM t1 
    LEFT JOIN t2 ON t1.id = t2.id 
  WHERE t2.is id NULL
0
32 / 53 / 9
Регистрация: 05.12.2013
Сообщений: 261
14.05.2015, 09:01
Если есть поле типа счетчик, то можно и так
SQL
1
2
3
INSERT INTO t2
SELECT * FROM t1
WHERE id NOT IN (SELECT id FROM t2)
Добавлено через 26 минут
Можно и так, без счетчика, но при условии что комбинация Фамилия +Имя повторяться не будут
SQL
1
2
3
INSERT INTO t2
SELECT * FROM t1
WHERE Фамилия + Имя NOT IN (SELECT Фамилия + Имя FROM t2)
0
0 / 0 / 0
Регистрация: 08.05.2015
Сообщений: 59
14.05.2015, 18:31  [ТС]
Цитата Сообщение от Joeymax Посмотреть сообщение
Совсем не обязательно
запрос должен быть примерно таким (в предположении, что в таблицах есть ключевое поле - типа счетчик. Иначе соединять по join нужно будет по другому критерию и кляузу where пересмотреть)
0
0 / 0 / 0
Регистрация: 08.05.2015
Сообщений: 59
14.05.2015, 18:42  [ТС]
Цитата Сообщение от Maxim******* Посмотреть сообщение
Можно и так, без счетчика, но при условии что комбинация Фамилия +Имя повторяться не будут
запрос сработал 1 раз когда запись скопировалась, а дальше изменений не происходило
Цитата Сообщение от Maxim******* Посмотреть сообщение
Если есть поле типа счетчик, то можно и так
ввел в поле ид, ид записи но изменений тоже не было
0
Эксперт Pascal/Delphi
 Аватар для xxbesoxx
1135 / 616 / 129
Регистрация: 13.02.2009
Сообщений: 3,600
14.05.2015, 19:03
Цитата Сообщение от niTecep Посмотреть сообщение
ввел в поле ид
Удивительно почему вы ищите другой способ ? что вы не поняли из моего примера ?

Добавлено через 2 минуты
Цитата Сообщение от niTecep Посмотреть сообщение
а дальше изменений не происходило
прошло 1 день и вы это еще не делали ?
0
0 / 0 / 0
Регистрация: 08.05.2015
Сообщений: 59
14.05.2015, 20:04  [ТС]
Цитата Сообщение от xxbesoxx Посмотреть сообщение
Удивительно почему вы ищите другой способ ? что вы не поняли из моего примера ?
у меня программа все на базе access, а чтобы сделать через MS SQL Express придется базу переделывать, да и MS SQL Express никогда не пользовался, не знаю как там делать)
0
Эксперт Pascal/Delphi
 Аватар для xxbesoxx
1135 / 616 / 129
Регистрация: 13.02.2009
Сообщений: 3,600
14.05.2015, 21:45
Цитата Сообщение от Joeymax Посмотреть сообщение
запрос должен быть примерно таким
Не будет работать примерно так ! причем тут LEFT JOIN t2 ON t1.id = t2.id вы смотрели структуру БД ? на #8 и задача на #1

Добавлено через 38 минут
Цитата Сообщение от Maxim******* Посмотреть сообщение
Если есть
Вы тоже смотрите на #8 что есть
Цитата Сообщение от Maxim******* Посмотреть сообщение
Можно и так
покажите как ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.05.2015, 21:45
Помогаю со студенческими работами здесь

Sql запрос
Вопрос такой Есть запрос: SELECT PFAMILIA AS "Фамилия",NUMBER AS "Номер участка"' FROM PATIENT WHERE (NUMBER=4) ORDER BY...

sql запрос
Добрый день! Надо было сделать программу для вывода в "StringGrid" sql базы , И собственно нужно было отсортировать по месяцам...

SQL запрос
Здравствуйте! У меня есть две таблицы dat и dat1, есть SQL запрос на вывод из первой таблицы(dat) ср.значения из поля datniz во вторую...

sql запрос
привет всем ребята я создал sql 2000 хранимые процедуры set ANSI_NULLS ON set QUOTED_IDENTIFIER ON GO

Запрос в SQL
Скажите в чем ошибка у меня есть 2 таблицы: mer и mer_ur, в них поля: data, mer, lico. Я делаю запрос (точней пишу) select* from...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru