Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.09.25;
Скачать: [xml.tar.bz2];

Вниз

Помогите с копированием строк   Найти похожие ветки 

 
Karnegi   (2003-09-03 13:39) [0]

У меня на форме имеются Table1 и Table2 (соответсвенно и две таблицы Paradox), подскажите как мне сделать так чтобы при нажатии кнопки выбранная строка копировалась из table1 в Table2(поля у этих таблиц одинаковые).


 
Karnegi   (2003-09-03 13:53) [1]

Извеняюсь за неточность, наверно копировать не из Table1 в Table2 а из Dbgrid1 в Dbgrid2


 
stone   (2003-09-03 13:56) [2]


> Karnegi (03.09.03 13:53) [1]


Как раз в сабже было правильно. Только в чем проблема? Метод Insert неизвестен?


 
MsGuns   (2003-09-03 13:59) [3]

>Karnegi (03.09.03 13:53) [1]
>Извеняюсь за неточность, наверно копировать не из Table1 в Table2 а из Dbgrid1 в Dbgrid2

Извиняться не за что - в первый раз получилось точнее.

with Table2 do
begin
insert
for i :=0 to Fields.count-1 do
Fields[i].Value := Table1.Fields[i].Value;
try
post;
except
Showmessage("Не лизе, батько !");
cancel;
exit;
end;
end
table2.Refresh;

Но это при одинаковых структурах


 
Karnegi   (2003-09-03 14:00) [4]

Так insert это же втавить запись в таблицу, а мне нужно уже заполненую данными строку (Ф.И.О дата рожд. телефон и т.д.) копировать в другую таблицу с точно такими же полями.


 
MsGuns   (2003-09-03 14:07) [5]

>MsGuns © (03.09.03 13:59) [3]

только вместо Insert надо поставить Edit. Поля текущей записи первой таблы (выделенная в 1 гриде) скопируются в поля текущей записи второй таблы (выделенной во 2 гриде)


 
Smashich   (2003-09-03 14:08) [6]

2 Karnegi (03.09.03 14:00) [4]
ты даешь. а что такое копировать? взять(SELECT) из одного места и вставить(INSERT) в другое. или тебе нечто другое нужно?


 
Smashich   (2003-09-03 14:10) [7]

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


 
Karnegi   (2003-09-03 14:14) [8]

MsGuns спасибо, копирует но только выдает ошибку "Field "Nomer" cannot be modified", описание поле "Nomer" у меня стоит "+"(Autoincrement), может из таблицы вообще удалить это поле?


 
Karnegi   (2003-09-03 14:18) [9]

Msguns и почему то он копирует только индексирование поля, а остальные поля получаются пустыми


 
Smashich   (2003-09-03 14:19) [10]

Karnegi (03.09.03 14:14) [8]
автоикримент удалячть не надо, вставлять в него значения тоже. если конечно тебе не принципиально значение ключа(боюсь спросить а слово ключ знакомо?). если не принципиально то - просто не редактируй. елси принципиально - смени автоинримент на integer


 
Karnegi   (2003-09-03 14:24) [11]

Если копирует только индексные поля, это значит что мне надо все поля индексировать?


 
Karnegi   (2003-09-03 15:25) [12]

Нашел код по копированию строк из одной таблицы в другую

procedure TTableRecordCopy(Source, Destination: TTable);
var
i, lCount: Integer;
begin
lCount := Source.FieldCount;
for i := 0 to lCount - 1 do
if (not Source.Fields[i].IsNull) and (Source.Fields[i].CanModify) then
Destination.FieldByName(Source.Fields[i].FieldName).Assign(Source.Fiel ds[i]);
end;

Только как сделать чтобы он копировал при нажатии кнопки?


 
Anatoly Podgoretsky   (2003-09-03 15:30) [13]

Karnegi (03.09.03 14:14) [8]
Тебя слово Auto не удивляет?


 
Karnegi   (2003-09-03 15:34) [14]

Anatoly Podgoretsky всмысле Auto? Можно поподробннее а то ето моя первая БД


 
stone   (2003-09-03 15:36) [15]

Autoincrement означает что значение поле устанавливается autoматически, т.е. ему нельзя присвоить произвольное значение


 
Karnegi   (2003-09-03 15:38) [16]

