Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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


Страницы:   1 2

altatr ©   (2008-03-27 13:13:00) 

Имеются две полностью одинаковые таблицы. 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;


Anatoly Podgoretsky   (2008-03-28 22:04:00) [1]

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

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


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

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


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

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


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

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


Kolan   (2008-03-27 15:35:00) [5]

> ССЗБ

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


Johnmen   (2008-03-27 15:33:00) [6]


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

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


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


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


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


Kolan   (2008-03-27 15:28:00) [8]

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

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


altatr   (2008-03-27 15:26:00) [9]

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

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


Palladin   (2008-03-27 15:24:00) [10]

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


altatr   (2008-03-27 15:21:00) [11]

>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;


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


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


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


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


Palladin   (2008-03-27 15:10:00) [13]


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

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


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

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


Kolan   (2008-03-27 15:10:00) [14]

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

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


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

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

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


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


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

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


Palladin   (2008-03-27 15:05:00) [17]

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


Kolan   (2008-03-27 15:02:00) [18]

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

Нет, только то что в селекте…


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

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

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


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

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

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


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


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


Вот и все.
:)


Johnmen   (2008-03-27 15:01:00) [19]

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


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

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

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

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


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо