Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 10.05.2010, 21:41
lohmatiy lohmatiy вне форума
Прохожий
 
Регистрация: 24.02.2010
Сообщения: 15
Репутация: 10
По умолчанию Сохранение значения поля автоинкремента

Здравствуйте.
Есть 2 таблицы - в первую мы записываем результаты запроса, и первый столбец column тут primary, увеличивается автоматически. Во второй таблице поле column является значением другого столбца, т.е. если в первой таблице значения полей
1 100 100
2 200 200
и первsй столбец column увеличивается сам, то во второй таблице будет так
300 300 1
400 400 2
и т.д.
Сам я как сделал - выполняю запрос, записываю значения в первую таблицу
Код:
with ADOQuery do
SQL.Clear();
SQL.Text:='INSERT INTO table1 ([col1],[col2],) VALUES (:Param1,:Param2)';
Parameters.ParamByName('Param1').Value:= 100;
Parameters.ParamByName('Param2').Value:=200;
ExecSQL();

затем сразу же произвожу по ним поиск по искомому столбцу,
а уж затем записываю это значение во вторую таблицу

Код:
SQL.Clear();
SQL.Text:='SELECT [ID] FROM table1 WHERE [col1]=:Param1,Col2]=:Param2,';
Parameters.ParamByName('Param1').Value:=100;
Parameters.ParamByName('Param2').Value:=200;
ExecSQL();
Open;
tmp:=Fields[0].asInteger;
SQL.Clear();
SQL.Text:='INSERT INTO table2 ([ID]) VALUES (:Param1)';
Parameters.ParamByName('Param1').Value:=tmp;

Есть какое-либо более изящное решение?)

Последний раз редактировалось lohmatiy, 10.05.2010 в 21:44.
Ответить с цитированием
  #2  
Старый 10.05.2010, 21:54
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Есть и много.
Какая БД у тебя?
Ответить с цитированием
  #3  
Старый 10.05.2010, 22:16
lohmatiy lohmatiy вне форума
Прохожий
 
Регистрация: 24.02.2010
Сообщения: 15
Репутация: 10
По умолчанию

БД Access через ADO
Ответить с цитированием
  #4  
Старый 11.05.2010, 09:47
Аватар для friz
friz friz вне форума
Местный
 
Регистрация: 04.04.2008
Адрес: Минск
Сообщения: 596
Версия Delphi: 2007 & JAVA EE
Репутация: 10670
По умолчанию

зачем ты делаешь сразу ExecSQL() а потом Open? если мне не изменяет память то ExecSQL()- при запросе который не возвращает данных, а open для запросов которые возвращают данные, т.е. для select-open для insert - execsql()
Ответить с цитированием
  #5  
Старый 11.05.2010, 10:02
lohmatiy lohmatiy вне форума
Прохожий
 
Регистрация: 24.02.2010
Сообщения: 15
Репутация: 10
По умолчанию

Да эт мелочи, кусок кода скопировал просто
Ответить с цитированием
  #6  
Старый 11.05.2010, 13:28
Аватар для friz
friz friz вне форума
Местный
 
Регистрация: 04.04.2008
Адрес: Минск
Сообщения: 596
Версия Delphi: 2007 & JAVA EE
Репутация: 10670
По умолчанию

что-то я не сильно понял что надо, т.е. надо получить с первой таблицы id и вписать во вторую? или что?
можно заменить два запроса одним:
Код:
пример:
insert into table2 (id) select id from table2 where param1 =100 and param2=200
Ответить с цитированием
  #7  
Старый 11.05.2010, 13:34
lohmatiy lohmatiy вне форума
Прохожий
 
Регистрация: 24.02.2010
Сообщения: 15
Репутация: 10
По умолчанию

ну в общем да, можно, а хотелось бы сразу, при выполнении первого запроса ))
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 15:55.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter