![]() |
|
![]() ![]() ![]() |
|
Chechaco |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 6.10.2005 Где: из Канска Репутация: 1 Всего: 1 |
Здравствуйте все, написал код который переносит данные из StringGrid в деталь-таблицу Table2, в соответствии с записями в мастер-таблице Query1. Оцените пожалуйста, имеет ли сие творение право на жизнь. У меня все это работает, но насколько это будет надежно в будущем не знаю.
|
|||
|
||||
<Spawn> |
|
|||
![]() Око кары:) ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2776 Регистрация: 29.1.2003 Где: Екатеринбург Репутация: 2 Всего: 64 |
Имхо, неудачный код - стоит задуматься о еге переделке
![]() Далее, свойство RecordCount не желательно использовать, т.к. если ты перейдешь на клиент-серверную СУРБД, то оно вряд ли будет работать... Далее, зачем ты используешь StringGrid, когда есть DBGrid? -------------------- "Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков. |
|||
|
||||
Chechaco |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 6.10.2005 Где: из Канска Репутация: 1 Всего: 1 |
Query1.Last я действительно приписал ни к селу ни к городу. Данная кверя (мастер) будет содержать не более 20 записей.
Клиент-серверной моя база никогда не будет, специфика не та. StringGrid я использую чтобы видеть все записи деталь-таблицы соответствующие записям мастер-таблицы на определенную дату (каждой записи мастер-таблицы соответствует только одна запись деталь таблицы на определенную дату). Если использовать DBGrid то я могу видеть только одну запись в деталь-таблице - ту, которой соответствует запись в мастер-таблице на которой находится курсор. Я хотел использовать две Query (мастер-детали) но не знаю как связать их через Query. |
|||
|
||||
YurikGL |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 196 Регистрация: 5.7.2005 Где: Уфа Репутация: нет Всего: 2 |
Долго читал.... плохо понял что надо, но подозреваю, что нужно что-то вроде такого: Есть некая таблица со, скажем, приходами (query1). У каждого прихода есть много позицей (вторая таблица query2). Таким образом есть два грида и при движении по первому (т.е. по приходам) нужно во второй таблице показывать только позиции данного прихода. Если моя догадка верна, то делается это так: query1.text:='select * from приходы' //это понятно - выбираем все приходы к query1 подцеплен datasource1. У datasource1 в событии OnDataChange прописываем примерно следующий код query2.close query2.text:='select * from ПозицииПриходов where ПозицииПриходов.idПрихода='+query1.fieldbyName('idПрихода').asString query2.open Разумеется, к query2 должен быть привязан datasource2 к которому зацеплен грид. В этом случае, при движени по гриду с приходами (он завязан на query1) будет выполняться событие datasource1.onDataChange и данные в query2 будут меняться динамически автоматически. А стринг-грид для этих целей абсолютно не подходит... --------------------
|
|||
|
||||
Chechaco |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 6.10.2005 Где: из Канска Репутация: 1 Всего: 1 |
Честно говоря я когда потом прочитал, тоже плохо понял что хотел сказать
![]() А нужно мне как раз обратное. У меня есть таблица с размерами (Query1) Каждому размеру соответсвует много позиций (вторая таблица, у меня Table2) Пока все сходится, как и у YurkGL, но тут сходство заканчивается. Мне нужно чтобы при движении по таблице с размерами я видел позиции не только для данного размера, а все позиции для всех размеров на какую-либо дату Т.е. для каждого размера существует много позиций, но на каждый день недели позиция может быть только одна. Если какому либо размеру не соответствует позиции на эту дату, то у меня должна быть пустая ячейка, чтобы я мог ввести в нее значение, при необходимости (дата при этом заполняется автоматически). Вроде этого: Query1 Table2 Размеры Дата | Объем ---------- ---------------|----------- 25х100 27.10.2005 | 0,265 25х125 27.10.2005 | 5,236 25х150 27.10.2005 | 8,167 25х175 | 25х200 | 25х225 27.10.2005 | 4,236 50х100 27.10.2005 | 1,141 Поэтому я и делал Table2 в СтрингГриде, чтобы видеть все позиции, не зависимо от положения курсора в Query1. |
|||
|
||||
bas |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 446 Регистрация: 14.8.2002 Где: Молдова, Кишинев Репутация: 1 Всего: 2 |
Так создай запрос и повесь его на AfterScroll. |
|||
|
||||
Chechaco |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 6.10.2005 Где: из Канска Репутация: 1 Всего: 1 |
Так пробовал, объединял в одном запросе 2 таблицы, в этом случае записи не редактируются, только просмотр... |
|||
|
||||
bas |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 446 Регистрация: 14.8.2002 Где: Молдова, Кишинев Репутация: 1 Всего: 2 |
А запросы по умолчанию только для чтения .
Посмотри на компонент UpdateSql . |
|||
|
||||
Chechaco |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 6.10.2005 Где: из Канска Репутация: 1 Всего: 1 |
UpdateSQL пробовал, все равно не сохраняет, просто не все запросы (в частности объединенные таблицы) могут редактироваться, насколько я знаю. Видимо придется работать с Table, тем более что база будет локальная.
|
|||
|
||||
YurikGL |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 196 Регистрация: 5.7.2005 Где: Уфа Репутация: нет Всего: 2 |
Давай определимся, на каждый день недели (понедельник, вторник) или каждый день вообще? Если на каждый день недели, заранее создаются записи на все возможные сочетания, просто в поле позиции ставишь пусто. Таким образом в гриде будет твоя пустая ячейка. Теперь, при движении по Table1 тебе нужно просто выставлять курсор на запись в Table2, которая соответсвует размеру (который выбран в Table1) и сегодняшнему дню недели? Дык пропиши в datasource1.onDataChange код типа Table2.locate (здесь локейтишь по двум полям) или lookup (не помню точно). --------------------
|
|||
|
||||
Chechaco |
|
||||||
![]() Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 6.10.2005 Где: из Канска Репутация: 1 Всего: 1 |
На каждый день вообще, т.е. 1.10.2005 и т.д.
Да, мне нужно выставлять курсор в Table1 (Размеры) на тот размер, который соответствует ячейке в Table2, причем выставлять перемещаясь по Table2 (т.е. переместился на ячейку вниз и в Table1 курсор тоже перемещается на ячейку вниз). А день недели должен браться из DateTimePicker. Написал следующее:
В этом случае у меня курсор уже при загрузке устанавливается на запись со значением 50 и никуда не двигается. |
||||||
|
|||||||
![]() ![]() ![]() |
Правила форума "Delphi: Базы данных и репортинг" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |