![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 08.11.2008
Сообщений: 52
|
![]()
Здравствуйте.
Delphi: XE2 Dataset: компонент TpFIBDataSet Dataset выполняет Select. Могу ли я сделать Insert из результата выполненного Select, не используя дополнительный Dataset? |
![]() |
![]() |
![]() |
#2 |
Пользователь
Регистрация: 05.05.2018
Сообщений: 94
|
![]()
Несколько неконкретно задан вопрос. В общем виде у TpFIBDataSet есть свойство SQLs, включающее InsertSQL, SelectSQL, RefreshSQL, RefreshSQL и DeleteSQL. Как видно из их названий - это различные инструкции для работы с набором на языке SQL. Если TpFIBDataSet простой и может быть изменен, то
можно. Если не изменяемой, состоящий из нескольких таблиц - как правило - нет. К тому же надо учесть в какой трансакции происходит работа. Где-то так... |
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 08.11.2008
Сообщений: 52
|
![]()
А вот подскажите как это будет выглядеть кодом?
Мне интересно, если я заполню InsertSQL и заполню SelectSQL, а потом выполню датасет командой Dataset.Open. Какой из запросов выполнится Insert или Select? Или они как-то последовательно друг за другом? И вопрос: допустим в SelectSQL текст "select * from таблица", как сделать так, чтобы можно было результат уже готового запроса-Селекта заИнсёртать в другую таблицу? Можно сделать с помощью конструкции Insert...Select, но в Инсёрте селект повторно выполнится, а ведь у нас уже имеется выполненный Select. Можно пробегаться курсором по строчкам выполненного селекта и для каждой строчки делать отдельный Инсерт, но если строчек будет 10000, то будет 10000 Инсёртов. Понимаю, что способ не один, но вот посоветуйте как это делают опытные программисты? |
![]() |
![]() |
![]() |
#4 |
Пользователь
Регистрация: 05.05.2018
Сообщений: 94
|
![]()
- крайне порочный подход. "Бегать" по строчкам не надо! Принцип SQL - это работа СРАЗУ с множеством строк (или с одной строчкой, если есть только одна строка в этом множестве; или ни с одной). Главное - в это множество включаются только строки согласно какому-то условию - Where .... и т.д.
|
![]() |
![]() |
![]() |
#5 |
Пользователь
Регистрация: 08.11.2008
Сообщений: 52
|
![]()
Viktor61, вы не могли бы написать кодом как можно вставить множество строк?
Например, пусть у меня не SQL-запрос, а какой-нибудь Excel с 2 строчками и 3 колонками: Фамилия, Имя, Отчество. Циклом пробегаюсь по 2-м строчкам. В первый раз пробегаюсь, получил из Excel'а фамилию, имя, отчество. Теперь у меня есть параметры для вставки и по логике мне нужно текущее ФИО Инсертнуть в таблицу. Потом второй раз пробегаюсь и уже вытаскиваю новые ФИО для новой вставки в таблицу, обновляю параметры в соответствии со значениями новых ФИО и снова делаю Инсерт. Или как-то можно сначала пробежаться по Excel'ю, накопить стэк/массив данных, а потом разом их вставить? Если да, то увидеть бы код. Последний раз редактировалось Explosion; 26.08.2022 в 08:42. |
![]() |
![]() |
![]() |
#6 |
Пользователь
Регистрация: 05.05.2018
Сообщений: 94
|
![]()
Ув. Explosion! TpFIBDataSet - это не про Excel. Он заточен именно для работы c Interbase/firebird.
Зачем брать крутую тачку и кататься на поселковых дорогах? Лишнее это - используйте подходящий инструмент (ШУТКА!). Если уж, предполагаю, Вам, "в наследство" досталась БД с TpFIBDataSet, то каким-либо образом получайте данные для вставки, создавайте Хранимую процедуру ставки на сервере Interbase/firebird. Хотите код - их есть у меня Код:
|
![]() |
![]() |
![]() |
#7 |
Пользователь
Регистрация: 05.05.2018
Сообщений: 94
|
![]()
В программе
Код:
|
![]() |
![]() |
![]() |
#8 |
Пользователь
Регистрация: 08.11.2008
Сообщений: 52
|
![]() |
![]() |
![]() |
![]() |
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
dataset not in edit or insert mode | Анжеликааа | Общие вопросы Delphi | 7 | 05.01.2015 22:59 |
ошибка dataset not in edit or insert mode | Chicharrr | Помощь студентам | 2 | 06.06.2012 18:34 |
Ошибка dataset not in edit or insert mode. | thebrownie | Общие вопросы Delphi | 3 | 12.02.2012 18:47 |
dataset is not edit or insert mode | Drugnir | Общие вопросы C/C++ | 1 | 26.09.2011 09:56 |