Главная страница
    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]
Форумы собссно и создаются для этого. Одни спрашивают, другие отвечают. Но некоторые личности берут на себя ответственность учить так сказать жизни, вместо того чтобы конкретно ответить на вопрос. Что ИМХО не всегда правильно.


 
MsGuns   (2003-09-03 17:18) [41]

>Vlad © (03.09.03 17:13) [40]

В мой огород, надо думать. Знаете, чем программист отличается от землекопа ? Первый спрашивает "куда копать ?", а второй "до куда ?".


 
Karnegi   (2003-09-03 17:19) [42]

MsGuns ты мне написал код я его попробовал. Повторяю второй раз он у меня работает но только:
1) Не Копирует поля в Table2 а заменяет их
2) Переносит только индексные поля
3) Выдает ошибку "Field "Nomer" cannot be modified", описание поле "Nomer" у меня стоит "+"(Autoincrement)

Чем эти вопросы непонятны были сразу ????


 
Anatoly Podgoretsky   (2003-09-03 17:21) [43]

Karnegi (03.09.03 17:06) [37]
Ну зачем им лишняя работа?


 
Karnegi   (2003-09-03 17:24) [44]

Vlad © (03.09.03 17:13) [40] Вот ето и говору, заместо того чтобы уже давно нормально дать ответ на мой вопрос некоторые начинают, и в результате всего этого получается уже больше 42 сообщений и большинство ЕРУНДА а не ответы


 
Smashich   (2003-09-03 17:25) [45]

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


 
Karnegi   (2003-09-03 17:30) [46]

Smashich © (03.09.03 17:25) [45] неужеди когда ты начинал програмировать у тебя все шло гладко и без ошибок? Наверняка ты тоже обращался к знающим людям за помошью которые тебе все обьясняли ? И в итоге ты научился хорошо програмировать, но не научился помагать людям а это одно из главных человеческих качеств, никакое знание Delphi тебе этого не даст, мне тебя очень жаль как человека


 
MsGuns   (2003-09-03 17:31) [47]

>Karnegi (03.09.03 17:19) [42]
1. Что в твоем понимании "копировать". С записью таблицы БД можно сделать только 3 операции: добавить новую, изменить, удалить (insert,edit,delete). Я тебе написал про а и б.
2. Без бутылки, девок и структуры таблицы не разобраться. Если не можешь обеспечить все услдовия, дай хоть последнее. Да, и еще переведи слово "переносит" - для глупых типа меня.
3. Судя по всему у тебя в св-ве поля Nomer (два раза щелкни на TTable и потом на этом поле, а в инспекторе посмотри его св-во ReadOnly - оно скорее всего = true) указано "только чтение"


 
Karnegi   (2003-09-03 17:34) [48]

MsGuns © (03.09.03 17:31) [47] Копировать для меня значит: Занесение в память данных строки, считываение ее из памяти и добавление во вторую таблицу а не замену активной записи


 
Vlad   (2003-09-03 17:38) [49]

>Karnegi (03.09.03 17:34) [48]
Если ты делаешь как написал MsGuns © (03.09.03 13:59) [3]
то замены быть не должно, так как происходит insert, после чего активной становится новая запись. А если ты делаешь по своему коду, который где-то откопал, тогда естественно.


 
Karnegi   (2003-09-03 17:39) [50]

Наверное все таки заместо Edit надо оставить Insert я только что попробовал, добавляет а не заменяет


 
Karnegi   (2003-09-03 17:41) [51]

Vlad © (03.09.03 17:38) [49] все я разобрался просто мне MsGuns говорил вместо inserta поставить edit, а щас работает, Только как сделать так чтобы он копировал все поля а не только индексные?


 
Anatoly Podgoretsky   (2003-09-03 17:43) [52]

У тебя опять возникает противоречие, скажем с Karnegi (03.09.03 14:00) [4]
Пока от тебя требует четко объяснить задачу и предоставить данные по таблицам. Ты же ищешь телепатов и большой учебник по азам.


 
Karnegi   (2003-09-03 17:45) [53]

Все теперь все работает, поля копирует все!!!!!
Всем спасибо за дискусию если ее можно таковой назвать:)


 
Anatoly Podgoretsky   (2003-09-03 17:46) [54]

Такой ее назвать нельзя, это был монолог и вопросы к тебе.


 
Karnegi   (2003-09-03 17:48) [55]

Завтра будет новый день и новые вопросы, завтра я вам задам вопрос по фильтрации:))) и надеюсь что сообщений больше будет полезных


 
Vlad   (2003-09-03 17:49) [56]

2Anatoly Podgoretsky © (03.09.03 17:43) [52]
А тут полно телепатов. Я вот тоже учусь потихоньку.
Ну не понял Karnegi (03.09.03 14:00) [4] о какой таблице речь. Думал что о источнике, хотя на самом деле речь шла об inserte в таблицу - приемник. Угадал ?


 
Karnegi   (2003-09-03 17:49) [57]

Anatoly Podgoretsky © (03.09.03 17:46) [54] Ниговори:))))


 
Smashich   (2003-09-03 17:49) [58]

