Форум: "Начинающим";
Текущий архив: 2008.04.20;
Скачать: [xml.tar.bz2];
ВнизКак скопировать целиком строку в таблице. Найти похожие ветки
← →
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 ?
Нет, только то что в селекте…
> У таблиц только структура одинаковая.
> А данные из первой во вторую будут запихиваться по отределенному
> признаку.
Имхо, правильно иметь 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, а только потом сюда за вопросами…
← →
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]> ССЗБ
Хорошо есть сокр.ру :)…
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;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.042 c