|
|
|
грид
|
|||
|---|---|---|---|
|
#18+
ГРИД Код: plaintext 1. 2. 3. 4. Зарплата-целое число. КОД,ФИО-Table1 {ReadOnly} Зарплата-Table2 Как сделать, что если будет введена зарплата, то в Table2 сохраняются следующие данные: КОД,ФИО, и Зарплата. Зарплату могут иметь не все работники. С уважение chukcha ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2006, 09:20 |
|
||
|
грид
|
|||
|---|---|---|---|
|
#18+
Че-то я не пойму. Указывается, что код и фио - таблица 1, а эти же данные должны сохранятся таблице 2. В чем же между ними разница? Я еще понимаю, что в таб 1 держатся сведения о работнике, а в таб 2 только зарплата, таблицы свзяываются по полю код. Выборка отсюда будет элементарная. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2006, 18:58 |
|
||
|
грид
|
|||
|---|---|---|---|
|
#18+
Ну, вообще-то, таблицы должны быть нормализованы. Т.е. первая таблица - это карточка сотрудника (ФИО), а вторая таблица - это зарплата и ссылка на запись карточки сотрудника. В той постановке как у тебя, реализовать в принципе можно, но сложно. Проблема в том, что Grid отображает реальные данные. Нет данных - ничего не отображается. Это значит, что для ввода зарплаты уже должна быть создана заранее запись с пустой зарплатой, но со ссылкой на карточку сотрудника. По сути, в такой постановке ты вынужден будешь забить кучу пустых записей для зарплаты, а по нажатию кнопки "Сохранить" сохранять только те из них, в которых введено значение. Не знаю, как в реальности бухгалтерия начисляет зарплату, но как-то сомневаюсь, что именно такими списками. Впрочем, тебе виднее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.03.2006, 00:06 |
|
||
|
грид
|
|||
|---|---|---|---|
|
#18+
А можно попробовать сделать с помощью SCATTER. Я попробовал и никак. (выдает синтаксическую ошибку на SCATTER) Может, что-то не так пишу. Запоминаю в переменных tab,fam, код и фамилию SCATTER FIELDS код,фио SCATTER FIELDS tab,fam MEMVAR А потом в переменой zar Запоминаю зарплату zar = thisform.grid1.column3.text1.value Далее просто открываю таблицу и дабовляю запись с данными, из переменных ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2006, 15:56 |
|
||
|
грид
|
|||
|---|---|---|---|
|
#18+
Еще раз. Grid отображает то, что реально есть в таблице источнике . Как ты себе представляешь таблицу у которой, первая запись физически имеет 2 поля, а вторая запись - 3 поля? Невозможно такое! Ты должен сформировать временную таблицу, которая бы физически имела по 3 поля во всех записях. Другое дело, что в некоторых записях отдельные поля не заполнены. Но они физически должны быть. Далее уже в кнопке "сохранить" анализируешь в каких строках было изменение и делаешь записи в реальную таблицу. Т.е. хранение информации - один набор таблиц, а отображение - это другой набор таблиц (временных) Какой смысл сохранять что-то в переменных памяти в такой идеологии я не вижу. Вполне достаточно наложить буферизацию на эту временную таблицу и далее GetNextModified()+GetFldState() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2006, 16:51 |
|
||
|
грид
|
|||
|---|---|---|---|
|
#18+
Обьясните глупому > Вполне достаточно наложить буферизацию на эту временную таблицу и далее GetNextModified()+GetFldState() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2006, 16:54 |
|
||
|
грид
|
|||
|---|---|---|---|
|
#18+
У тебя есть 2 исходные таблицы: Карточка клиента и Зарплата. Для отображения в Grid объединяешь эти 2 таблицы по LEFT JOIN чтобы получить временную таблицу с 4 столбцами: 1) Идентификатор записи карточки клиента 2) ФИО 3) Идентификатор записи Зарплаты 4) Зарплата Лишние идентификаторы в Grid не отображаются. На эту временную таблицу накладываешь оптимистическую буферизацию таблиц CursorSetProp("Buffering",5,"MyCursor") MyCursor - это алиас этой временной таблицы. По окончании редактирования и нажатия кнопки сохранить ищешь записи, в которых была произведена модификация Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. Ну, тут еще можно сравнить действительно ли было изменение значения или изменили 1 на ту же 1. Это можно проверить сравнив текущее значение и OldVal(). Новые значения - это значения полей текущей записи временной таблицы MyCursor. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2006, 17:15 |
|
||
|
грид
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. Вот полазил в хелпе нашел вот это. Это то, о чем вы говорили? И правильно ли я понял этот код? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2006, 17:17 |
|
||
|
грид
|
|||
|---|---|---|---|
|
#18+
Ну ответите кто-нибудь или нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2006, 17:35 |
|
||
|
грид
|
|||
|---|---|---|---|
|
#18+
Нет. Через Local View этого не решить. Здесь нужно будет все делать "в ручную". Т.е. сам синтаксис запроса - да, подходит. Не подходит то, что это синтаксис создания Local View. Впрочем, если это Local View не делать обновляемым, то можно и его использовать. Просто процесс сохранения внесенных изменений невозможно будет решить через подобный обновляемый Local View. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2006, 18:19 |
|
||
|
грид
|
|||
|---|---|---|---|
|
#18+
Мне главное было уточничть сам синтаксис запроса. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2006, 18:28 |
|
||
|
грид
|
|||
|---|---|---|---|
|
#18+
2 ВладимирМ А через курсор адаптер он не может это зделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2006, 19:15 |
|
||
|
грид
|
|||
|---|---|---|---|
|
#18+
НедоходящийА через курсор адаптер он не может это зделать? С уверенностью не скажу. Настолько глубоко CAD не ковырял. Здесь проблема в следующем. При использовании LEFT JOIN часть данных подчиненной таблицы отсутствует. Это значит, что если будет модифицирована именно эта часть, то надо будет создавать новую запись в подчиненной таблице. Я не уверен, что CAD поймет, что необходимо именно создание новой записи, а не модификация существующей записи со значением ключа NULL. Это надо экспериментировать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2006, 16:07 |
|
||
|
грид
|
|||
|---|---|---|---|
|
#18+
Hi ВладимирМ! Не поймёт конечно - надо будет в BeforeInsert/BeforeUpdate самому формировать соответствующие команды - т.е. в Update реально может быть использован Insert... В общем обновлять через один курсор 2 таблицы - это большой геморрой - даже если они связаны как 1-к-0-или-1, а уж если как 1-к-0-или-1-или-много - то вообще ужас будет. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2006, 00:31 |
|
||
|
грид
|
|||
|---|---|---|---|
|
#18+
Скажите пожалуста не буду ли я впустую тратить время, если попробую связать две таблицы по полю "КОД", и при вводе зарплаты к примеру просматривать все записи таким образом: While !EOF() do и буду проверять состояние в Column (а именно чему оно равно. Если оно равно ' ', то пропускаю, а иначе записываю в таблицу) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2006, 12:47 |
|
||
|
грид
|
|||
|---|---|---|---|
|
#18+
chukchaСкажите пожалуста не буду ли я впустую тратить время, если попробую связать две таблицы по полю "КОД", и при вводе зарплаты к примеру просматривать все записи таким образом: While !EOF() do и буду проверять состояние в Column (а именно чему оно равно. Если оно равно ' ', то пропускаю, а иначе записываю в таблицу) В пустую, время не будет потрачено в любом случае. Здесь все зависит от того, что Вы вкладываете в понятие "КОД". Код чего? Если это код работника и в таблице зарплат есть внешний ключ со значением кода работника, то все правильно. Еще не вполне ясно, что вкладывается в понятие "связать две таблицы". Если речь идет о SET RELATION, то это можно использовать, но если для одного рабтника может существовать несколько зарплат (аванс и собственно зарплата), то нужно дополнить эту связь установкой один-ко-многим (SET SKIP TO), а такие конструкции крайне капризно ведут себя в циклах перебора записей Поэтому, лучше использовать не связь, а вложенные циклы. Кстати, цикл WHILE лучше заменить на SCAN...ENDSCAN. Получаем что-то вроде Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Собственно, вложенные циклы - это полная симуляция работы объединения таблиц по JOIN. Не внутренний механизм, а логика работы с точки зрения конечного результата. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2006, 21:54 |
|
||
|
грид
|
|||
|---|---|---|---|
|
#18+
У меня будет еще такой вопросик. А что мне делать по поводу связей? Мне нужна связь многие ко многим как лучше в моем случае сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2006, 11:49 |
|
||
|
грид
|
|||
|---|---|---|---|
|
#18+
А если использовать промежуточную таблицу, т.е. от нее будут исходить в те две таблицы связи один ко многи . И будет такое условие, Если в промежуточной таблицы была уже такая фамилия то она перезаписывается на другую. И в это время она еще и записывается в таблицу ЗАРПЛАТА. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2006, 12:53 |
|
||
|
грид
|
|||
|---|---|---|---|
|
#18+
Связь много-ко-многим обычно и реализуется через таблицу-посредник в которой хранятся коды записей связываемых талиц. Только я бы добавил в эту таблицу-посредник еще и код записи. Т.е. тут обычно бывает сильное искушение не вводить код записи ведь запись в таблице-посреднике однозначно идентифицируется парой кодов связываемых таблиц. Не надо на это рассчитывать. Создавайте код записи для ВСЕХ таблиц без исключения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2006, 14:08 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=33626708&tid=1592033]: |
0ms |
get settings: |
7ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
145ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 215ms |
| total: | 451ms |

| 0 / 0 |
