Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 16.04.2008, 14:24
Horror Horror вне форума
Прохожий
 
Регистрация: 16.04.2008
Сообщения: 17
Репутация: 10
По умолчанию копия записи

Как скопировать запись из DBgrid1 в DBgrid2 если струтура гридов одинаковая, но DBgrid2 находится на другой форме?
Ответить с цитированием
  #2  
Старый 16.04.2008, 14:40
xchrom xchrom вне форума
Начинающий
 
Регистрация: 08.04.2008
Сообщения: 177
Репутация: 15
По умолчанию

копировать надо из DataSet1 в DataSet 2, гриды это только удобное средство для просмотра данных, а не данные...
Ответить с цитированием
  #3  
Старый 16.04.2008, 16:20
Horror Horror вне форума
Прохожий
 
Регистрация: 16.04.2008
Сообщения: 17
Репутация: 10
По умолчанию

если у меня в гриде 1000 записей и мне нада скопировать 739-ую в другой грид (или любую другую на которой стоит указатель) как это сделать?
Ответить с цитированием
  #4  
Старый 16.04.2008, 16:33
xchrom xchrom вне форума
Начинающий
 
Регистрация: 08.04.2008
Сообщения: 177
Репутация: 15
По умолчанию

к примеру так тут копируется запись из набора 2 в набор 1:
вместо TField-ов как у меня можно напрямую t2.FieldByName('ID').Value например
Код:
  
t2 перед этим устанавливаешь на нужную запись
t1.AppendRecord([t2id.Value,t2data.Value,t2sum.Value]);

Последний раз редактировалось xchrom, 16.04.2008 в 16:47.
Ответить с цитированием
  #5  
Старый 16.04.2008, 18:38
Horror Horror вне форума
Прохожий
 
Регистрация: 16.04.2008
Сообщения: 17
Репутация: 10
По умолчанию

мне нада сделать так:
на главной форме распологается грид в который вбито 1000 наименований продукции. Так же существует форма Заказ на которой распологается второй грид. Мне нужно чтобы, установив курсор на любой записи в главном гриде и нажав на кнопку Добавить в заказ эта запись скопировалась во второй грид, который находится на форме Заказ.
Само собой первый и второй грид абсолютно одинаковы, т.е. в таблицах все типы и размер полей равны.
Ответить с цитированием
  #6  
Старый 17.04.2008, 15:01
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Сообщение от Horror
мне нада сделать так:
на главной форме распологается грид в который вбито 1000 наименований продукции. Так же существует форма Заказ на которой распологается второй грид. Мне нужно чтобы, установив курсор на любой записи в главном гриде и нажав на кнопку Добавить в заказ эта запись скопировалась во второй грид, который находится на форме Заказ.
Само собой первый и второй грид абсолютно одинаковы, т.е. в таблицах все типы и размер полей равны.

Какие компоненты для доступа к данным (т.е. DataSet'ы)?

Если TTable или обновляемый TQuery, то путем простой вставки записи е копирования ее содержимого. При этом путь к источника данных надо указывать полностью (с указанием формы).
Примерно так:
Код:
OrderForm.tOrder.Insert;
For I := 0 To OrderForm.tOrder.Fields.Count-1 Do
  OrderForm.tOrder.Fields[i].Value := SkladForm.tSklad.FieldByName(OrderForm.tOrder.Fields[i].FieldName).Value;
OrderForm.tOrder.Post;
Здесь предполагается, что обе формы созданы (исп. соотв. переменные OrderForm и SkladForm) и в источнике tSklad запись уже спозиционированна.

Если просто TQuery, то можно просто выполнить запрос типа
Код:
INSERT INTO Order (SELECT * FROM Storage)
Order - таблица заказа
Storage - таблица склада (т.е. товаров).
Данный запрос подразумевает точную идентичность этих таблиц. Если таблицы не идентичны (просто достаточно что бы был разный порядок полей), то в части SELECT вместо * укажи список полей в том порядке, который соответсвует таблице Order.
Ответить с цитированием
  #7  
Старый 22.04.2008, 17:49
Horror Horror вне форума
Прохожий
 
Регистрация: 16.04.2008
Сообщения: 17
Репутация: 10
По умолчанию

попробовал сделать вот так
Цитата:
OrderForm.tOrder.Insert;
For I := 0 To OrderForm.tOrder.Fields.Count-1 Do
OrderForm.tOrder.Fields[i].Value := SkladForm.tSklad.FieldByName(OrderForm.tOrder.Fiel ds[i].FieldName).Value;
OrderForm.tOrder.Post;

пишет при нажатии на кнопку Копировать запись вот что : Field 'Num' cannot be modified. Num - самое первое поле в таблице, значение ставится счётчиком.
Ответить с цитированием
  #8  
Старый 22.04.2008, 18:01
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну правильно пишет. Num скорее всего первичный ключ. Его трогать никак нельзя. Сделай проверку на это поле. Должно тогда получиться что-то вроде:

Код:
OrderForm.tOrder.Insert;
For I := 0 To OrderForm.tOrder.Fields.Count-1 Do
  If OrderForm.tOrder.Fields[i].FieldName = 'Num' 
    Then Continue 
    Else OrderForm.tOrder.Fields[i].Value := SkladForm.tSklad.FieldByName(OrderForm.tOrder.Fiel ds[i].FieldName).Value;
OrderForm.tOrder.Post;  
Ответить с цитированием
  #9  
Старый 22.04.2008, 18:13
Horror Horror вне форума
Прохожий
 
Регистрация: 16.04.2008
Сообщения: 17
Репутация: 10
По умолчанию

Спасибо тебе большое добрый человек...всё работает
Ответить с цитированием
  #10  
Старый 22.04.2008, 19:14
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

всегда пожалуйста
Ответить с цитированием
  #11  
Старый 01.05.2008, 11:55
mixcraft mixcraft вне форума
Прохожий
 
Регистрация: 01.05.2008
Сообщения: 2
Репутация: 10
По умолчанию

При копировании записи из одной таблицы в другую не удается скопировать запись если не все поля видимы. Как можно решить данную проблему
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 10:50.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025