Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Delphi: Базы данных и репортинг > Оцените пожалуйста код |
Автор: Chechaco 28.10.2005, 06:47 | ||
Здравствуйте все, написал код который переносит данные из StringGrid в деталь-таблицу Table2, в соответствии с записями в мастер-таблице Query1. Оцените пожалуйста, имеет ли сие творение право на жизнь. У меня все это работает, но насколько это будет надежно в будущем не знаю.
|
Автор: <Spawn> 31.10.2005, 05:55 |
Имхо, неудачный код - стоит задуматься о еге переделке ![]() Далее, свойство RecordCount не желательно использовать, т.к. если ты перейдешь на клиент-серверную СУРБД, то оно вряд ли будет работать... Далее, зачем ты используешь StringGrid, когда есть DBGrid? |
Автор: Chechaco 31.10.2005, 07:01 |
Query1.Last я действительно приписал ни к селу ни к городу. Данная кверя (мастер) будет содержать не более 20 записей. Клиент-серверной моя база никогда не будет, специфика не та. StringGrid я использую чтобы видеть все записи деталь-таблицы соответствующие записям мастер-таблицы на определенную дату (каждой записи мастер-таблицы соответствует только одна запись деталь таблицы на определенную дату). Если использовать DBGrid то я могу видеть только одну запись в деталь-таблице - ту, которой соответствует запись в мастер-таблице на которой находится курсор. Я хотел использовать две Query (мастер-детали) но не знаю как связать их через Query. |
Автор: YurikGL 31.10.2005, 19:11 | ||
Долго читал.... плохо понял что надо, но подозреваю, что нужно что-то вроде такого: Есть некая таблица со, скажем, приходами (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 1.11.2005, 05:06 |
Честно говоря я когда потом прочитал, тоже плохо понял что хотел сказать ![]() А нужно мне как раз обратное. У меня есть таблица с размерами (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 1.11.2005, 10:24 | ||
Так создай запрос и повесь его на AfterScroll. |
Автор: Chechaco 1.11.2005, 11:25 | ||
Так пробовал, объединял в одном запросе 2 таблицы, в этом случае записи не редактируются, только просмотр... |
Автор: bas 1.11.2005, 13:30 |
А запросы по умолчанию только для чтения . Посмотри на компонент UpdateSql . |
Автор: Chechaco 1.11.2005, 18:06 |
UpdateSQL пробовал, все равно не сохраняет, просто не все запросы (в частности объединенные таблицы) могут редактироваться, насколько я знаю. Видимо придется работать с Table, тем более что база будет локальная. |
Автор: YurikGL 1.11.2005, 20:32 | ||
Давай определимся, на каждый день недели (понедельник, вторник) или каждый день вообще? Если на каждый день недели, заранее создаются записи на все возможные сочетания, просто в поле позиции ставишь пусто. Таким образом в гриде будет твоя пустая ячейка. Теперь, при движении по Table1 тебе нужно просто выставлять курсор на запись в Table2, которая соответсвует размеру (который выбран в Table1) и сегодняшнему дню недели? Дык пропиши в datasource1.onDataChange код типа Table2.locate (здесь локейтишь по двум полям) или lookup (не помню точно). |
Автор: Chechaco 2.11.2005, 10:38 | ||||||
На каждый день вообще, т.е. 1.10.2005 и т.д.
Да, мне нужно выставлять курсор в Table1 (Размеры) на тот размер, который соответствует ячейке в Table2, причем выставлять перемещаясь по Table2 (т.е. переместился на ячейку вниз и в Table1 курсор тоже перемещается на ячейку вниз). А день недели должен браться из DateTimePicker. Написал следующее:
В этом случае у меня курсор уже при загрузке устанавливается на запись со значением 50 и никуда не двигается. |