Простые операции C БД

  • Автор темы Автор темы vital
  • Дата начала Дата начала
V

vital

Есть 2 одинаовых таблицы, различаются лишь по содержащимся данным. Так вот, нужно удалить строку из первой и добавить её во вторую. И хм.. Без SQL(лажа блин!) . Paradox,BDE. Я бд не особо люблю и пользую не часто. Торможу вот..
 
Для: vital читайте про "навигационный подход", используйте методы объекта TTable: First, Next, Insert, Post, ну и Delete, конечно))
 
Для: Azrael
Оно то понято, тут главо разобраться с ЧЕМ собствено надо работаь
 
Для: vital
Для: Morpheus
раз BDE, значит типичная связка компонентов TTable - TDataSource - визуальный контрол. можно, но не обязательно TDatabase ещё. TTable имеет внутренний указатель на текущую запись, если not(table.eof), значит её можно удалять, редактировать, перемещаться на следуюущую и предыдущую, в чем собственно и заключается навигационный подход.
 
Для: sax_ol
Таварыщ хотел без SQL...
 
Для: vital
Как бы это на sql-сервере хороше легло :)))))
может комунибудь пригодится
Код:
drop table #tmpT
select * into #tmpT from table1 where id='wwww' 
delete from table1 where id='wwww'
insert into table2 select * from #TmpT
 
сомневаюсь, что в Paradox-е реализовано DDL :)
 
Для: sax_ol
такое должно работать
sql1
Код:
Insert into table2 (id,name) select id,name from table1 where id='wwww'
+
второй
sql2
Код:
delete from table1 where id='wwww'
+
как обычно не для выборки пользуемся Query1.ExecSQL
 
Блин, на SQL я и сам могу! Короче, на форме 2 TTable подключенным к двум таблицам. Что нужно я уже написал.. Блин, скорее всего я прсто туплю в 2 часа ночи, но напишите мне код в общем виде как переместить строку из 1 TTable во вторую..
 
Для: vital
Вам же Azreal написал !
Код:
Table1.Edit;
Table1.First;
while not(Table1.Eof) do
begin
if Table1.fieldbyname('id').AsString = 'wwww' then
begin
Table2.Append;
Table2.filedbyname('id').AsString:=Table1.fieldbyname('id').AsString;
Table2.post;
Table1.Delete;
end;
end;
Table1.Next;
end;
P.S не проверял но идея такая + тормоза будут нереальные если у вас в базе очень много записей :)
 
Про тормоза - это верно, будут.
Нужно использовать индекс по полю 'id' и метод GotoKey()
Поиск будет выглядеть примерно так:

Код:
Table1.IndexName('id');
Table1.SetKey();
Table1.fieldbyname('id').AsString = 'wwww';
Table1.GotoKey()

Тем самым мы находим запись где в поле 'id' значение 'wwww'
Ну а дальше перекладываем как в примере выше.

Удачи.
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

🚀 Первый раз на Codeby?
Гайд для новичков: что делать в первые 15 минут, ключевые разделы, правила
Начать здесь →
🔴 Свежие CVE, 0-day и инциденты
То, о чём ChatGPT ещё не знает — обсуждаем в реальном времени
Threat Intel →
💼 Вакансии и заказы в ИБ
Pentest, SOC, DevSecOps, bug bounty — работа и проекты от проверенных компаний
Карьера в ИБ →

HackerLab