ндя.
2 Karnegi
извини,если что...


 
MsGuns   (2003-09-03 17:50) [59]

>Karnegi (03.09.03 17:34) [48]
>Копировать для меня значит: Занесение в память данных строки, считываение ее из памяти и добавление во вторую таблицу а не замену активной записи

Делаю еще одну попытку.

При отображении НД записи в память уже скопированы без тебя и даже независимо от того хочешь ты этого или нет.
Если ты все-таки добавляешь запись, то тебе надо метод Insert, а не Edit. Оба эти метода действуют не на запись, а на НД (в твоем случае-TTable), сообщая компоненте, что сейчас в таблицу будут добавлять новую запись или изменять текущую. тебе надо почитать хэлп по базовым понятиям BDE: TTable, TQuery, TField и т.д. Это можно сделать, кликнув на соотв. пиктографке в галерее компонент и нажать {F1}. Далее там все ясно по контексту. Правда все на англицком, если проблемы, то тогда статьи или книжки в инете или магазинах (для начинающих рекомендую "Программирование баз данных в Дельфи 6" В.Фарнонова.

Кстати, при вставке все равно надо убрать Readolnly ключевых полей.


 
Karnegi   (2003-09-03 17:50) [60]

2Anatoly Podgoretsky © (03.09.03 17:43) [52] Да, но ето теперь неважно главное что заработало


 
Anatoly Podgoretsky   (2003-09-03 17:50) [61]

Это смотря как задашь и как поймешь вопросы, короче все зависит только от тебя.


 
Karnegi   (2003-09-03 17:54) [62]

MsGuns, все заработало, Спасибо, буду надеяться завтра на твою помошь по поводу фильтрации, думаю что завтра ты будешь более снесходителен к новичкам как я и у тебя хватит терпения обьяснитьчтог к чему


 
MsGuns   (2003-09-03 17:54) [63]

Прадон, Фаронова, а не Фарнонова. ;)))

ЗЫ. Самое интересное, что в самом начале было ясно сказано как делать, приведен правильный код. Нет, надо было развести здесь целую лужу.


 
Karnegi   (2003-09-03 17:56) [64]

Зато пообщались:))))


 
Vlad   (2003-09-03 17:57) [65]

>MsGuns © (03.09.03 17:54) [63]
Не правильный! Там точки с запятой после insert не хватало! :-)))


 
Karnegi   (2003-09-03 17:57) [66]

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


 
Karnegi   (2003-09-03 17:59) [67]

RE:MsGuns © (03.09.03 17:54) [63]
RE:Не правильный! Там точки с запятой после insert не хватало! :-)))

Ну уж извините, чтобы точку с запятой поставить мозгов у меня хватило:)))


 
Anatoly Podgoretsky   (2003-09-03 17:59) [68]

Мы то же, иначе зачем мы стараемся?


 
Karnegi   (2003-09-03 18:05) [69]

Ето седня у нас был первый день занятий в универе, как раз мы начали проходить БазыДанных, и я решил подойти и задать этот вопрос преподователю, Я говорю "Не могли бы вы мне помочь с базой данных" он даже слушать не стал и говорит "Это не входит в мои обязаности" Ето я все к тому что вот из за таких людей как он и губится на корню интузиазм програмирования у начинающих


 
MsGuns   (2003-09-03 18:25) [70]

Я получил письмо с просьбой ответить, но, как я полагаю, необходимость писать уже отпала ?


 
Karnegi   (2003-09-03 18:34) [71]

Да, я его сразу же после твоего овета отправил. MsGuns ты завтра будешь на этом форуме?


 
Sandman25   (2003-09-03 18:35) [72]

MsGuns попал :)


 
Karnegi   (2003-09-03 18:38) [73]

:))))) Завтра я думаю вопросы у меня будут более точными, прочитав столько сообщений как правильно задавать вопросы, думаю ето пошло мне на пользу:))))


 
Vovchik_A   (2003-09-03 18:40) [74]

2 MsGuns ©
Ну , Серега, фсё... В натуре попал :)


 
Anton_2003   (2003-09-04 01:14) [75]

Вау! Как много ответов, может и мой сойдет.
procedure TPRICE.ToolButton10Click(Sender: TObject);
begin
DM.Table2.Insert;
DM.Table2["Tovar;Cena"]:=DM.table1["Tovar;Cena"];
DM.Table2.Post;
end;


 
Karnegi   (2003-09-04 08:13) [76]

Anton_2003 (04.09.03 01:14) [75]
Спасибо я уже сделал.



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

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

Наверх




Память: 0.63 MB
Время: 0.011 c
6-82366
ManGorn
2003-07-07 09:48
2003.09.25
Events у idTCPServer


7-82532
Dionis
2003-07-14 16:05
2003.09.25
Опять CDROM


14-82470
СуперТупик
2003-09-06 16:48
2003.09.25
Вирус


14-82463
iNew
2003-09-09 08:24
2003.09.25
Как вам MySql?


14-82420
NailMan
2003-09-08 19:13
2003.09.25
Kreed и как оно себе на уме





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский