|
Запрос на удаление
|
|||
---|---|---|---|
#18+
Здравствуйте. Подскажите, пожалуйста, если сможете, как мне реализовать черный список клиентов в базе данных службы доставки. В общем, у меня есть таблица "Отправления", "Клиенты", "Черный список" и прочие. Занесение в черный список работает так: если клиент не забирает посылку в течение 5 дней, то он отправляется в таблицу "Черный список" и удаляется с таблицы "Клиенты". У меня получилось реализовать занесение клиента в ЧС запросом на добавление по условию, но у меня не получается удалить этого клиента с таблицы "Клиенты". ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2019, 22:56 |
|
Запрос на удаление
|
|||
---|---|---|---|
#18+
Это рабочий запрос на добавление в ЧС ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2019, 23:16 |
|
Запрос на удаление
|
|||
---|---|---|---|
#18+
DBpr0ger, БД на то и БД, что бы в ней хранились Данные, даже о тех клиентах, что находятся в черном списке. Вдруг вам в будущем понадобится узрить статистику по черным клиентам? А она вот - Уже по запросу в наличии. Или вы переживаете что места в БД не хватит? Если удалять неугодное, то это будет не База данных, а просто мусорная свалка. По крайней мере лично я так считаю. Места хватит на всех и при удалении неугодных, вы только ущемляете себя в аналитических данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2019, 23:56 |
|
Запрос на удаление
|
|||
---|---|---|---|
#18+
DBpr0ger, Может не стоит делать шахер-махер ? Добавь галочку у Клиента и всё (галочки нет - хороший клиент, галочка есть - он в черном списке)... Ну можно не галочку а цифру, в этом случае больше степеней свободы, например: 0-новый клиент, 1- активный, 2- супер активный, ... 6- в черном списке ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2019, 23:57 |
|
Запрос на удаление
|
|||
---|---|---|---|
#18+
Лапух, Хорошо, спасибо. Но как мне тогда сделать запрос на обновление значения этой галочки? Я просто хочу, чтобы при открытии БД выполнялся запрос на добавление просроченных посылок в некую таблицу, при этом с таблицы "Отправления" они удалялись (это у меня получилось сделать) и запрос на обновление черного списка клиентов. Я хотел сделать это так: добавление этих клиентов в таблицу "ЧС" и удаление их с таблицы "Клиенты". При этом, когда я захотел бы вернуть клиента обратно, то я с легкостью создал бы запрос на обратное его перенесение в таблицу "Клиенты". Таким образом данные о клиентах всегда будут находится в БД (будь то хорошие клиенты или клиенты с ЧС). ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2019, 00:16 |
|
Запрос на удаление
|
|||
---|---|---|---|
#18+
vmag, Я пробовал реализовать и это. Добавил последним в таблицу "Клиенты" поле "ЧС", но запрос на обновление этого поля все равно не работал. Да и мне кажется, что когда клиенты-ЧСники находятся в отдельной от обычных клиентов таблице, то так лучше. С перенесением посылок все намного легче, все работает, потому что там задействуется лишь 1 таблица — "Отправления", а с клиентами ничего не получается (только копирование в ЧС). Но ни обновить записи, ни удалить их я не могу по данному условию. В запросе на обновление мне пишет "Запрос на обновление должен иметь хотя бы одно поле для вывода", а в запросе на удаление — "Необходимо указать таблицу, содержащую удаляемые записи. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2019, 00:20 |
|
Запрос на удаление
|
|||
---|---|---|---|
#18+
Лапух, И мне кажется, что Вы неправильно поняли меня. Я ведь не удаляю данных клиентов с БД, я просто перемещаю их в таблицу "ЧС". А по надобности я верну их обратно в таблицу с обычными клиентами. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2019, 00:38 |
|
Запрос на удаление
|
|||
---|---|---|---|
#18+
Странный Access. Почему он понимает, какие данные нужно добавлять в новую таблицу, но при этом не понимает, какие данные нужно обновить или удалить. И это при том, что я просто копирую рабочий запрос на добавление в "ЧС" и меняю его на запрос на удаление или обновление. Ведь ничего не изменяется. Те же поля, те же условия отбора, но обновлять или удалять он отказывается. Я искал инфу по поводу этих запросов и нашел, что Access просто не понимает, что ему нужно сделать. Но я не понимаю, как он этого не понимает, если он добавляет в таблицу "ЧС" именно то ,что надо. Почему он не может удалить эти же данные. Он же понимает из какой таблицы он их берет при добавлении, так почему же мне выдает ошибку, что я не указал таблицу для удаления. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2019, 00:44 |
|
Запрос на удаление
|
|||
---|---|---|---|
#18+
DBpr0ger ...Я ведь не удаляю данных клиентов с БД... Возможно и не правильно понял. Допускаю и такое по Субботам. Как упомянул в суе - vmag, можно просто галочкой в обычном запросе в условии отбота не выводить черносписочников, указав в открытом запросе, в режиме конструктора в строчке - Условие отбора под полем с флажком - Нет или Да, ну или как вам там нужно. Хотя я как и - vmag предпочитаю создавать табличку-справочник Статусов, в где более 2-х значений. Ни как не пойму, - vmag у меня учился или я у него. Одинаково мозг морщим похоже. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2019, 01:51 |
|
Запрос на удаление
|
|||
---|---|---|---|
#18+
Лапух, Возможно, вы близнецы с vmag. Мне все-таки больше нравится логический тип поля, нежели создание отдельных значений, так как на данный момент я не собираюсь делить клиентов на активных, унылых и т.д. Суть создания этого вопроса заключается в другом. У меня не получается создать этот запрос с теми же условиями, что я использовал в запросе на добавление клиентов из "Клиенты" в "ЧС". Мне выскакивают разные ошибки. Я выбираю все поля с таблицы "Клиенты" и добавляю в поле отбора ту же формулу Date()-[Відправлення]![Дата прибуття]>=5 (с момента поступления посылки на склад прошло 5 дней). По истечении 5 дней хранения посылка должна улетать в таблицу "Архив просрочки" и удалятся с таблицы "Отправления" — это у меня вышло (как я понимаю, потому что там используется 1 таблица). А вот с клиентами не выходит. Вышло лишь добавить клиентов в "ЧС", а удалить их из "Клиенты" не выходит (из-за того, что используется более одной таблицы в запросе и Access не может понять, что от него хотят, хотя должен). Я уже пробовал и с этим логическим полем в таблице "Клиенты" без занесения в таблицу "ЧС", но Access не соображает. Он не понимает данного условия или не понимает какие поля и откуда нужно удалить. Ниже прикрепляю скриншот рабочего запроса на добавление в "ЧС" (срок хранения изменил с 5 дней на 7). Проблема заключается в том, что я не могу создать аналогичный запрос на удаление. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2019, 02:58 |
|
Запрос на удаление
|
|||
---|---|---|---|
#18+
Похоже, что у меня наконец-таки вышло сделать этот запрос. Я пошел по другому пути (я его уже пробовал до этого, но тогда мне вылетали точно такие же ошибки, как и в первых случаях). В общем, я создал запрос на обновление ФИО в таблице "Клиенты" по условию, где код=код и это сработало. Странно, я до этого пробовал так делать, но тогда ничего не работало. А потом создал 2-ой запрос — на удаление из таблицы "Клиенты" полей, где находится измененное ФИО. Почему-то тогда запросы на обновление и удаление не хотели работать, если я использовал более 1 таблицы. Но щас запрос на обновление заработал, хотя я использовал 2 таблицы — "Клиенты" и "ЧС". А вот запрос на удаление работает на 1 таблице. Я попробовал засунуть эти 2 запроса в 1, то есть сразу удалить клиентов из "Клиенты" по условию код=код, но мне выскакивает ошибка "Укажите таблицу, содержащую удаляемые записи". Наверное , тогда у меня не получалось реализовать это удаление, потому что я сразу же в 1 запросе пытался удалить, а так не прет. Вот таким образом я реализовал перенос клиентов в таблицу "ЧС". А оттуда я уже по накатанной схеме реализовал обратный перенос в таблицу "Клиенты". Теперь главное, чтобы все работало правильно. Если долго мучатся, что-нибудь получится! ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2019, 03:59 |
|
Запрос на удаление
|
|||
---|---|---|---|
#18+
Поясните такой момент: клиент не забрал посылку в течении 5 или 7 дней и попал в ЧС. Что при этом происходит с заказом и товаром в него входящим (заказ аннулируется а товар заказа поступает на какой-то отдельный склад? или посылка отсылается отправителю? или производятся какие-то другие действия?) ,становится ли после этих действий клиент опять "добропорядочным"? Может,все-таки,таблица "ЧС" не нужна и достаточно логического поля в тбл."клиенты"? Не понятна логика работы БД в целом ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2019, 12:44 |
|
Запрос на удаление
|
|||
---|---|---|---|
#18+
sdku, Посылка поступает на склад просроченных посылок после того, как проходит 6 дней хранения (то есть при наступлении 7-го дня посылка перемещается). Она как бы аннулируется, то есть клиент за нее не платит, и она не отправляется назад отправителю. При этом клиент попадает в таблицу "ЧС" и находится там до тех пор, пока я не захочу переместить его обратно в нормальный список. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2019, 17:05 |
|
Запрос на удаление
|
|||
---|---|---|---|
#18+
Но мне кажется, что мне придется все-таки использовать логическое поле, так как при просроченной посылке происходит следующее: просроченная посылка копируется в "Архив просроченных посылок", клиент-отправитель копируется в "ЧС", просроченная посылка удаляется с таблицы "Отправления" (таблица "Отправления" содержит в себе инфу об активных отправлениях), клиент-отправитель удаляется с таблицы "Клиенты". Мне все нравится, но единственный недочет в том, что при удалении клиента-отправителя с таблицы "Клиенты" удаляются все подчиненные записи с ним в таблице "Отправления", из-за чего удаляются и все активные посылки в таблице "Отправления", так как в них пропадает значение с поля "Отправитель". А ведь мне не нужно удалять активные (еще не просроченные) посылки. Выходит, что удаляются посылки с совсем другим получателем, который не виноват в том, что когда-то связанный с ним отправитель был недобросовестным получателем. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2019, 17:12 |
|
Запрос на удаление
|
|||
---|---|---|---|
#18+
DBpr0ger если клиент не забирает посылку в течение 5 дней, то он отправляется в таблицу "Черный список" и удаляется с таблицы "Клиенты" а если клиент был в это время в отпуске на Кипре или в травмоотделении больницы пометить штрафника конечно нужно , но вряд ли так радикально + отчетность пострадает ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2019, 17:24 |
|
Запрос на удаление
|
|||
---|---|---|---|
#18+
ПЕНСИОНЕРКА, Я переделал занесение в ЧС на то, которое мне советовали, а именно — с логическим полем. Теперь просроченные посылки также заносятся в архив просрочки и удаляются с актива, но клиенты теперь попадают в таблицу "Учет черносписников" (куда копируется вся личная инфа с таблицы "Клиенты" и добавляются 2 поля: "Дата внесения" и "Дата вычеркивания"; "Дата внесения" заполняется сразу же) и получают статус ЧСника в таблице "Клиенты" в последнем (добавленном) (логическом) поле "Внесенный в ЧС". При вычеркивании клиента с ЧС в таблице "Учет черносписников" будет заполняться поле "Дата вычеркивания", а в таблице "Клиенты" поле "Внесенный в ЧС" будет получать значение "Нет". Таким образом, у меня не будут удаляться активные посылки, в которых штрафник присутствуют в качестве отправителя, и добросовестный получатель не будет страдать от недобросовестного отправителя, так как в связанной таблице "Клиенты" клиенты удалятся не будут. Вы подкинули мне идею, спасибо. Как думаете, что если в таком случае добавить в "Учет черносписников" поле "Причина". Если будет весомая причина, то есть Кипр или травма, то я буду их вписывать туда, а если причины нет, то есть просто не забрал посылку, то поле будет оставаться пустым. Просто я думаю реализовать выручку за черносписников, а для этого мне нужен будет запрос. В таком случае я думаю в условия этого запроса вбить: "Дата вычеркивания" is not null и "Причина" is not null. Ведь, чтобы получить выручку, клиент должен заплатить за вычеркивание с черного списка, а это значит, что у него появится "Дата вычеркивания". В случае наличия причины клиент будет вычеркивать со списка бесплатно, а значит выручку я не получу, поэтому мне нужны лишь те клиенты, у которых причина отсутствует. Как думаете, нормально? P.S. Вычеркивание с ЧС происходит следующим образом: на форме "Учет черносписников" есть кнопка "Вычеркнуть". При нажатии на нее в таблице "Учет черносписников" заполнятеся пустое поле "Дата вычеркивания", а в таблице "Клиенты" клиенты получает значение "Нет" в поле "Внесенный в ЧС". С добавленным полем "Причина" все будет происходить также, но перед нажатием кнопки "Вычеркнуть" я буду вписывать что-то в поле "Причина". Для получения выручки будет создан запрос на выборку с "Учет черносписников", где "Дата вычеркивания" is not null и "Причина" is not null. Далее можно будет создать 2-ой запрос на подсчет кол-ва клиентов с 1-го запроса на выборку, умноженного на стоимость вычеркивания с ЧС. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2019, 19:13 |
|
Запрос на удаление
|
|||
---|---|---|---|
#18+
DBpr0ger если клиент не забирает посылку в течение 5 дней, то он отправляется в таблицу "Черный список" и удаляется с таблицы "Клиенты" DBpr0ger sdku, ...Она как бы аннулируется, то есть клиент за нее не платит, и она не отправляется назад отправителю.... С посылкой должно что-то делать и просто аннулировать заказ,создав,если это нужно, отметку об отказе от заказа в отдельной таблице,указав причину,дату и используя её в дальнейшем для определения "благонадежности" (Ваши критерии)клиента при оформлении новых заказов-это и будет Ваша таблица "ЧС",а из таблицы клиенты исключать его нет необходимости-он может обратится через год (не вижу смысла в занесении всех данных клиента по новой) sdku ....Не понятна логика работы БД в целом ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2019, 20:07 |
|
Запрос на удаление
|
|||
---|---|---|---|
#18+
DBpr0ger , но запрос на обновление этого поля все равно не работал. - козырный туз не сыграл ? Для обновления одного поля таблицы - в запросе достаточно использовать всего два поля этой таблицы: ключ (с условием отбора в качестве параметра) и собственно это поле (с новым значением в качестве параметра). Параметры можно использовать или реальные (тогда в запрос их нужно передавать перед выполнением) или подставлять сразу в запрос в виде ссылок на поля формы. В данной ситуации попытка включение в данный запрос (совершенно не нужных) других полей, а особенно полей других таблиц равносильна разбрасыванию граблей вокруг себя, на которые придется наступать ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2019, 23:18 |
|
Запрос на удаление
|
|||
---|---|---|---|
#18+
vmag, В новом запросе на обновление я как раз так и сделал — добавил всего 2 поля (ключ и обновляемое поле) и все сработало. Но я так и не понял, если я в запрос на обновление подставлю все поля из таблицы, но при этом обновлять буду лишь одно, то запрос работать не будет? Нужно подставлять лишь обновляемые поля и поле, по которому Access'у будет понятно, какое именно поле обновлять? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2019, 14:17 |
|
Запрос на удаление
|
|||
---|---|---|---|
#18+
sdku, Клиент теперь не удаляется с таблицы "Клиенты", он просто получает значение "Да" в поле "Занесенный в ЧС", а в таблицу "Учет черносписников" заносятся все его данные и дата внесения (при вычеркивании клиента с ЧС: в таблице "Клиенты" поле "Занесенный в ЧС" получает значение "Нет", а в таблице "Учет черносписников" добавляется значение в поле "Дата вычеркивания"). Таким образом я смогу контролировать, кто и когда был занесен в ЧС. Я решил переделать "Архив просроченных посылок" в "Обратные посылки". В эту таблицу я буду ппереносить все те же просроченные посылки с таблицы "Отправления", меняя при этом отправителя и получателя, город-отправитель и город-получатель, отделение-отправитель и отделение-получатель, сотрудник (принявший посылку) и сотрудник (выдавший посылку) местами, так как будет происходить то же самое отправление, но в обратном порядке, ведь, если посылку не забрал получатель, то ее нужно вернуть отправителю. Но я думаю еще над тем, чтобы при обратном отправлении подставлять в поле отправитель не провинившегося получателя, а саму службу доставки (будет создан дополнительный клиент — сама служба доставки; это нужно, потому что в поле отправителя можно подставить лишь те данные, которые находятся в таблице "Клиенты"), так как это она на самом деле отправляет посылку обратно. Вот только я не знаю, что делать, если и первоначальный отправитель не заберет свою посылку( ведь выходит тогда, что она никому не нужна и в таком случае её можно просто удалять с БД, либо заносить в новую отдельную таблицу "Ненужные посылки". ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2019, 14:29 |
|
Запрос на удаление
|
|||
---|---|---|---|
#18+
А еще я думаю сделать так, что если сотрудник, выдавший посылку является курьером, то посылка будет выдаваться автоматически в день прибытия (мне кажется это логичным). И при обратных отправлениях всегда можно подставлять в сотрудника, выдавшего посылку, курьера, чтобы посылка всегда отдавалась обратно и была исключена возможность ее ненужности. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2019, 14:31 |
|
Запрос на удаление
|
|||
---|---|---|---|
#18+
DBpr0ger Я переделал занесение в ЧС на то, которое мне советовали, а именно — с логическим полем. Теперь просроченные посылки также заносятся в архив просрочки и удаляются с актива, но клиенты теперь попадают в таблицу "Учет черносписников" (куда копируется вся личная инфа с таблицы "Клиенты" и добавляются 2 поля: "Дата внесения" и "Дата вычеркивания"; "Дата внесения" заполняется сразу же) и получают статус ЧСника в таблице "Клиенты" в последнем (добавленном) (логическом) DBpr0ger Как думаете, нормально? Не нормально. У тебя ошибки в проектировании базы. Клиент всегда должен быть в таблице "Клиенты", его статус "в черном списке" должны быть полем (и лучше числовым, а не логическим, так как у Access есть вариативность использования логических полей в запросах. Посылка всегда должна быть в таблице "Посылки", её статус "ожидание, доставлена, не доставлена, не забрана" должен быть полем. Логирование - внесение клиента в чёрный список должно быть в отдельной таблице, в которой есть только код клиента, тип (внесён, вычеркнут) и датой внесения или вычеркивания. Нет необходимости дублирования всей информации о клиенте. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2019, 12:39 |
|
Запрос на удаление
|
|||
---|---|---|---|
#18+
DBpr0ger А еще я думаю сделать так, что если сотрудник, выдавший посылку является курьером, то посылка будет выдаваться автоматически в день прибытия (мне кажется это логичным). Не логично, посылка должна быть отмеченной в базе как выданная только тогда, когда курьер её отдал, иначе будет сломан бизнес-процесс, так как курьер посылку может не отдать её физически, потому что получатель в больнице, а в базе посылка уже отдана. Поле для мошенничества просто замечательное. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2019, 12:43 |
|
Запрос на удаление
|
|||
---|---|---|---|
#18+
Stanislav P, Спасибо за советы. Про логирование: ну так я это и сделал. У меня есть отдельная таблица "Учет ЧС", куда заносятся код клиента, дата внесения и дата вычеркивания (опустим то, что туда заносится вся инфа о клиенте). При этом клиент всегда остается в таблице "Клиенты", так как я добавил в нее поле "Внесенный в ЧС". ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2019, 17:03 |
|
Запрос на удаление
|
|||
---|---|---|---|
#18+
Stanislav P Посылка всегда должна быть в таблице "Посылки", её статус "ожидание, доставлена, не доставлена, не забрана" должен быть полем. Так что мне делать? Просто мне в БД нужно реализовать формирование обратного отправления в случае отказа от посылки или истечения срока хранения. Я реализовал это созданием таблицы "Обратные отправления", куда переносятся данные посылки, а с основной удаляются (при переносе посылка получала тот же номер накладной (номер накладной — ключевое поле), так как все данные копировались). А как мне реализовать это в одной таблице, если ключевое поле не должно повторяться. Делать ключевое поле счетчиком? Мне не хочется этого делать. Я бы сделал ключевое поле счетчиком, если бы оно присваивало бы нормальные значения, состоящие цифр из 10, чтобы это было похоже на номер накладной. Мне нужно запросом на добавление в таблицу сформировать обратное отправление. При этом запрос запускается по нажатию кнопки на форме, где запрос понимает по номеру накладной (ключевому полю) какую именно посылку нужно сформировать как обратное отправление и он копирует его. Можно ли как-то сделать, чтобы запрос брал эту посылку по этому номеру накладной, но при выполнении выскакивало окно параметра, куда я буду вводить новый код. Таким образом будет формировать обратное отправление. А в поле "Статус посылки" будет обновляться с "Доставлено" на "Отказ". ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2019, 17:29 |
|
|
start [/forum/topic.php?fid=45&fpage=24&tid=1610354]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
38ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
91ms |
get tp. blocked users: |
2ms |
others: | 10ms |
total: | 178ms |
0 / 0 |