Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.04.20;
Скачать: CL | DM;

Вниз

Как скопировать целиком строку в таблице.   Найти похожие ветки 

 
altatr ©   (2008-03-27 13:13) [0]

Имеются две полностью одинаковые таблицы. Table1 и Table2
Можно ли копировать записи из одной в другую сразу всей строкой?
Сейчас я это делаю так:

Table2.Append;
Table2.FieldByName("FIO").AsString:=Table1.FieldByName("FIO").AsString;
Table2.FieldByName("DOM").AsString:=Table1.FieldByName("DOM").AsString;
Table2.FieldByName("SALDO").AsFloat:=Table1.FieldByName("SALDO").AsFloat;
Table2.FieldByName("DOLG").AsFloat:=Table1.FieldByName("DOLG").AsFloat;
Table2.post;


 
clickmaker ©   (2008-03-27 13:17) [1]

BatchMove


 
Сергей М. ©   (2008-03-27 13:17) [2]

Для этой цели вместо Append имеется Insert/AppendRecord
Да и циклы пока еще не упразднили.


 
Kolan ©   (2008-03-27 13:18) [3]

Это, а сделать
INSERT INTO Table1
 SELECT FROM Table2


Нельзя?


 
altatr ©   (2008-03-27 14:20) [4]

>Kolan ©   (27.03.08 13:18) [3]
>
>Это, а сделать
>INSERT INTO Table1
>SELECT FROM Table2
>
>Нельзя?

Это копирует полностью все содержимое Table1 вTable2 ?


 
altatr ©   (2008-03-27 14:29) [5]

>clickmaker ©   (27.03.08 13:17) [1]
>
>BatchMove
>

Это:

 Table2.BatchMove(Table1,batCopy);

скопирует все из Table1 вTable2, а мне надо допустим только одну строку.


 
Sergey13 ©   (2008-03-27 14:31) [6]

> [4] altatr ©   (27.03.08 14:20)
> Это копирует полностью все содержимое Table1 вTable2 ?

А если дополнить идею Коляна
INSERT INTO Table1
SELECT FROM Table2
where id=:id


> Имеются две полностью одинаковые таблицы. Table1 и Table2
Уже настораживает. Зачем?


 
altatr ©   (2008-03-27 14:40) [7]

>Sergey13 ©   (27.03.08 14:31) [6]
>
> > [4] altatr ©   (27.03.08 14:20)
> > Имеются две полностью одинаковые таблицы. Table1 и Table2
>Уже настораживает. Зачем?
>

У таблиц только структура одинаковая.
А данные из первой  во вторую будут запихиваться по отределенному признаку.
Ну например я запись выделил какую нибудь кнопку нажал и вся строка целиком скопировалась в Table2


 
Sergey13 ©   (2008-03-27 14:41) [8]

> [7] altatr ©   (27.03.08 14:40)
> Ну например я запись выделил какую нибудь кнопку нажал и
> вся строка целиком скопировалась в Table2

А если например атрибут какой поменять в ОДНОЙ таблице? Не подойдет?


 
altatr ©   (2008-03-27 14:55) [9]

Подойдет, если меня ктонибудь научит как сделать так чтобы при печати отчета с помощью FreeReport она умела видеть этот атрибут и брала для печати только записи с этим атрибутом. Распечатывать отчет целиком всей таблицы я научился а как печятать выборочно незнаю... Вот и решил: Записи с атрибутом копировать в другую таблицу а ее уже в FreeReport распечатать целиком...


 
Сергей М. ©   (2008-03-27 14:58) [10]


> выделил какую нибудь кнопку нажал и вся строка целиком скопировалась
> в Table2


За каким лешим копировать всю запись, если можно скопировать только ее первичный ключ ?


 
Sergey13 ©   (2008-03-27 15:00) [11]

> [9] altatr ©   (27.03.08 14:55)
> Распечатывать отчет целиком всей таблицы я научился а как
> печятать выборочно незнаю

Немного доработанный вариант из [6] решит все твои проблемы. Иными словами - учи SQL. Или доучивай TTable - там можно отфильтровать данные по этому атрибуту.

ЗЫ: я тащусь насколько далеко может быть заданный вопрос от решения. 8-)


 
Johnmen ©   (2008-03-27 15:01) [12]

За каким лешим вообще что-то копировать, если можно отфильтровать по желаемому атрибуту ?


 
Kolan ©   (2008-03-27 15:02) [13]

> Это копирует полностью все содержимое Table1 вTable2 ?

Нет, только то что в селекте&#133


> У таблиц только структура одинаковая.
> А данные из первой  во вторую будут запихиваться по отределенному
> признаку.

Имхо, правильно иметь 1 таблицу с такой структурой. А если тебе надо выделить в ней какието строки, то помещай их ключи в спец таблицу.

То етсь. Допустим имеем таблицу:
Т1
1 Вася
2 Гриша
3 Федя


И хотим пометить что гриша и федя придурки.

У тебя было:
У нас есть еще одна таблица Т2 точно такая же как Т1, и называется «придурки» и ты туда копировал данные:

Т1
1 Вася
2 Гриша
3 Федя


Т2 «Придурки»
1 Гриша
2 Федя


Как предлагается:
Заводишь еще одну таблицу, где храниш только коды придурков:
Т2 «Придурки»
2
3


Вот и все.
:)


 
Palladin ©   (2008-03-27 15:05) [14]

в таком случае еще проще добавить в таблицу флаг отвечающий за признак придурка...


 
clickmaker ©   (2008-03-27 15:06) [15]


> еще проще добавить в таблицу флаг отвечающий за признак
> придурка...

а если потребуется ввести степень придурковатости? )
Не, Колян прав, он умные книжки по УМЛ читал, он про нормальные формы знает )


 
altatr ©   (2008-03-27 15:07) [16]

>Сергей М. ©   (27.03.08 14:58) [10]
>За каким лешим копировать всю запись, если можно скопировать только ее
>первичный ключ ?

А что это даст? FreeReport в отчет запихивает данные из одной таблицы. А если в ней будет только ключевое поле откуда она возьмет все остальное?
Фамилию , адрес? Будет по этому ключу искать в других таблицах?


 
Kolan ©   (2008-03-27 15:10) [17]

> А что это даст?

Так, ступай учи оператор SELECT, а только потом сюда за вопросами&#133


 
Palladin ©   (2008-03-27 15:10) [18]


> а если потребуется ввести степень придурковатости? )

так степень придурковатость и будет флагом :) но по-хорошему, конечно, Колян прав :)


> А если в ней будет только ключевое поле откуда она возьмет
> все остальное?
> Фамилию , адрес? Будет по этому ключу искать в других таблицах?
>

ага, для этого реляционные отношения и SQL и придумали


 
Сергей М. ©   (2008-03-27 15:14) [19]


> altatr ©   (27.03.08 15:07) [16]


> FreeReport в отчет запихивает данные из одной таблицы


Не надо с умным видом пороть чушь)


 
altatr ©   (2008-03-27 15:21) [20]

>Palladin ©   (27.03.08 15:05) [14]
>
>в таком случае еще проще добавить в таблицу флаг отвечающий за признак
>придурка...

Признак придурка в таблице есть.
Вот что происходить при нажатии кпопки:

По этому признаку

procedure TForm1.Button8Click(Sender: TObject);
begin

 while not table2.Eof do table2.Delete;   //чистим приемную таблицу
// ищем выделенные записи
while not table1.Eof do begin
if Table1.FieldByName("PRINT").AsBoolean = True Then begin // если есть атрибут то
 Table2.Append;
 Table2.FieldByName("FIO").AsString:=Table1.FieldByName("FIO").AsString;
 Table2.FieldByName("DOM").AsString:=Table1.FieldByName("DOM").AsString;
 Table2.FieldByName("SALDO").AsFloat:=Table1.FieldByName("SALDO").AsFloat;
 Table2.FieldByName("DOLG").AsFloat:=Table1.FieldByName("DOLG").AsFloat;
 Table2.Post;
end;
end;

frReport1.ShowReport; // открываем отчет в FreeReport

end;


 
Palladin ©   (2008-03-27 15:24) [21]

гениально... следуй совету Коляна в [17], заодно TXXQuery для себя откроешь....


 
altatr ©   (2008-03-27 15:26) [22]

>Сергей М. ©   (27.03.08 15:14) [19]
>> altatr ©   (27.03.08 15:07) [16]
>> FreeReport в отчет запихивает данные из одной таблицы
>Не надо с умным видом пороть чушь)

Почему чушь? В моей программе FreeReport действительно берет все данные из одной единственной таблицы.


 
Kolan ©   (2008-03-27 15:28) [23]

> if Table1.FieldByName("PRINT").AsBoolean = True Then begin
> // если есть атрибут то

Можно как советовал [12] Johnmen ©   (27.03.08 15:01) сделать. Нужно просто составить запрос на выборку из table1 и добавить туда условие: WHERE PRINT


 
Сергей М. ©   (2008-03-27 15:31) [24]


> В моей программе FreeReport действительно берет все данные
> из одной единственной таблицы


Не из таблицы , а из набора данных.
И ты ССЗБ, если этот НД ты формируешь средствами  TTable (или что у тебя там - не знаю, мне по барабану).


 
Johnmen ©   (2008-03-27 15:33) [25]


> Kolan ©   (27.03.08 15:28) [23]

Вообще-то я про локальный фильтр. Ибо про запросы автору ещё рано...:)


 
Kolan ©   (2008-03-27 15:35) [26]

> ССЗБ

Хорошо есть сокр.ру :)&#133
http://www.sokr.ru/?text=%D1%D1%C7%C1&where=abbr&exact=on


 
MsGuns ©   (2008-03-27 20:49) [27]

Автору сабжа надо открыть несколько великих индейских тайн:
Во-первых,
все-репорты в качестве вх.данных берут не "таблицы", а некий волшебный TDataSet, который может быть отображением таблицы БД, а может быть совершенно не похож ни на одну физическую таблицу БД, а содержать результат произвольной выборки из произвольного числа таблиц БД .
Во-вторых, в ентот самый датасет можно подсунуть самые разнообразные фиговины вместо выбранных полей, для чего у этого индейского артефакта имеются тайные рычаги вроде событий OnGetText или приблуды типа калькулируемых полей
В-третьих, древняя легенда индейского племени Акечукви гласит, что некоторые шаманы древности умели заставлять енти самые репорты выбирать данные не из всех полей датасетов, а только из тех, которые отображались в гридах.


 
Anatoly Podgoretsky ©   (2008-03-28 01:35) [28]

Не так это было!
Некоторые шаманы сумели брать данные из наборов данных и поехало.
Выборка из датасета это надстройка практически в любом генераторе.


 
Германн ©   (2008-03-28 02:04) [29]

Ну так объясните автору, что ему нужно читать книжки, чтобы понять смысл термина "набор данных" ака DataSet.


 
Anatoly Podgoretsky ©   (2008-03-28 22:04) [30]

> Германн  (28.03.2008 2:04:29)  [29]

Это его проблемы.



Страницы: 1 вся ветка

Текущий архив: 2008.04.20;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.021 c
15-1204510679
TUser
2008-03-03 05:17
2008.04.20
Декриптинг


8-1178974125
Veter
2007-05-12 16:48
2008.04.20
Удаление TImage


2-1206100800
Oleg_teacher
2008-03-21 15:00
2008.04.20
RxRichedit+PopuMenu


2-1206307378
batya-x
2008-03-24 00:22
2008.04.20
TrackBar и OnClick


2-1206090533
Dima
2008-03-21 12:08
2008.04.20
Что за бред происходит???