|
обновление данных курсора
|
|||
---|---|---|---|
#18+
Здравствуйте, проект телефонный справочник. Данные формируются из таблиц справочник(фамилия,имя,отчество,добкод,номер,кодулицы,дом,квартира) и улицы(кодулицы,улица).Справочник-дочерняя,улицы-родительская. Код кнопки поиск Код: sql 1. 2. 3. 4.
Проблема в обновлении таблицы на форме после выполнения удаления.Удаляю текущую запись из таблицы справочник. Код кнопки удаление Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2014, 12:22 |
|
обновление данных курсора
|
|||
---|---|---|---|
#18+
Временно решила проблему дублированием запроса в кнопке удаление.Может есть лучше вариант?Встретила совет о использовании CursorAdapter или Local View.Может кто-нибудь объяснить что это и с чем его едят? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2014, 12:37 |
|
обновление данных курсора
|
|||
---|---|---|---|
#18+
kokosik10b, 1. Уберите PACK из регулярной процедуры. Засуньте в отдельный пункт меню вроде "Сервисное обслуживание БД" 2. Имена полей на кириллице... жесть... жуть... небось - с 1С-а на фокс перескочили? Бросайте эту плохую привычку. 3. После установки пометки на удаление делайте REFRESH грида. N. Сносить данные по "номер = номер" достаточно рисково. Уверены, что таким образом не покалечите другие записи (где указанный номер был введен тоже, но является правильным, например)?. Добавляйте уникальное Ид поле и ориентируйтесь только на него в подобных вещах. N+1. Перед тем как начать писать код... все-таки... RTFM!! ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2014, 12:38 |
|
обновление данных курсора
|
|||
---|---|---|---|
#18+
kokosik10b, Не оскорбляйтесь, но ничего Вы не решили этим... просто иллюзию наличия заплатки на прорехе создали. 1. Приведите таблицу в человеческий вид. Минимум - добавьте уникальный идентификатор. Оптимально - уберите кириллицу из названий 2. Удаляйте опираясь только на уникальный ид. Все это "номер = номер" - от лукавого. 3. Если у вас структура наполнения грида будет всегда постоянной - не проще ли будет заполнить ее один раз на входе, а не указывать при каждом клике? 4. Вы удаляете из "справочник". С чего вы решили, что запись сама пропадет и из курсора? "Курсор" в фоксе - это в основном виртуальная таблица, сформированная как результат запроса. Как только она сформирована - она не зависима от "породивших" и изменения в таблице никак не изменят состав курсора, если его явно не обновить. Значит - удалять запись надо не только с таблицы, но и из курсора. 5. Как дополнительный "фокус" - перед удалением убирайте с экрана грид (VISIBLE), а потом - возвращайте 6. И да поможет Вам REFRESH 7. "Справочник-дочерняя,улицы-родительская."... нет желания все же в запросе использовать LEFT JOIN, а не ... то, что Вы написали? N+2... и еще много чего... но елки-палки - будет правильней, если Вы все же пройдетесь хоть по диагонали по учебнику ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2014, 12:57 |
|
обновление данных курсора
|
|||
---|---|---|---|
#18+
Поле номер и является уникальным. Оно в дальнейшей работе не фигурирует. Обязательно удаление должно производиться отдельно?Мне хотелось бы удаление записи из курсора и из самой таблицы.В том и дело,что я пыталась удалить запись из таблицы справочник и обновить курсор ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2014, 14:08 |
|
обновление данных курсора
|
|||
---|---|---|---|
#18+
kokosik10b, Интересная у Вас расшифровка слова "уникальный" %))) Разве я говорил про "одноразовый"? "Уникальное" - это значит, что значение этого поля гарантированно не повторится ни в одной другой записи. Не обязательно отдельно. Но - очень желательно. DELETE ставит на запись отметку на удаление. PACK - физически сносит все записи, где стоит эта отметка. Заметьте - ВСЕ. Зачем 50 раз повторять одно и то же действие, если с одинаковым итогом оно сработает, если его выполнить 1 раз? К тому же - подобное разделение функции на 2 части ("отметить" и "удалить") предназначено и для предоставление возможности передумать и "восстановить" (снять пометку на удаление) И - тот же самый грид на форме - ну оооочень не любит использование PACK на источниках данных ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2014, 14:34 |
|
обновление данных курсора
|
|||
---|---|---|---|
#18+
SSn888,номер является первичным ключом."Уникальным" Извините,если я очень туплю,но что в корне изменилось если я поменяла запрос на объединение Код: sql 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2014, 15:06 |
|
обновление данных курсора
|
|||
---|---|---|---|
#18+
kokosik10bSSn888,номер является первичным ключом."Уникальным" Извините,если я очень туплю,но что в корне изменилось если я поменяла запрос на объединение Код: sql 1. 2. 3.
Ага... и ПК, и уникален... ну - эт значит - я не так понял в самом начале. Что поменялось? А просто - "привыкайте писать правильный код". Сейчас-то может - подобное и "прошло безнаказанно", но может и выйти боком в виде дублей в результатах и прочих радостей. Поменялось то, что FROM a, b WHERE - это аналог FULL JOIN, а не LEFT .... но поменялось-то не совсем верно %) надо было. Обратите внимание - связка отдельно - она касается соединения таблиц, а условие отбора - отдельно. Вы ведь связываете с таблицей улиц только коду улицы, не так ли? Код: sql 1. 2. 3. 4. 5.
Скажите - а какой у вас порядок объема данных в таблицах? Я чего-то сначала подумал про какие-то достаточно большие объемы, но сейчас, еще раз глянув на скриншот - решил, что вовсе и нет... потому что в зависимости от этого напрашиваются разные способы решения. если объем данных не так уж и велик - зачем вообще курсоры да выборки? почему б не напрямую? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2014, 15:32 |
|
обновление данных курсора
|
|||
---|---|---|---|
#18+
SSn888,подразумевается телефонный справочник города.Количество записей немало ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2014, 15:50 |
|
обновление данных курсора
|
|||
---|---|---|---|
#18+
SSn888,да через код улицы в справочнике ищу ,соответствующую коду улицу в таблице улиц.И заменяю код названием ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2014, 15:54 |
|
обновление данных курсора
|
|||
---|---|---|---|
#18+
Left Join- результат включает все записи из таблицы слева и записи, отвечающие условию объединения, из таблицы справа? Но мне не нужны все значения таблицы справочник, одно поле я заменяю из таблицы улиц(код улицы заменяю на улицы) ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2014, 16:03 |
|
обновление данных курсора
|
|||
---|---|---|---|
#18+
дело в том, что Вы можете подменять код названием и динамически-автоматически, без использования запросов В самом начале, при указании источников данных для грида и его колонок (надеюсь - уже перенесли это из процедуры удаления в запуск формы?) добавьте в колонку улицы объект комбо Код: sql 1. 2. 3.
укажите, что управляющими данными в нем будут из таблицы1, а отображаться на экране - данные таблицы, на которую ссылаются Код: sql 1. 2. 3. 4. 5. 6.
И - усе... нет Вам нужды исхищряться, прикручивая вспомогательную таблицу... работайте только с основной, а юзер будет видеть название улицы ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2014, 16:06 |
|
обновление данных курсора
|
|||
---|---|---|---|
#18+
SSn888,в удалении не дописана строчка Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
сброс ControlSource, а после упаковки восстанавливается. Иначе с PACK работа не возможна ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2014, 16:12 |
|
обновление данных курсора
|
|||
---|---|---|---|
#18+
kokosik10b, А фулл джоин - выдает ВСЕ записи и левой, и правой таблиц... Если есть соответствие меж ними - строит ровно столько, сколько и соответствий... Плюс - все записи левой таблицы, для которых в правой аналог не найден... Плюс - все правой, у которой аналог в левой не найден... %) Оно Вам надо? авторLeft Join- результат включает все записи из таблицы слева и записи, отвечающие условию объединения, из таблицы справа? Но мне не нужны все значения таблицы справочник, одно поле я заменяю из таблицы улиц(код улицы заменяю на улицы) Почему Вы решили, что "все значения таблицы справочник"? У вас есть условие связки меж таблицами. В данном случае - код улицы. Берет каждую запись левой таблицы, из нее значение по связке и ищет в правой таблице запись, отвечающую такому же условию. если находит - прикручивает. Если не находит - прикручивает нуль. Если находит 2 значения (если в улицах -две с одинаковым кодом - чего, полагаю, все же нет %) ) -дублирует в результате выборки запись левой таблицы, прикручивая к ней обе найденных в правой. по очереди. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2014, 16:13 |
|
обновление данных курсора
|
|||
---|---|---|---|
#18+
kokosik10b, Да оставьте вы этот ПАК в покое, вот ведь прицепились :) Ну, нет желания его отдельно выносить в "сервис"- так просто делайте по выходу из формы. Зачем его каждый раз-то гонять при вызове метода кнопки? чтоб себе трудности создать? И заполнение свойств грида оттуда уберите на запуск формы. А на самой кнопке удаления оставьте только Код: sql 1. 2. 3. 4.
ну, и не забудьте, что если Вы удалили запись, а в перед этим были на ней - то стОит явно перейти на запись после удаленной или предшествующую ей ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2014, 16:18 |
|
обновление данных курсора
|
|||
---|---|---|---|
#18+
kokosik10b, Подразумевается, что подобные данные все-таки держат в чем-нить типа SQL и подобные отборки идут все же на стороне сервера, а не на клиенте. И не с полями на русском языке... И... впрочем - ладно. Судя по всему - у Вас это все реализовано сооовсем не самым лучшим способом с этой точки зрения. То есть - "начинает реализовываться" Сиречь - или тут пахнет художественным извратом, или студенческой курсовой, или очень-очень новичком. Впрочем - возможны и сочетания. Я, упаси боже, не стараюсь высказать что-то вроде "фе - опять студенты поналезли". Но... не могу понять, как относиться-то.. Если студент и/или новичек - то, как Вы пытаетесь вникнуть в проблему - вызывает положительные чуства (если откинуть Ваше нежелание все-таки почитать доки) Если же иное.... гм... ну - как минимум - странен вообще факт возникновения подобной задачи в подобной формулировке и возникает вопрос "эээ.... вы на зарплате?... а кто вас нанял?" ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2014, 16:28 |
|
обновление данных курсора
|
|||
---|---|---|---|
#18+
SSn888,подразумевается телефонный справочник города.Количество записей немало не в тему, но про телефоны :) У нас в городе номера телефнов очень часто меняли из-за замены в телекоме старых АТС на новые - в БД города телефонного справочника появилось понятие как ЛИЦЕВОЙ СЧЕТ (он уникальный и единый, а телефонов у него может быть много :) ) Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2014, 19:27 |
|
обновление данных курсора
|
|||
---|---|---|---|
#18+
Vladimir M SklyarSSn888,подразумевается телефонный справочник города.Количество записей немало не в тему, но про телефоны :) У нас в городе номера телефнов очень часто меняли из-за замены в телекоме старых АТС на новые - в БД города телефонного справочника появилось понятие как ЛИЦЕВОЙ СЧЕТ (он уникальный и единый, а телефонов у него может быть много :) ) 1. Не могу себе представить достаточно большой город, в котором в местных телесетях уже давно нет какого-то подобного софта и базы. Судя по сообщению ТС - БД и логика создается именно с нуля. Кому может понадобиться создавать подобное с нуля, если "см. предложение 1"? 2. Повторюсь - не из злобных нелюбителей студентов (хотя реплики вида "сделайте все за меня" раздражают) и ничего плохого в выводе из п.1 нет. Даже более - ТС действительно пытается и старается, что - достойно... 3. Дык... это ж вроде как вполне логично :) Что-то же должно быть в записи уникальное и неизменное ;) ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2014, 19:45 |
|
обновление данных курсора
|
|||
---|---|---|---|
#18+
SSn888 1. Уберите PACK из регулярной процедуры. Засуньте в отдельный пункт меню вроде "Сервисное обслуживание БД" ... PACK нужно убрать не только из регулярной процедуры, а из онлайн-режима вообще, потому как если этого не сделать, с данной программой (базой) сможет работать всего один пользователь, монопольный режим, иным словом. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2014, 11:39 |
|
обновление данных курсора
|
|||
---|---|---|---|
#18+
Pulsar_p, Вы слишком глубоко нырнули для ТС. Всему свое время, пусть для начала хоть с кнопки уберет :) Обратите внимание - используется явно файловая версия базы, DBC. Вовсе не SQL. Структура базы явно не планировалась практически никак, доделывается на лету, параллельно коду клиента. Либо это пока просто наработка и задумываться о многопользовательском варианте очень рано, дай бог хоть макет монопольного слабать. Либо это что-то типа курсовой и тогда заморачаваться всякими многопользователями, распределением прав и так далее - излишне ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2014, 11:58 |
|
|
start [/forum/topic.php?fid=41&fpage=31&tid=1582631]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
38ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
others: | 318ms |
total: | 449ms |
0 / 0 |