Ето то понятно мне бы разобраться как вот этот код присвоить кнопке?? Подсажи если знаешь

procedure TTableRecordCopy(Source, Destination: TTable);
var
i, lCount: Integer;
begin
lCount := Source.FieldCount;
for i := 0 to lCount - 1 do
if (not Source.Fields[i].IsNull) and (Source.Fields[i].CanModify) then
Destination.FieldByName(Source.Fields[i].FieldName).Assign(Source.Fiel ds[i]);
end;


 
MsGuns   (2003-09-03 15:43) [17]

>Karnegi (03.09.03 15:25) [12]
Приведенный тобою код практически от моего не отличается. Не надо пытаться тупо выдирать откуда-то куски кода и лепить их в свою прогу, не осмысливая.
Копирование MsGuns © (03.09.03 13:59) [3] есть буквальный ответ на твой вопрос. Так не делается. Хотя бы потому, что таким образом не учитываются ограничения, наложенные на целевую таблицу (первичный ключ или уник.индекс только частные случаи таких ограничений).
Попробуй взлянуть на таблицы не как на кучи данных, сваленные в грид, а как на "живые" сущности и сразу будет понятна порочность такого "гридного" подхода. Типа как можно копировать адрес и данные паспорта Иванова в картотеку его нового отдела, не проверив номер карточки ?


 
Karnegi   (2003-09-03 15:45) [18]

Ну а откуда я придумаю та код если я делаю БД первый раз вот и приходится искать кодинг по инету.


 
Smashich   (2003-09-03 16:29) [19]

2 Karnegi (03.09.03 15:45) [18]
не все так начинали:) если уж ищешь по инету - так не код ищи а знания. тогда и вопросов таких не возникнет.


 
Karnegi   (2003-09-03 16:32) [20]

Ну может все таки кто нибудь подскажет как все это дело с копированием сделать так чтоб работало? А то у нас тема поменялась на то, как учиться Delphi:)


 
Smashich   (2003-09-03 16:32) [21]

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


 
Smashich   (2003-09-03 16:33) [22]

Karnegi (03.09.03 16:32) [20]
лично я не подскажу. ибо все таки хочеться что бы ты сам разобрался что за код ты пытаешься "скопировать".


 
Karnegi   (2003-09-03 16:34) [23]

Smashich ты можешь обьяснить нормально???? То что ты гений в Delphi ето я уже понял


 
Karnegi   (2003-09-03 16:36) [24]

Если бы я мог разобраться сам я бы по форумам не лазил


 
Karnegi   (2003-09-03 16:37) [25]

На то форумы и существуют чтобы помогать а не блестать КРАСНОРЕЧИЕМ!!!


 
sewer1   (2003-09-03 16:42) [26]

А в чем проблема-то? Ну положи кнопку на форму, щелкни по ней и запиши код.


 
Smashich   (2003-09-03 16:42) [27]

2 Karnegi (03.09.03 16:34) [23]
не обижайся. что такое процедура? и как ее можно вызвать "при нажатии конопки"?
ты представляешь что делает твой "код по копированию строк из одной таблицы в другую"?. и чем от отличается от ранее приведенного by MsGuns ©. ответив на эти вопросы - получишь массу иныормации.


 
Vlad   (2003-09-03 16:43) [28]

>sewer1 (03.09.03 16:42) [26]
Ну вот, раскрыл все карты, млин !


 
Karnegi   (2003-09-03 16:48) [29]

Процедуры то разные: procedure TForm1.Button1Click(Sender: TObject)
и procedure TTableRecordCopy(Source, Destination: TTable);


 
Vlad   (2003-09-03 16:49) [30]

а че, трудно из одной процедуры вызвать другую ?


 
Smashich   (2003-09-03 16:51) [31]

все. иди читай. а то это караул. процедуры разные.


 
Karnegi   (2003-09-03 16:51) [32]

Для меня трудно, я ето делаю в первый раз, а вы начинаете вые....ся, неможете нормально подсказать


 
Vlad   (2003-09-03 16:53) [33]

TForm1.Button1Click(Sender: TObject)
begin
TTableRecordCopy(Table1, Table2);
end;

Где Table1 - источник, Table2 - приемник


 
MsGuns   (2003-09-03 16:54) [34]

