Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.01.2008, 20:36   #1
ivp88
Пользователь
 
Регистрация: 14.02.2007
Сообщений: 28
Хорошо Перенос данных в из 1 таб. в другую...

Здравствуйте....я создаю программу- Автоматизация учета в библиотеке...всего у меня 8 таблиц.... Читатель, Книга, Издат-во, Категория, Списанная книга, Библиотекарь, ВЫДАЧА и ВОЗВРАТ...вопросов конечно множество но наглеть не стану.....проблемка в том , когда выдаю книгу в таб. "Выдача" саздаю запись с ID выдачи, ID читателя, назв.книги и дата выдачи(как сделать чтоб стояла текущая дата), но мне нужно чтоб в таблице "Возврат" автоматически создавалась запись с соответствующими данными выдачи но без даты(таблицы связал введя в табл.Возврат ID выдачи=(ID возврата))...... (я только учусь) Спасибо заранее
ivp88 вне форума Ответить с цитированием
Старый 06.01.2008, 10:05   #2
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Это проще простого. Раз известно ID вытаскивай sql-запросом все данные
select * from Vidacha where ID=ID..... А почему бы не записывать возврат в ту же таблицу? Сделать отдельное поле, которое определяет сдал читатель книгу или нет... Зачем создавать лишние таблицы и дублировать данные?
_SERGEYX_ вне форума Ответить с цитированием
Старый 06.01.2008, 10:36   #3
фЁдОр
Форумчанин
 
Аватар для фЁдОр
 
Регистрация: 06.09.2007
Сообщений: 908
По умолчанию

_SERGEYX_, я думаю, что автор хотел немного другое получить то, что Вы предложили, но
Цитата:
А почему бы не записывать возврат в ту же таблицу? Сделать отдельное поле, которое определяет сдал читатель книгу или нет...
мне кажется, что это хорошее предложение.

Но если автор все же будет настаиваивать, то могу предложить:
http://programmersforum.ru/showthread.php?t=7735-это если одинаковые форматы страниц.
И http://programmersforum.ru/showthread.php?t=7807 - это если разные форматы страниц.
ivp88 - на форуме есть такая возможность как поиск, очень рекомендую и им пользоваться!

Последний раз редактировалось фЁдОр; 06.01.2008 в 10:39.
фЁдОр вне форума Ответить с цитированием
Старый 06.01.2008, 13:23   #4
ivp88
Пользователь
 
Регистрация: 14.02.2007
Сообщений: 28
По умолчанию

дело в том,что колличество таблиц определил преподаватель не менее 8 таблиц....и вот я теперь все реализую ....хотя конечно же было б намного проще одну тыблицу......а в поиске совсем не то что нужно.....

а без sql никак нельзя обойтись ?

Последний раз редактировалось Alex21; 06.01.2008 в 17:52.
ivp88 вне форума Ответить с цитированием
Старый 06.01.2008, 15:03   #5
фЁдОр
Форумчанин
 
Аватар для фЁдОр
 
Регистрация: 06.09.2007
Сообщений: 908
По умолчанию

Цитата:
Сообщение от ivp88 Посмотреть сообщение
а в поиске совсем не то что нужно
там конечно не будет такой же задачи как у Вас, но для аналогичных проблем, я привел Вам ссылки.

Цитата:
Сообщение от ivp88 Посмотреть сообщение
а без sql никак нельзя обойтись ?
боюсь, что никак...
А в чем проблема то с SQL'ом, там ничего такого заумного знать нет необходимости, что бы решить Вашу проблему?
фЁдОр вне форума Ответить с цитированием
Старый 06.01.2008, 15:58   #6
Andrei
Форумчанин
 
Регистрация: 20.06.2007
Сообщений: 270
По умолчанию

Цитата:
Сообщение от ivp88 Посмотреть сообщение
а без sql никак нельзя обойтись ?
Ну почему же нельзя? Каждая задача в программировании имеет, как правило, несколько путей решений.
Например, такой:

Пусть Table1 - таблица выдачи, а Table2 - таблица возвратов. Тогда в Table1 на событие AfterInsert (чтобы обновление происходило сразу же после вставки записи в таблице 1) пишем процедурку для вставки записи в Table2. Получится что-то наподобии:

Код:
procedure TForm1.Table1AfterInsert(DataSet: TDataSet);
begin
 Table2.InsertRecord([Table1['Value1'],Table1['Value2']..Table1['ValueN']]);
end;
Все..
-Кукушка, кукушка! Накукуй мне сто лет!
-А накукуй тебе столько?

(с) Библия. Вольный перевод с древнееврейского.
Andrei вне форума Ответить с цитированием
Старый 06.01.2008, 21:04   #7
ivp88
Пользователь
 
Регистрация: 14.02.2007
Сообщений: 28
Смущение

так у меня не получилось
Цитата:
Сообщение от Andrei Посмотреть сообщение
Код:
procedure TForm1.Table1AfterInsert(DataSet: TDataSet);
begin
 Table2.InsertRecord([Table1['Value1'],Table1['Value2']..Table1['ValueN']]);
end;
Все..
Код:
(POst)procedure TForm1.DBNavigator5Click(Sender: TObject; Button: TNavigateBtn);
begin
  I:=Table2.FieldByName('ID_Vidachi').AsString;
   Table3.Next;
     H:=Table3.FieldByName('ID_Vozvr').AsString;
 if I<>H then
    begin
       Table3.insert;
 Table3.FieldByName('InvenNom').AsString :=Table2.FieldByName('InvenNom').AsString;
 Table3.FieldByName('NazvKn').AsString :=Table2.FieldByName('NazvKn').AsString;
 Table3.FieldByName('ID_Chit').AsString :=Table2.FieldByName('ID_Chit').AsString;
 Table3.FieldByName('ID_Bibl').AsString :=Table2.FieldByName('ID_Bibl').AsString;
 Table3.Post;
    end
    else
    begin
    coобщение;
    end;
end;
а так все отличненько.....но наверное слишком громоздко....?

Последний раз редактировалось Alex21; 06.01.2008 в 23:58.
ivp88 вне форума Ответить с цитированием
Старый 07.01.2008, 21:29   #8
Pitbull
детский тренер
Форумчанин
 
Аватар для Pitbull
 
Регистрация: 08.06.2007
Сообщений: 532
По умолчанию

от SQL -запросов ві никуда не денетесь... Єто намного упростит Вашу жизнь...

INSERT into Таблица(поле1,..., поле N) VALUEs(Значение1,..., Значение N);
Всего одна строка....
Я злой и страФный серррый воФк, и в пАрАсятах знаю толк - ppp ppp pp p pp pp
Pitbull вне форума Ответить с цитированием
Старый 10.01.2008, 11:20   #9
Andrei
Форумчанин
 
Регистрация: 20.06.2007
Сообщений: 270
Смущение

Цитата:
Сообщение от ivp88 Посмотреть сообщение
так у меня не получилось
Прошу прощения . Проверить возможности не не было. Писал по памяти.

Размещение предложенной процедуры вставки на событие AfterInsert смысла не имеет, потому что всавляется, конечно же, пустая запись и тут же происходит копирование значений в другую таблицу.

Вы правильно сделали, что переписали ее на отдельную кнопку.
-Кукушка, кукушка! Накукуй мне сто лет!
-А накукуй тебе столько?

(с) Библия. Вольный перевод с древнееврейского.
Andrei вне форума Ответить с цитированием
Старый 10.01.2008, 12:25   #10
Andrei
Форумчанин
 
Регистрация: 20.06.2007
Сообщений: 270
По умолчанию

Что касается метода InsertRecord, то там все просто.

При его выполнении в таблицу вставляется новая запись, заполняется значениями из массива, переданного в качестве параметра, и выполняется метод Post.

Значения в массиве должны следовать в том же порядке, в каком определены поля в вашем наборе данных и тип значения должен соответствовать типу поля. Если значение поля не определено, то в качестве парметра передается значение null. Если значений в массиве меньше, чем полей в наборе данных, то остальным полям присваивается значение null.

При вставке записи ее положение в таблице определяется одним из следующих способов:

- Для индексированных таблиц Paradox и dBASE запись вставляется в позицию, соответствующую текущему индексу.

- Для неиндексированных таблиц Paradox запись вставляется в текущую позицию курсора.

- Для неиндексированных таблиц dBASE, FoxPro и Acess новая запись добавляется в конец таблицы.

Только что вставленная запись становится активной.

Допустим поля в Table2 определены в следующем порядке: ID_Vozvr, Date_Vozvr, InvenNom, NazvKn, ID_Chit, ID_Bibl и их структура полностью соответствует структуре Table3.
Поэтому мы можем отказаться от приведения значений из Table2 к формату Table3 (ваше Table2.FieldByName('InvenNom').AsSt ring) и обратиться непосредственно к значению поля следующим образом:

Table2['InvenNom']

В конечном случае это будет выглядеть примерно так:

Table3.InsertRecord([Table2['ID_Vidachi'],null,Table2['InvenNom'],Table2['NazvKn'],Table2.['ID_Chit'],Table2['ID_Bibl']]);
-Кукушка, кукушка! Накукуй мне сто лет!
-А накукуй тебе столько?

(с) Библия. Вольный перевод с древнееврейского.
Andrei вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перенос данных из одной книги со многих листов в другую gavrylyuk Microsoft Office Excel 34 20.07.2008 21:39
пересылка данных из одной сети в другую AIst Работа с сетью в Delphi 5 08.07.2008 23:50
Проблема с сохранением данных в другую таблицу HAMMAN Помощь студентам 1 26.05.2008 08:30
Копирование данных из одной таблицы в другую! фЁдОр БД в Delphi 18 06.01.2008 19:27
Перенос EXE на другую машину tihon_65 Общие вопросы Delphi 12 21.02.2007 15:00