|
|
|
запрос на удаление
|
|||
|---|---|---|---|
|
#18+
Ох. Есть запрос на удаление: DELETE otchet.*, otchet.OPERATE FROM otchet WHERE (((otchet.OPERATE)="4")); если у нас есть такие записи: price operate quanty 1------0-------9 2------1-------5 8------4-------7 7------0-------1 то запрос удалит строку 8------4-------7 а как его заставить при этом еще и 2------1-------5 удалить? т.е. чтобы он по 2 строки удалял... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2003, 23:10 |
|
||
|
запрос на удаление
|
|||
|---|---|---|---|
|
#18+
а как его заставить при этом еще и 2------1-------5 удалить? т.е. чтобы он по 2 строки удалял... Не очень понятный вопрос. Мб переписать его DELETE otchet.* FROM otchet WHERE otchet.OPERATE="4" or otchet.OPERATE="1"; Если ты это имеешь в виду. А если надо удалять предыдущую строку - это уже проблемно. Тогда для начала выкладывай структуру otchet ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2003, 23:17 |
|
||
|
запрос на удаление
|
|||
|---|---|---|---|
|
#18+
Достаточно Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2003, 23:25 |
|
||
|
запрос на удаление
|
|||
|---|---|---|---|
|
#18+
2 VIG Простите, не поняла... 2 Geo в смысле - структуру таблицы? какие там есть поля и какого они типа? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2003, 23:29 |
|
||
|
запрос на удаление
|
|||
|---|---|---|---|
|
#18+
2marina_spb тебе надо удалять строку по условию и предыдущию???? если это действительно так то можно рекордсетом... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2003, 23:33 |
|
||
|
запрос на удаление
|
|||
|---|---|---|---|
|
#18+
2Марина Скажи заодно, чего хочешь. :) Если надо, чтоб удалялись записи с операте=4 или 1, то тебе уже ответили. Если что-то еще, то, во-первых, уточни условие, а во-вторых, пожалуй, было бы невредно увидеть названия и типы полей таблички. и указание, которые из них ключевые. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2003, 23:37 |
|
||
|
запрос на удаление
|
|||
|---|---|---|---|
|
#18+
Простите, не поняла... Не всегда краткость -сестра таланта.(Это я о себе ) Я имел в виду , что синтаксис оператора DELETE допускает не указывать имя таблицы после ключевого слова DELETE , т.е в твоем случае достаточно написать Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2003, 23:43 |
|
||
|
запрос на удаление
|
|||
|---|---|---|---|
|
#18+
2 Артист - именно так! 2 Geo - не там ключевых полей, это вообще присоединенная таблица формата dbf IV :( ничего в свойствах там менять нельзя полей там порядка 18, конкретно это поле OPERATE, к тому же, текстовое... в общем, все очень запущенно :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2003, 23:45 |
|
||
|
запрос на удаление
|
|||
|---|---|---|---|
|
#18+
..... rs.findfirst otchet.OPERATE="4" rs.delete rs.movelast rs.delete .... ну а если довести энто до ума... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2003, 23:50 |
|
||
|
запрос на удаление
|
|||
|---|---|---|---|
|
#18+
2Марина Надо было еще написать "2(c)VIG именно так!" ибо он куда больше меня (а, возможно, и Артиста (прости, Артист:)) знает о запросах. Так надо удалять предыдущую? Тогда надо сначала как-то идентифицировать записи (почему я и спросил про ключевое поле). Ты можешь пронумеровать записи в запросе или даже слить его результаты во временную таблицу, и узнать, какая из них предыдущая от подходящей к твоему условию, но как ее затем найти в твоей табличке? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2003, 23:52 |
|
||
|
запрос на удаление
|
|||
|---|---|---|---|
|
#18+
А тем временем Артист придумал способ лучше :) Только лучше rs.FindFirst "Pole='4'" rs.movePrev rs.delete rs.FindFirst "Pole='4'" rs.delete ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2003, 23:55 |
|
||
|
запрос на удаление
|
|||
|---|---|---|---|
|
#18+
ибо он куда больше меня (а, возможно, и Артиста (прости, Артист:)) знает о запросах да чё ты меня с VIG-ом сравниваешь... я вообще ещё дилетант в SQL ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2003, 23:55 |
|
||
|
запрос на удаление
|
|||
|---|---|---|---|
|
#18+
Так. А вот теперь объясните мне совсем на пальцах. Главу про recordset я уже давно в книжке нашла. И даже поняла, что моя задачка может решаться с ее помощью. Я только не поняла тогда, куда этот код писать и потому главу закрыла. Так как в книжках не любят объяснять примитивные вещи, которые всем кроме меня, видимо, известны с рождения :) Что мне с этим кодом делать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2003, 23:58 |
|
||
|
запрос на удаление
|
|||
|---|---|---|---|
|
#18+
тьфу rs.MovePrevious а не ласт... сорри ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2003, 23:58 |
|
||
|
запрос на удаление
|
|||
|---|---|---|---|
|
#18+
(Весь красный от смущения) : "Да ну ладно, Вам" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2003, 23:59 |
|
||
|
запрос на удаление
|
|||
|---|---|---|---|
|
#18+
2marina_spb а когда ты хочешь удалять?? по кнопочке кликать и удалять?? тогда в конструкторе кликни правой кнопкой по кнопочке и выбери "обработка события" , а потом то что у тебя откроется (редактор VBA) там и пиши всё, что ты нашла в книжечке... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2003, 00:01 |
|
||
|
запрос на удаление
|
|||
|---|---|---|---|
|
#18+
2Артист Я last не заметил, я имел в виду, что уверен ли ты, что после .delete указатель текущей записи указывает на следующую? Не знаю, как Акцесс, а другие СУБДы часто предупреждают, что это совсем не подразумевается. 2Марина Положим на кнопку Кнопка1 обработку события Нажатие: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2003, 00:07 |
|
||
|
запрос на удаление
|
|||
|---|---|---|---|
|
#18+
2 Артист Я хотела на кнопку повесить выполнение запроса вот этого вот самого на удаление :) Я совсем чуточку знакома с программированием и почему-то мне не верится, что Private Sub Кнопка0_Click() rs.FindFirst "Pole='4'" rs.movePrev rs.delete rs.FindFirst "Pole='4'" rs.delete End Sub будет так просто работать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2003, 00:11 |
|
||
|
запрос на удаление
|
|||
|---|---|---|---|
|
#18+
2Geo & Артист А вы уверены ,что после Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2003, 00:13 |
|
||
|
запрос на удаление
|
|||
|---|---|---|---|
|
#18+
2 Geo А цикла там никакого не надо? А то он удалит только первое вхождение четверки и на этом успокоится... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2003, 00:19 |
|
||
|
запрос на удаление
|
|||
|---|---|---|---|
|
#18+
2VIG Если Order By тот, что надо, то, наверное, это не хуже, чем в запросе... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2003, 00:19 |
|
||
|
запрос на удаление
|
|||
|---|---|---|---|
|
#18+
Марин, прости, а тебе что надо-то? Чтобы все вхождения четверки и предыдущую запись перед первой? Или все вхождения четверки и предыдущую запись перед каждой? Или последнюю "четверку"? Или где? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2003, 00:22 |
|
||
|
запрос на удаление
|
|||
|---|---|---|---|
|
#18+
мне нужно, чтобы удалились все вхождения 4 и каждая предыдущая строчка перед 4 т.е. чтобы Price Operate Quanty 1------2------5 1------1------5 1------4------1 1------7------1 1------1------5 1------4------1 1------8------1 стало выглядеть как 1------2------5 1------7------1 1------8------1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2003, 00:26 |
|
||
|
запрос на удаление
|
|||
|---|---|---|---|
|
#18+
2Марина Ок. Тогда для mdb, в которой подключена DAO (меню Tools/References...): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2003, 00:34 |
|
||
|
запрос на удаление
|
|||
|---|---|---|---|
|
#18+
Марина, а в твоей таблице коду операции 4 всегда предшествует код операции 1? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2003, 00:39 |
|
||
|
запрос на удаление
|
|||
|---|---|---|---|
|
#18+
2 Geo особенно ценно было указание про подключение DAO, оказалось ведь, что не подключено :) а можно 3 вопроса? про структуру программы все ясно, благо действительно чуточку ознакомлена с программированием... а вот... 1) "ПолеПоиска='" & VariableWithValueForSearch & "'" - это что? 2) set rs = currentdb.openrecordset("ТаблицаОтчетов") - это мы открываем мою таблицу? т.е. то, что в скобках я меняю на название своей таблицы... 3) VariableWithValueForSearch - это что? остальное все, вроде, понятно.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2003, 00:44 |
|
||
|
запрос на удаление
|
|||
|---|---|---|---|
|
#18+
2 VIG да :) но эта же самая 1 присутствует иногда и не перед 4 там всего несколько символов могут встречаться в поле OPERATE 1, 4, o, z, x причем в любой последовательности... 1 - это продажа а 4 - это откат этой самой продажи поэтому мне и нужно удалить эти самые данные, которые висят на совокупности 1-4, потому что это продажи, которые не были осуществлены и соответственно цена, количество и прочее оттуда учитываться в остальных рассчетах не должны... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2003, 00:47 |
|
||
|
запрос на удаление
|
|||
|---|---|---|---|
|
#18+
Господа, мне что-то кажется, что вы слишком лихо открываете рекордсет на таблице, будучи уверены, что это даст гарантированный порядок сортировки записей. По-моему, все-таки надо открывать на селекте с сортировкой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2003, 00:52 |
|
||
|
запрос на удаление
|
|||
|---|---|---|---|
|
#18+
Ой мама... Пришел Владимир Саныч и сразу стало все совсем не понятно :) Как дальше жить-то? Я просто к вашей терминологии aka слэнгу не привыкла еще :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2003, 00:57 |
|
||
|
запрос на удаление
|
|||
|---|---|---|---|
|
#18+
Понял.Но должно же быть что-то ,что идентифицирует эти записи.Например Код товара,для которого проводились эти операции, дата операции , еще что нибудь.Приведи все таки структуру таблицы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2003, 01:01 |
|
||
|
запрос на удаление
|
|||
|---|---|---|---|
|
#18+
Не-не, сударыня, я вовсе не имел намерений Вас запутать... Там Вам предложили программу с такой строчкой: set rs = currentdb.openrecordset("ТаблицаОтчетов") Если оставить так, то предыдущая запись, которая будет удаляться, может оказаться вовсе не предыдущей, а совершенно левой. Поэтому для исправления я предлагаю написать эту строчку так: set rs = currentdb.openrecordset("select * from ТаблицаОтчетов order by ...") где вместо ... надо подставить название поля, по которому таблица должна быть рассортирована в правильном порядке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2003, 01:04 |
|
||
|
запрос на удаление
|
|||
|---|---|---|---|
|
#18+
О-ё... :^((( А первичного ключа совсем нет, что ли? У-вва... Ну хотя бы поле DATA заполняется по порядку? Или у каждого пользователя оно заполняется в соответствии с часами на его компе... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2003, 01:12 |
|
||
|
запрос на удаление
|
|||
|---|---|---|---|
|
#18+
2 Марина ПолеПоиска - вместо этого надо написать имя поля, в котором ты ищешь. у меня интернет работает плохо, а имя поля я не помню. VariableWithValueForSearch - вместо этого надо подставить переменную с искомым значением. Или, если последнее - константа, то строку можно переписать ПолеПоиска='4'" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2003, 01:15 |
|
||
|
запрос на удаление
|
|||
|---|---|---|---|
|
#18+
А про DAO - это не потому, что необходимо, а потому, что я про него пишу, ибо пока пользуюсь только им, а ADO не умею :)) Все-таки тебе, видно, придется полистать на досуге книжки :)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2003, 01:18 |
|
||
|
запрос на удаление
|
|||
|---|---|---|---|
|
#18+
О-ё... Присоединяюсь Дополнительно к вопросам В.С. А для чего поле Code ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2003, 01:22 |
|
||
|
запрос на удаление
|
|||
|---|---|---|---|
|
#18+
2 VIG & 2 Владимир Саныч поле Code полностью заполнено 0 это не код, в смысле номер продажи... это какой-то свой внутренний кассовый код и все записи в нем 0 поле ДАТА - это дата продажи в один день может быть до 1000 продаж и дата будет одна и таже там даже за поле TIME не зацепиться опытный кассир за одну минуту успел сделать 4 отката и 2 продажи... т.е. время тоже повторяется... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2003, 01:44 |
|
||
|
запрос на удаление
|
|||
|---|---|---|---|
|
#18+
Ну, время хранится с точностью до секунд, а не до минут, но это ничего не меняет... Может, все-таки вернемся к идее стирать все записи с 4 и все записи с 1? Может, можно как-то найти все "предыдущие" записи по их содержимому, например в них есть какие-нибудь данные, по которым можно привязаться к соответствующим записям с 4? Например, одинаковый номер чека или что-нибудь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2003, 01:55 |
|
||
|
запрос на удаление
|
|||
|---|---|---|---|
|
#18+
Вот это вот: Private Sub Кнопка0_Click() Dim rs As DAO.Recordset Set rs = CurrentDb.openrecordset("select * from otchet order by OPERATE") rs.FindLast "OPERATE='4'" Do Until rs.NoMatch rs.MovePrevious If rs!OPERATE = 4 Then rs.MoveNext Else rs.Delete rs.FindLast "OPERATE='4'" End If rs.Delete rs.FindLast "OPERATE='4'" Loop rs.Close Set rs = Nothing End Sub удаляет только 4... единицы идущие перед 4 не удаляет :((( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2003, 01:55 |
|
||
|
запрос на удаление
|
|||
|---|---|---|---|
|
#18+
> единицы идущие перед 4 не удаляет :((( И не будет. Там же написано order by OPERATE. То есть единицы не идут перед четверками, а все единицы собраны вместе и все четверки вместе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2003, 02:00 |
|
||
|
запрос на удаление
|
|||
|---|---|---|---|
|
#18+
2 Владимир Саныч во-первых, секунды касса почему-то не прописывает, везде вместо секунд нули... во-вторых, я пыталась прицепиться к чему-то еще... не к чему там больше цепляться... поле PRIHOD - пустое поле BANK - одно и тоже значение все записи поле USER - все 1 поле CHECK, я думала хоть к номеру чека можно прицепиться - неа... на одном чеке может быть до 5ти откатов и еще парочка продаж... поле DATA - все за одно число... про TIME уже говорилось выше... поле OPERATE мы и обсуждаем... поле CODE - все нули... поле NAME - пустое.... PRICE, QUANTY, SUM - цена, количество, сумма - не зацепишься, могут повторяться и повторяются постоянно... OPLATA - либо пусто, либо нули... NALOG 1-3 - тоже нули... DISCOUNT - нули... и DIVNUM - единицы и нули... т.е. цепляться можно только за OPERATE, что я и сделала... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2003, 02:01 |
|
||
|
запрос на удаление
|
|||
|---|---|---|---|
|
#18+
Тут If rs!OPERATE = 4 Then ошибка, д. быть If rs!OPERATE = "4" Then А удаляет только четверки потому, что Set rs = CurrentDb.openrecordset("select * from otchet order by OPERATE") Если написать Set rs = CurrentDb.openrecordset("otchet") , поначалу все будет в порядке. Потом, возможно, наткнешься на необходимость наличия первичного ключа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2003, 02:03 |
|
||
|
запрос на удаление
|
|||
|---|---|---|---|
|
#18+
Есть!!!!!! Private Sub Кнопка0_Click() Dim rs As DAO.Recordset Set rs = CurrentDb.openrecordset("select * from otchet") rs.FindLast "OPERATE='4'" Do Until rs.NoMatch rs.MovePrevious If rs!OPERATE = 4 Then rs.MoveNext Else rs.Delete rs.FindLast "OPERATE='4'" End If rs.Delete rs.FindLast "OPERATE='4'" Loop rs.Close Set rs = Nothing End Sub удаляет то, что надо!!!! )))))) СПАСИБО )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2003, 02:05 |
|
||
|
запрос на удаление
|
|||
|---|---|---|---|
|
#18+
А может, достаточно просто удалить ВСЕ единицы и все? Или среди единиц есть такие, которые нельзя удалять? Короче, это последняя надежда. Если не получится с единицами, то надо показывать все записи на экране и требовать от юзера тыкать мышкой в каждую запись, которую он хочет стереть. А вот еще вопрос. Может, можно переделать базу? Те данные, которые уже есть, пусть стирают мышкой, а на будущее, может, можно добавить поле счетчика, чтобы программа заработала хотя бы с новыми данными? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2003, 02:05 |
|
||
|
запрос на удаление
|
|||
|---|---|---|---|
|
#18+
2 Geo странно... почему-то Access и без кавычек все удалил... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2003, 02:06 |
|
||
|
запрос на удаление
|
|||
|---|---|---|---|
|
#18+
Рано спасибо!!! Оно еще начнет стирать не то. Оно работает правильно процентов на 95. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2003, 02:07 |
|
||
|
запрос на удаление
|
|||
|---|---|---|---|
|
#18+
У одного счета может быть до 5 откатов С этим я не встречался, но в таком случае могу тебя огорчить такой табличкой: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Угадай, как отработает такая функция? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2003, 02:10 |
|
||
|
запрос на удаление
|
|||
|---|---|---|---|
|
#18+
Мариночка! Ты же лучше нас должна знать свою таблицу. Если кассир отменяет операцию,должен же он знать к чему ( какому товару) относится отмена. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2003, 02:13 |
|
||
|
запрос на удаление
|
|||
|---|---|---|---|
|
#18+
Кажется, автор вопроса ушла спать... Ладно, я тоже ушел. Если будут вопросы, то отвечу завтра. Good night! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2003, 02:23 |
|
||
|
запрос на удаление
|
|||
|---|---|---|---|
|
#18+
2 Geo 116 kb посмотри пожалуйста мы работаем со столбцом OPERATE - вот он этот ужас ужасный, эти 1 и 4 а номер чека тут не причем совсем... да на одном чеке может быть и 5 откатов, но это ничего не должно менять... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2003, 02:24 |
|
||
|
запрос на удаление
|
|||
|---|---|---|---|
|
#18+
Марина, еще раз извиняюсь, что пользуюсь не твоими названиями, и не проверяю, то, что пишу, но в твоем случае, наверное, надо идти примерно по такому пути: Select Таблица.Чек, Sum(Таблица1.Сумма) As ПервыйСтолбец, Запрос1.СуммаОтката From Таблица left join [select Таблица.Чек, Sum(Таблица.Сумма) AS СуммаОтката, Таблица.ТипОперации from Таблица group by Таблица.Чек, Таблица1.ТипОперации Where Таблица.ТипОперации="1"]. Аз Запрос1 On Таблица.Чек = Запрос1.Чек Group By Таблица.Чек, Таблица1.ТипОперации, Запрос1.СуммаОтката Having Таблица1.ТипОперации="4"; В итоге должна получиться табличка, где Первый столбик, Чек = № чека Второй, сумма = сумма оплаты Третий = сумма отката. Это для Акцесса 97. Если у тебя 2000 и дальше - [...]. замени на (...) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2003, 02:28 |
|
||
|
запрос на удаление
|
|||
|---|---|---|---|
|
#18+
>116 kb посмотри пожалуйста Не могу... :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2003, 02:31 |
|
||
|
запрос на удаление
|
|||
|---|---|---|---|
|
#18+
2 Geo спасибо... я попробую... сейчас уже все равно ничччего не соображаю :) тот-то вариант сработал... надо будет его протестировать на реальной кассе, сработает - ну и отлично а нет, буду дальше думать :) А насчет книжек, которые листать на досуге.... листаю :) Только может все больше не те? Вы мне посоветуйте, какая действительно толковая на Ваш взгляд? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2003, 02:50 |
|
||
|
запрос на удаление
|
|||
|---|---|---|---|
|
#18+
2Марина 1) не "ваш" а "твой" 2) утро вечера мудрёней 3) перед тем, как листать книжки завтра посмотри и пойми, что я тебе хотел сказать на примере таблички. А из книжек рекомендую Ф1 и Гетца (поиск по форуму) 4) завтра, крайний срок в понедельник, тебе здесь напишут, все, что надо... :) Спокночи.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2003, 02:57 |
|
||
|
запрос на удаление
|
|||
|---|---|---|---|
|
#18+
Записей так в 500-800. Конечно много люди глупостей делают, но ведь должна быть хоть какая то логика у тех кто таблицу лобал. Думаю что идея GEO о сборном ключе вполне работоспособная. Тоесть ключ можно собрать из номера чека, суммы и даты (возможно слегка обработанной). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2003, 08:28 |
|
||
|
запрос на удаление
|
|||
|---|---|---|---|
|
#18+
Вот новая проблема. Если просто искать подходящие записи по сборному ключу, то может оказаться записей с 1 больше, чем с записей с 4. См. картинку, там для первых 2 четверочных записей есть 4 единичечных. Это значит, что перед стиранием надо убедиться, что стираем ровно столько записей с 1, сколько с 4. (О том, что стираем именно те, говорить не приходится, но это и не нужно, потому что они совершенно одинаковые.) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2003, 13:52 |
|
||
|
запрос на удаление
|
|||
|---|---|---|---|
|
#18+
>Тоесть ключ можно собрать из номера чека, суммы и даты (возможно слегка обработанной). Не получится. Все равно придется, когда появиться еще одна касса (кассовый аппарат), вводить поле его номера, или плодить таблицы - по одной на каждую кассу. 2Владимир Саныч >Если просто искать подходящие записи по сборному ключу, то может оказаться записей с 1 больше, чем с записей с 4 И наоборот, записей с 4 м.б. больше, чем с 1. (1 чек может иметь до 5 откатов). Соответственно, мы совсем не обязательно должны стирать столько же "1", сколько "4". Хотя не очень понятно, что такое "один из откатов". Это возврат части суммы по чеку? 2Марина Еще вопрос по логике программы: а так ли необходимо вообще что-то стирать из таблицы? И зачем? Не лучше ли, если можно видеть всю историю внесений денег в кассу и возвратов? Получить текущий остаток можно и без удалений записей. Слегка переделав запрос от 02:28... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2003, 14:47 |
|
||
|
запрос на удаление
|
|||
|---|---|---|---|
|
#18+
> И наоборот, записей с 4 м.б. больше, чем с 1. Ты уверен??? Если это так, то вообще изначальная постановка задачи неверна! Потому что это значит, что не перед каждой 4 есть 1, которую надо стереть. И тогда те программы, которые были предложены, стирают не 1 перед 4, а нужные данные. Так что - уверен ли ты??? А вообще, я еще раз предлагаю: помучиться немножко вручную, а потом добавить поле счетчика и основывать программу на нем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2003, 15:04 |
|
||
|
запрос на удаление
|
|||
|---|---|---|---|
|
#18+
>Так что - уверен ли ты??? См. сообщение Марины от сегодня, 02:01. Описание поля CHECK ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2003, 15:09 |
|
||
|
запрос на удаление
|
|||
|---|---|---|---|
|
#18+
Еще раз пишу пример: Код: plaintext 1. 2. 3. 4. 5. 6. 7. Кстати, поле SUM неплохо бы и переименовать. Или же с ним надо быть очень аккуратным в Access'e. В этой таблице деньги по чеку № 1 полностью возвращаются за три раза. Та запрос/программа, которую сейчас пытается найти Марина, похерит после работы, кроме чеков № 1, чеки №№ 2, 3 и 4. И предлагаю вариант решения: Код: plaintext 1. 2. 3. 4. Т.е. чтобы по номеру чека в результирующем запросе показывалась сумма прихода и возврата. В принципе, тогда можно обойтись и без счетчика, но идентификатор № кассы все равно понадобится, если касс будет >1. С другой стороны, в ее таблице куча избыточных полей, можно занять и одно из них... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2003, 15:18 |
|
||
|
запрос на удаление
|
|||
|---|---|---|---|
|
#18+
Но там этого не сказано. Там не сказано, что единиц может быть меньше, чем четверок. Может быть, ты в отличие от меня знаком с бухгалтерией и понимаешь, что такое откат и какой код ему соответствует, но даже если считать, что откат - это 1, то все равно их не меньше, а больше. Или откат - это 4??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2003, 15:19 |
|
||
|
запрос на удаление
|
|||
|---|---|---|---|
|
#18+
> Та запрос/программа, которую сейчас пытается найти Марина, похерит после работы, кроме чеков № 1, чеки №№ 2, 3 и 4. Ну, поверим Марине, что такая комбинация данных невозможна. И что условие "запись создана непосредственно перед этой" действительно дает нужную запись, соответствующую тому, что надо. И тогда проблема только в том, как убедиться, что запись создана непосредственно перед этой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2003, 15:22 |
|
||
|
запрос на удаление
|
|||
|---|---|---|---|
|
#18+
>понимаешь, что такое откат и какой код ему соответствует :) Нет, насколько я понимаю, соответствующие коды изобретены Мариной или ее предшественниками. Сообщение Марины от сегодня, 00:47 1 - это продажа а 4 - это откат этой самой продажи >И что условие "запись создана непосредственно перед этой" действительно дает нужную запись, соответствующую тому, что надо Такого в принципе быть не может. 1. Я пришел в магазин, купил бутылку водки, а через 2 часа, за которые были пробиты куча чеков, пришел ее возвращать - возврат не обязательно следует за внесением денег в кассу. 2. Кроме водки, я покупал и закуску. А вернул только водку - сумма возврата не обязательно равна сумме, внесенной в кассу, т.е. простым удаление пар (и даже нескольких) записей с одним номером чека не спасет мать русской демократии :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2003, 15:31 |
|
||
|
запрос на удаление
|
|||
|---|---|---|---|
|
#18+
> Сообщение Марины от сегодня, 00:47 > 1 - это продажа > а > 4 - это откат этой самой продажи Тьфу. И правда, откат - это 4. Но я все равно надеюсь, что перед каждым 4 есть свое 1. > 1. Я пришел в магазин, купил бутылку водки, а через 2 часа, за которые были пробиты куча чеков, пришел ее возвращать - возврат не обязательно следует за внесением денег в кассу. > 2. Кроме водки, я покупал и закуску. А вернул только водку - сумма возврата не обязательно равна сумме, внесенной в кассу, т.е. простым удаление пар (и даже нескольких) записей с одним номером чека не спасет мать русской демократии :) ИМХО, это не тот случай. Если чек был пробит и оплачен тобой два часа назад, то тебе возвращают деньги совсем другой операцией, не по этому номеру чека и, возможно, не в этой кассе, а в главной. Мне кажется, что ситуация, которую предъявляет нам Марина, - это только ошибки и исправления кассира в процессе работы над одним чеком. Ошибся и тут же сделал Undo, вот эта пара операций и дает нам пару записей с 1 и с 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2003, 15:39 |
|
||
|
запрос на удаление
|
|||
|---|---|---|---|
|
#18+
Короче, постановка (такая, которая действительно решаема) должна выглядеть так: для каждой записи с 4 надо найти одну запись с 1, в которой те же номер чека и сумма. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2003, 15:44 |
|
||
|
запрос на удаление
|
|||
|---|---|---|---|
|
#18+
> Ошибся и тут же сделал Undo, Все равно это не означает, что кассир заметил ошибку сразу же. Или сразу же решил ее откатить. Кроме того, зачем же имеется возможность делать до 5 откатов по одному чеку? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2003, 15:45 |
|
||
|
запрос на удаление
|
|||
|---|---|---|---|
|
#18+
> Все равно это не означает, что кассир заметил ошибку сразу же. Или сразу же решил ее откатить. Но она все равно в пределах того же чека. Моя постановка в предыдущем посте эту проблему решает. Тем более что порядок записей в этой таблице не фиксируется, счетчика нет, а значит понятие "сразу же" мы все равно проверить не можем. > Кроме того, зачем же имеется возможность делать до 5 откатов по одному чеку? Видимо, это 5 откатов на 5 ошибок. Конец дня и усталый кассир. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2003, 15:47 |
|
||
|
запрос на удаление
|
|||
|---|---|---|---|
|
#18+
>для каждой записи с 4 надо найти одну запись с 1 Да нет же. М.б. две "4" для одной "1". > в которой те же номер чека и сумма. И сумма по той же причине может быть не равна. Надо ждать Марину... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2003, 15:49 |
|
||
|
запрос на удаление
|
|||
|---|---|---|---|
|
#18+
> Да нет же. М.б. две "4" для одной "1". Я пока не понимаю, откуда это следует. В изначальной постановке было сказано, что для каждой 4 есть одна 1. И я вообще не могу представить, как может быть два Undo для одной ошибки. Типа, пробил водку, потом отменил полбутылкки, а потом отменил еще полбутылки? Могу представить наоборот - когда две ошибки отменяются одним Undo, правда и этот случай сам по себе тоже разрушает все, что было предложено. > И сумма по той же причине может быть не равна. Тогда надо писать программу, которая подбирает комбинацию записей на заданную сумму (потому что в пределах чека хотя бы сумма 4 должна равняться сумме стираемых 1). Задачка не из легких... > Надо ждать Марину... Будем ждать. Мой вопрос к Марине: правда ли, что ее устраивает моя постановка от сегодня, 15:44. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2003, 15:57 |
|
||
|
запрос на удаление
|
|||
|---|---|---|---|
|
#18+
Ребята,это все гадания на кофейной гуще.Пока не будет четкой постановки задачи,решить ее невозможно З.Ы существующая таблица-яркий пример того ,как НЕ надо проектировать базы данных ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2003, 16:02 |
|
||
|
запрос на удаление
|
|||
|---|---|---|---|
|
#18+
В общем, я пока написал то, что работает (проверено!) в предположении, что моя постановка верна. 1. Создаем запрос qry1: Код: plaintext 1. 2. 2. Пишем процедуру: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. Если запись с 1 не найдена, то запись с 4 все равно стирается. Если это неправильно, то несложно программу переделать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2003, 16:24 |
|
||
|
|

start [/forum/topic.php?all=1&fid=45&tid=1679054]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
44ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
107ms |
get tp. blocked users: |
1ms |
| others: | 246ms |
| total: | 437ms |

| 0 / 0 |