>Karnegi (03.09.03 16:34)

Не кипятись,- выглядишь смешно ;)

Начни с того, что разберись в том, ЧТО ты хочешь сделать, т.е. какую цель преследуешь, кому это надо, чтО это ему даст и т.д.
Затем собери всю "первичку", т.е. структуру информации, в каком виде хранится, печатается, заполняется.
После этого построй всю эту кухню в виде иерархической модели с горизонтальными связями.
Вот теперь соьственно можно приступать к проектированию (но не программированию)
При проектировании информация разбивается на объекты, опреляются св-ва этих объектов, связи между объектами. Всем объектам ставится в соответствие некий уникальный идентификатор, однозначно указывающий на своего владельца (как № в паспорте)
Далее разборки с общими св-вами, которые можно "вынести за скобки", т.е. в справочники. Затем все размещается по таблицам, полям и записям даются имена и типы данных. Между ними устанавливаются связи (иногда только на бумаге, если реализованы будут "на клиенте")

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

Все это можно почитать практически в любой книжке по БД, а если нет денег или времени искать книги, то масса инфы валяется в статьях и даже книгах. Если бы ты задал вопрос примерно так:
"Мне надо создать программу по учету абонентской платы за телефон. БД - парадокс. Где мне найти информацию подобного рода ?", то 99%, что получил бы нормальные советы и ссылки на литературу. Но ты сначала написал уродца, теперь его тщетно пестуешь, пытаясь добиться толка. Когда не выходит, идешь в форум с вопросом "Почему у меня в 384 строке эксепшн ?" и недоумеваешь, когда вместо помощи с тебя начинают прикалываться.
А теперь вообще окрысился ;))


 
Smashich   (2003-09-03 17:01) [35]

и не забудь сказать спасибо за науку;) шучу.


 
Sandman25   (2003-09-03 17:04) [36]

[34] MsGuns © (03.09.03 16:54)

Хорошо написали. Только мне сразу вспомнился анекдот с концовкой
- Папа, а ты сейчас с кем разговаривал? :)


 
Karnegi   (2003-09-03 17:06) [37]

MsGuns обьясни пожалуста зачем тогда вобще создаются форумы? Почему не сделать бы тогда одни ссылки на электронные книги и книжные интернет магазины? Форумы для того и делаются чтобы задавать конкретные вопросы и получать на них ответы, и ты сам это прекрасно знаешь. А тут больше половины пытаются показать какие они умные а все остальные дураки.


 
Smashich   (2003-09-03 17:09) [38]

2 Sandman25 © (03.09.03 17:04) [36] - в точку!
см. Karnegi (03.09.03 17:06) [37]:)


 
MsGuns   (2003-09-03 17:12) [39]

>Karnegi (03.09.03 17:06) [37]

Если будешь элементарно психовать (флэймить) или нести пургу все в том же духе (флудить), то все просто свалят с твоей ветки.
Тебе же сказано: ставь вопрос четко и конкретно - получишь такой же ответ Вопрос в сабже ничего, кроме недоумения, не вызывает, а поправка к нему - веселой улыбки.
Поверь, строить кого-то или чего-то перед тобой совсем не делает чести никому, а тем более опытным людям, коих здесь на форуме не мало. многие просто не замечают подобных веток.


 
Vlad   (2003-09-03 17:13) [40]

>Karnegi (03.09.03 17:06) [37]
Форумы собссно и создаются для этого. Одни спрашивают, другие отвечают. Но некоторые личности берут на себя ответственность учить так сказать жизни, вместо того чтобы конкретно ответить на вопрос. Что ИМХО не всегда правильно.



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

Форум: "Базы";
Текущий архив: 2003.09.25;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.54 MB
Время: 0.015 c
1-82251
AHTOH
2003-09-14 22:19
2003.09.25
Стандартное меню для TEdit в виндах


3-82147
АлеКс
2003-09-03 04:13
2003.09.25
Не срабатывают события TADOQuery


1-82286
BustaBoss
2003-09-15 04:13
2003.09.25
Ini файлы


14-82385
jack128
2003-09-09 11:01
2003.09.25
Именинники 9 сентября


4-82562
stkatch
2003-07-22 11:04
2003.09.25
Вызов MessageBox из сервиса (службы)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский