powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / запрос на удаление
71 сообщений из 71, показаны все 3 страниц
запрос на удаление
    #32283867
marina_spb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ох. Есть запрос на удаление:

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 строки удалял...
...
Рейтинг: 0 / 0
запрос на удаление
    #32283874
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а как его заставить при этом еще и 2------1-------5 удалить?
т.е. чтобы он по 2 строки удалял...

Не очень понятный вопрос.

Мб переписать его

DELETE otchet.*
FROM otchet
WHERE otchet.OPERATE="4" or otchet.OPERATE="1";

Если ты это имеешь в виду. А если надо удалять предыдущую строку - это уже проблемно. Тогда для начала выкладывай структуру otchet
...
Рейтинг: 0 / 0
запрос на удаление
    #32283878
(c)VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Достаточно
Код: plaintext
Delete From otchet where ....
...
Рейтинг: 0 / 0
запрос на удаление
    #32283879
marina_spb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 VIG
Простите, не поняла...

2 Geo
в смысле - структуру таблицы?
какие там есть поля и какого они типа?
...
Рейтинг: 0 / 0
запрос на удаление
    #32283883
Фотография Артист
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2marina_spb
тебе надо удалять строку по условию и предыдущию????
если это действительно так то можно рекордсетом...
...
Рейтинг: 0 / 0
запрос на удаление
    #32283885
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Марина
Скажи заодно, чего хочешь. :)
Если надо, чтоб удалялись записи с операте=4 или 1, то тебе уже ответили. Если что-то еще, то, во-первых, уточни условие, а во-вторых, пожалуй, было бы невредно увидеть названия и типы полей таблички. и указание, которые из них ключевые.
...
Рейтинг: 0 / 0
запрос на удаление
    #32283887
(c)VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Простите, не поняла...
Не всегда краткость -сестра таланта.(Это я о себе )
Я имел в виду , что синтаксис оператора DELETE допускает не указывать имя таблицы после ключевого слова DELETE , т.е
в твоем случае достаточно написать
Код: plaintext
1.
2.
DELETE 
FROM otchet 
WHERE (((otchet.OPERATE)= "4 ")); 
...
Рейтинг: 0 / 0
запрос на удаление
    #32283888
marina_spb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Артист - именно так!

2 Geo - не там ключевых полей, это вообще присоединенная таблица формата dbf IV :( ничего в свойствах там менять нельзя
полей там порядка 18, конкретно это поле OPERATE, к тому же, текстовое...
в общем, все очень запущенно :(
...
Рейтинг: 0 / 0
запрос на удаление
    #32283891
Фотография Артист
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
.....
rs.findfirst otchet.OPERATE="4"
rs.delete
rs.movelast
rs.delete
....
ну а если довести энто до ума...
...
Рейтинг: 0 / 0
запрос на удаление
    #32283893
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Марина
Надо было еще написать
"2(c)VIG именно так!"
ибо он куда больше меня (а, возможно, и Артиста (прости, Артист:)) знает о запросах.

Так надо удалять предыдущую? Тогда надо сначала как-то идентифицировать записи (почему я и спросил про ключевое поле). Ты можешь пронумеровать записи в запросе или даже слить его результаты во временную таблицу, и узнать, какая из них предыдущая от подходящей к твоему условию, но как ее затем найти в твоей табличке?
...
Рейтинг: 0 / 0
запрос на удаление
    #32283894
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А тем временем Артист придумал способ лучше :)
Только лучше

rs.FindFirst "Pole='4'"
rs.movePrev
rs.delete
rs.FindFirst "Pole='4'"
rs.delete
...
Рейтинг: 0 / 0
запрос на удаление
    #32283895
Фотография Артист
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ибо он куда больше меня (а, возможно, и Артиста (прости, Артист:)) знает о запросах
да чё ты меня с VIG-ом сравниваешь... я вообще ещё дилетант в SQL
...
Рейтинг: 0 / 0
запрос на удаление
    #32283896
marina_spb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так. А вот теперь объясните мне совсем на пальцах. Главу про recordset я уже давно в книжке нашла. И даже поняла, что моя задачка может решаться с ее помощью. Я только не поняла тогда, куда этот код писать и потому главу закрыла. Так как в книжках не любят объяснять примитивные вещи, которые всем кроме меня, видимо, известны с рождения :)
Что мне с этим кодом делать?
...
Рейтинг: 0 / 0
запрос на удаление
    #32283897
Фотография Артист
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тьфу rs.MovePrevious а не ласт... сорри
...
Рейтинг: 0 / 0
запрос на удаление
    #32283898
(c)VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
(Весь красный от смущения) : "Да ну ладно, Вам"
...
Рейтинг: 0 / 0
запрос на удаление
    #32283899
Фотография Артист
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2marina_spb
а когда ты хочешь удалять??
по кнопочке кликать и удалять??
тогда в конструкторе кликни правой кнопкой по кнопочке и выбери "обработка события" , а потом то что у тебя откроется (редактор VBA) там и пиши всё, что ты нашла в книжечке...
...
Рейтинг: 0 / 0
запрос на удаление
    #32283903
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Артист
Я last не заметил, я имел в виду, что уверен ли ты, что после .delete указатель текущей записи указывает на следующую? Не знаю, как Акцесс, а другие СУБДы часто предупреждают, что это совсем не подразумевается.

2Марина
Положим на кнопку Кнопка1 обработку события Нажатие:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Private Sub Кнопка1_Click()
  Dim rs as DAO.RecordSet
  set rs = currentdb.openrecordset( "ТаблицаОтчетов" )
  rs.findfirst  "ПолеПоиска='" & VariableWithValueForSearch & "'" 
  rs.rs.MovePrevious
  rs.Delete
  rs.findfirst  "ПолеПоиска='" & VariableWithValueForSearch & "'" 
  rs.Delete
  rs.close
  set rs = nothing
End Sub
...
Рейтинг: 0 / 0
запрос на удаление
    #32283904
marina_spb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Артист

Я хотела на кнопку повесить выполнение запроса вот этого вот самого на удаление :)

Я совсем чуточку знакома с программированием и почему-то мне не верится, что

Private Sub Кнопка0_Click()

rs.FindFirst "Pole='4'"
rs.movePrev
rs.delete
rs.FindFirst "Pole='4'"
rs.delete

End Sub

будет так просто работать...
...
Рейтинг: 0 / 0
запрос на удаление
    #32283907
(c)VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Geo & Артист
А вы уверены ,что после
Код: plaintext
1.
rs.MovePrevious
rs.Delete
удалится то что надо?
...
Рейтинг: 0 / 0
запрос на удаление
    #32283909
marina_spb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Geo

А цикла там никакого не надо?
А то он удалит только первое вхождение четверки и на этом успокоится...
...
Рейтинг: 0 / 0
запрос на удаление
    #32283910
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2VIG
Если Order By тот, что надо, то, наверное, это не хуже, чем в запросе...
...
Рейтинг: 0 / 0
запрос на удаление
    #32283911
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Марин, прости, а тебе что надо-то? Чтобы все вхождения четверки и предыдущую запись перед первой? Или все вхождения четверки и предыдущую запись перед каждой? Или последнюю "четверку"? Или где?
...
Рейтинг: 0 / 0
запрос на удаление
    #32283913
marina_spb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
мне нужно, чтобы удалились все вхождения 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
...
Рейтинг: 0 / 0
запрос на удаление
    #32283918
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Марина
Ок. Тогда для mdb, в которой подключена DAO (меню Tools/References...):

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Private Sub Кнопка1_Click()
  Dim rs as DAO.RecordSet
  set rs = currentdb.openrecordset( "ТаблицаОтчетов" )
  rs.findLast  "ПолеПоиска='" & VariableWithValueForSearch & "'" 
  do until rs.NoMatch
    rs.MovePrevious
    If rs!ПолеПоиска = VariableWithValueForSearch then
      rs.MoveNext
    else
      rs.Delete
      rs.findLast  "ПолеПоиска='" & VariableWithValueForSearch & "'" 
    endif
    rs.Delete
    rs.findLast  "ПолеПоиска='" & VariableWithValueForSearch & "'" 
  loop
  rs.close
  set rs = nothing
End Sub
...
Рейтинг: 0 / 0
запрос на удаление
    #32283920
(c)VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Марина, а в твоей таблице коду операции 4 всегда предшествует код операции 1?
...
Рейтинг: 0 / 0
запрос на удаление
    #32283923
marina_spb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Geo

особенно ценно было указание про подключение DAO, оказалось ведь, что не подключено :)

а можно 3 вопроса?

про структуру программы все ясно, благо действительно чуточку ознакомлена с программированием... а вот...

1) "ПолеПоиска='" & VariableWithValueForSearch & "'" - это что?

2) set rs = currentdb.openrecordset("ТаблицаОтчетов") - это мы открываем мою таблицу? т.е. то, что в скобках я меняю на название своей таблицы...

3) VariableWithValueForSearch - это что?

остальное все, вроде, понятно....
...
Рейтинг: 0 / 0
запрос на удаление
    #32283925
marina_spb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 VIG

да :)
но эта же самая 1 присутствует иногда и не перед 4
там всего несколько символов могут встречаться в поле OPERATE
1, 4, o, z, x
причем в любой последовательности...

1 - это продажа
а
4 - это откат этой самой продажи

поэтому мне и нужно удалить эти самые данные, которые висят на совокупности 1-4, потому что это продажи, которые не были осуществлены и соответственно цена, количество и прочее оттуда учитываться в остальных рассчетах не должны...
...
Рейтинг: 0 / 0
запрос на удаление
    #32283928
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Господа, мне что-то кажется, что вы слишком лихо открываете рекордсет на таблице, будучи уверены, что это даст гарантированный порядок сортировки записей. По-моему, все-таки надо открывать на селекте с сортировкой.
...
Рейтинг: 0 / 0
запрос на удаление
    #32283931
marina_spb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ой мама... Пришел Владимир Саныч и сразу стало все совсем не понятно :) Как дальше жить-то?

Я просто к вашей терминологии aka слэнгу не привыкла еще :)
...
Рейтинг: 0 / 0
запрос на удаление
    #32283934
(c)VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понял.Но должно же быть что-то ,что идентифицирует эти записи.Например Код товара,для которого проводились эти операции, дата операции , еще что нибудь.Приведи все таки структуру таблицы
...
Рейтинг: 0 / 0
запрос на удаление
    #32283935
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Не-не, сударыня, я вовсе не имел намерений Вас запутать... Там Вам предложили программу с такой строчкой:

set rs = currentdb.openrecordset("ТаблицаОтчетов")

Если оставить так, то предыдущая запись, которая будет удаляться, может оказаться вовсе не предыдущей, а совершенно левой. Поэтому для исправления я предлагаю написать эту строчку так:

set rs = currentdb.openrecordset("select * from ТаблицаОтчетов order by ...")

где вместо ... надо подставить название поля, по которому таблица должна быть рассортирована в правильном порядке.
...
Рейтинг: 0 / 0
запрос на удаление
    #32283937
marina_spb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
запрос на удаление
    #32283939
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
О-ё... :^((( А первичного ключа совсем нет, что ли? У-вва...

Ну хотя бы поле DATA заполняется по порядку? Или у каждого пользователя оно заполняется в соответствии с часами на его компе...
...
Рейтинг: 0 / 0
запрос на удаление
    #32283943
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Марина
ПолеПоиска - вместо этого надо написать имя поля, в котором ты ищешь. у меня интернет работает плохо, а имя поля я не помню.

VariableWithValueForSearch - вместо этого надо подставить переменную с искомым значением. Или, если последнее - константа, то строку можно переписать

ПолеПоиска='4'"
...
Рейтинг: 0 / 0
запрос на удаление
    #32283944
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А про DAO - это не потому, что необходимо, а потому, что я про него пишу, ибо пока пользуюсь только им, а ADO не умею :))

Все-таки тебе, видно, придется полистать на досуге книжки :))
...
Рейтинг: 0 / 0
запрос на удаление
    #32283946
(c)VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О-ё...
Присоединяюсь
Дополнительно к вопросам В.С. А для чего поле Code ?
...
Рейтинг: 0 / 0
запрос на удаление
    #32283953
marina_spb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 VIG & 2 Владимир Саныч

поле Code полностью заполнено 0
это не код, в смысле номер продажи...
это какой-то свой внутренний кассовый код
и все записи в нем 0
поле ДАТА - это дата продажи
в один день может быть до 1000 продаж и дата будет одна и таже
там даже за поле TIME не зацепиться
опытный кассир за одну минуту успел сделать 4 отката и 2 продажи...
т.е. время тоже повторяется...
...
Рейтинг: 0 / 0
запрос на удаление
    #32283955
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Ну, время хранится с точностью до секунд, а не до минут, но это ничего не меняет...

Может, все-таки вернемся к идее стирать все записи с 4 и все записи с 1? Может, можно как-то найти все "предыдущие" записи по их содержимому, например в них есть какие-нибудь данные, по которым можно привязаться к соответствующим записям с 4? Например, одинаковый номер чека или что-нибудь?
...
Рейтинг: 0 / 0
запрос на удаление
    #32283956
marina_spb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот это вот:
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 не удаляет :(((
...
Рейтинг: 0 / 0
запрос на удаление
    #32283958
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
> единицы идущие перед 4 не удаляет :(((

И не будет. Там же написано order by OPERATE. То есть единицы не идут перед четверками, а все единицы собраны вместе и все четверки вместе.
...
Рейтинг: 0 / 0
запрос на удаление
    #32283959
marina_spb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Владимир Саныч

во-первых, секунды касса почему-то не прописывает, везде вместо секунд нули...
во-вторых, я пыталась прицепиться к чему-то еще... не к чему там больше цепляться...
поле PRIHOD - пустое
поле BANK - одно и тоже значение все записи
поле USER - все 1
поле CHECK, я думала хоть к номеру чека можно прицепиться - неа... на одном чеке может быть до 5ти откатов и еще парочка продаж...
поле DATA - все за одно число...
про TIME уже говорилось выше...
поле OPERATE мы и обсуждаем...
поле CODE - все нули...
поле NAME - пустое....
PRICE, QUANTY, SUM - цена, количество, сумма - не зацепишься, могут повторяться и повторяются постоянно...
OPLATA - либо пусто, либо нули...
NALOG 1-3 - тоже нули...
DISCOUNT - нули...
и DIVNUM - единицы и нули...
т.е. цепляться можно только за OPERATE, что я и сделала...
...
Рейтинг: 0 / 0
запрос на удаление
    #32283960
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут

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")

, поначалу все будет в порядке. Потом, возможно, наткнешься на необходимость наличия первичного ключа.
...
Рейтинг: 0 / 0
запрос на удаление
    #32283961
marina_spb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть!!!!!!

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

удаляет то, что надо!!!! ))))))
СПАСИБО ))
...
Рейтинг: 0 / 0
запрос на удаление
    #32283962
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
А может, достаточно просто удалить ВСЕ единицы и все? Или среди единиц есть такие, которые нельзя удалять?

Короче, это последняя надежда. Если не получится с единицами, то надо показывать все записи на экране и требовать от юзера тыкать мышкой в каждую запись, которую он хочет стереть.

А вот еще вопрос. Может, можно переделать базу? Те данные, которые уже есть, пусть стирают мышкой, а на будущее, может, можно добавить поле счетчика, чтобы программа заработала хотя бы с новыми данными?
...
Рейтинг: 0 / 0
запрос на удаление
    #32283963
marina_spb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Geo

странно... почему-то Access и без кавычек все удалил...
...
Рейтинг: 0 / 0
запрос на удаление
    #32283964
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Рано спасибо!!!

Оно еще начнет стирать не то. Оно работает правильно процентов на 95.
...
Рейтинг: 0 / 0
запрос на удаление
    #32283966
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У одного счета может быть до 5 откатов
С этим я не встречался, но в таком случае могу тебя огорчить такой табличкой:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Чек Откат Сумма
 1      Нет     10 
 2      Нет     20 
 1      Да      1 
 3      Нет     11 
 1      Да      5 
 4      Нет    15 
 1      Да     4 

Угадай, как отработает такая функция?
...
Рейтинг: 0 / 0
запрос на удаление
    #32283967
(c)VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мариночка! Ты же лучше нас должна знать свою таблицу. Если кассир отменяет операцию,должен же он знать к чему ( какому товару) относится отмена.
...
Рейтинг: 0 / 0
запрос на удаление
    #32283970
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Кажется, автор вопроса ушла спать... Ладно, я тоже ушел. Если будут вопросы, то отвечу завтра. Good night!
...
Рейтинг: 0 / 0
запрос на удаление
    #32283971
marina_spb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Geo

116 kb посмотри пожалуйста

мы работаем со столбцом OPERATE - вот он этот ужас ужасный, эти 1 и 4
а номер чека тут не причем совсем... да на одном чеке может быть и 5 откатов, но это ничего не должно менять...
...
Рейтинг: 0 / 0
запрос на удаление
    #32283972
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Марина, еще раз извиняюсь, что пользуюсь не твоими названиями, и не проверяю, то, что пишу, но в твоем случае, наверное, надо идти примерно по такому пути:

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 и дальше - [...]. замени на (...)
...
Рейтинг: 0 / 0
запрос на удаление
    #32283974
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>116 kb посмотри пожалуйста

Не могу... :(
...
Рейтинг: 0 / 0
запрос на удаление
    #32283976
marina_spb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Geo

спасибо...
я попробую...
сейчас уже все равно ничччего не соображаю :)
тот-то вариант сработал...
надо будет его протестировать на реальной кассе, сработает - ну и отлично
а нет, буду дальше думать :)

А насчет книжек, которые листать на досуге.... листаю :)
Только может все больше не те?
Вы мне посоветуйте, какая действительно толковая на Ваш взгляд? :)
...
Рейтинг: 0 / 0
запрос на удаление
    #32283978
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Марина

1) не "ваш" а "твой"
2) утро вечера мудрёней
3) перед тем, как листать книжки завтра посмотри и пойми, что я тебе хотел сказать на примере таблички. А из книжек рекомендую Ф1 и Гетца (поиск по форуму)
4) завтра, крайний срок в понедельник, тебе здесь напишут, все, что надо... :)

Спокночи..
...
Рейтинг: 0 / 0
запрос на удаление
    #32283990
Фотография alex_ll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Записей так в 500-800. Конечно много люди глупостей делают, но ведь должна быть хоть какая то логика у тех кто таблицу лобал. Думаю что идея GEO о сборном ключе вполне работоспособная. Тоесть ключ можно собрать из номера чека, суммы и даты (возможно слегка обработанной).
...
Рейтинг: 0 / 0
запрос на удаление
    #32284028
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Вот новая проблема. Если просто искать подходящие записи по сборному ключу, то может оказаться записей с 1 больше, чем с записей с 4. См. картинку, там для первых 2 четверочных записей есть 4 единичечных. Это значит, что перед стиранием надо убедиться, что стираем ровно столько записей с 1, сколько с 4. (О том, что стираем именно те, говорить не приходится, но это и не нужно, потому что они совершенно одинаковые.)
...
Рейтинг: 0 / 0
запрос на удаление
    #32284049
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Тоесть ключ можно собрать из номера чека, суммы и даты (возможно слегка обработанной).

Не получится. Все равно придется, когда появиться еще одна касса (кассовый аппарат), вводить поле его номера, или плодить таблицы - по одной на каждую кассу.

2Владимир Саныч

>Если просто искать подходящие записи по сборному ключу, то может оказаться записей с 1 больше, чем с записей с 4

И наоборот, записей с 4 м.б. больше, чем с 1. (1 чек может иметь до 5 откатов). Соответственно, мы совсем не обязательно должны стирать столько же "1", сколько "4". Хотя не очень понятно, что такое "один из откатов". Это возврат части суммы по чеку?

2Марина
Еще вопрос по логике программы: а так ли необходимо вообще что-то стирать из таблицы? И зачем? Не лучше ли, если можно видеть всю историю внесений денег в кассу и возвратов? Получить текущий остаток можно и без удалений записей. Слегка переделав запрос от 02:28...
...
Рейтинг: 0 / 0
запрос на удаление
    #32284054
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
> И наоборот, записей с 4 м.б. больше, чем с 1.

Ты уверен??? Если это так, то вообще изначальная постановка задачи неверна! Потому что это значит, что не перед каждой 4 есть 1, которую надо стереть. И тогда те программы, которые были предложены, стирают не 1 перед 4, а нужные данные. Так что - уверен ли ты???

А вообще, я еще раз предлагаю: помучиться немножко вручную, а потом добавить поле счетчика и основывать программу на нем.
...
Рейтинг: 0 / 0
запрос на удаление
    #32284055
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Так что - уверен ли ты???
См. сообщение Марины от сегодня, 02:01.
Описание поля CHECK
...
Рейтинг: 0 / 0
запрос на удаление
    #32284059
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще раз пишу пример:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
CHECK OPERATE    SUM
 1         1        10 . 00 
 2         1        20 . 00 
 1         4         1 . 00 
 3         1        11 . 00 
 1         4         5 . 00 
 4         1        15 . 00 
 1         4         4 . 00 

Кстати, поле SUM неплохо бы и переименовать. Или же с ним надо быть очень аккуратным в Access'e.

В этой таблице деньги по чеку № 1 полностью возвращаются за три раза. Та запрос/программа, которую сейчас пытается найти Марина, похерит после работы, кроме чеков № 1, чеки №№ 2, 3 и 4.

И предлагаю вариант решения:
Код: plaintext
1.
2.
3.
4.
CHECK   SUM-INP   SUM-OUTP
 1           10 . 00        10 . 00 
 2           20 . 00         0 . 00 
 3           11 . 00         0 . 00 
 4           15 . 00         0 . 00 


Т.е. чтобы по номеру чека в результирующем запросе показывалась сумма прихода и возврата.
В принципе, тогда можно обойтись и без счетчика, но идентификатор № кассы все равно понадобится, если касс будет >1. С другой стороны, в ее таблице куча избыточных полей, можно занять и одно из них...
...
Рейтинг: 0 / 0
запрос на удаление
    #32284061
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Но там этого не сказано. Там не сказано, что единиц может быть меньше, чем четверок. Может быть, ты в отличие от меня знаком с бухгалтерией и понимаешь, что такое откат и какой код ему соответствует, но даже если считать, что откат - это 1, то все равно их не меньше, а больше. Или откат - это 4???
...
Рейтинг: 0 / 0
запрос на удаление
    #32284062
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
> Та запрос/программа, которую сейчас пытается найти Марина, похерит после работы, кроме чеков № 1, чеки №№ 2, 3 и 4.

Ну, поверим Марине, что такая комбинация данных невозможна. И что условие "запись создана непосредственно перед этой" действительно дает нужную запись, соответствующую тому, что надо. И тогда проблема только в том, как убедиться, что запись создана непосредственно перед этой.
...
Рейтинг: 0 / 0
запрос на удаление
    #32284065
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>понимаешь, что такое откат и какой код ему соответствует
:) Нет, насколько я понимаю, соответствующие коды изобретены Мариной или ее предшественниками.
Сообщение Марины от сегодня, 00:47
1 - это продажа
а
4 - это откат этой самой продажи


>И что условие "запись создана непосредственно перед этой" действительно дает нужную запись, соответствующую тому, что надо

Такого в принципе быть не может.
1. Я пришел в магазин, купил бутылку водки, а через 2 часа, за которые были пробиты куча чеков, пришел ее возвращать - возврат не обязательно следует за внесением денег в кассу.
2. Кроме водки, я покупал и закуску. А вернул только водку - сумма возврата не обязательно равна сумме, внесенной в кассу, т.е. простым удаление пар (и даже нескольких) записей с одним номером чека не спасет мать русской демократии :)
...
Рейтинг: 0 / 0
запрос на удаление
    #32284068
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
> Сообщение Марины от сегодня, 00:47
> 1 - это продажа
> а
> 4 - это откат этой самой продажи

Тьфу. И правда, откат - это 4. Но я все равно надеюсь, что перед каждым 4 есть свое 1.

> 1. Я пришел в магазин, купил бутылку водки, а через 2 часа, за которые были пробиты куча чеков, пришел ее возвращать - возврат не обязательно следует за внесением денег в кассу.
> 2. Кроме водки, я покупал и закуску. А вернул только водку - сумма возврата не обязательно равна сумме, внесенной в кассу, т.е. простым удаление пар (и даже нескольких) записей с одним номером чека не спасет мать русской демократии :)

ИМХО, это не тот случай. Если чек был пробит и оплачен тобой два часа назад, то тебе возвращают деньги совсем другой операцией, не по этому номеру чека и, возможно, не в этой кассе, а в главной.

Мне кажется, что ситуация, которую предъявляет нам Марина, - это только ошибки и исправления кассира в процессе работы над одним чеком. Ошибся и тут же сделал Undo, вот эта пара операций и дает нам пару записей с 1 и с 4.
...
Рейтинг: 0 / 0
запрос на удаление
    #32284071
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Короче, постановка (такая, которая действительно решаема) должна выглядеть так: для каждой записи с 4 надо найти одну запись с 1, в которой те же номер чека и сумма.
...
Рейтинг: 0 / 0
запрос на удаление
    #32284072
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Ошибся и тут же сделал Undo,
Все равно это не означает, что кассир заметил ошибку сразу же. Или сразу же решил ее откатить. Кроме того, зачем же имеется возможность делать до 5 откатов по одному чеку?
...
Рейтинг: 0 / 0
запрос на удаление
    #32284074
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
> Все равно это не означает, что кассир заметил ошибку сразу же. Или сразу же решил ее откатить.

Но она все равно в пределах того же чека. Моя постановка в предыдущем посте эту проблему решает. Тем более что порядок записей в этой таблице не фиксируется, счетчика нет, а значит понятие "сразу же" мы все равно проверить не можем.

> Кроме того, зачем же имеется возможность делать до 5 откатов по одному чеку?

Видимо, это 5 откатов на 5 ошибок. Конец дня и усталый кассир.
...
Рейтинг: 0 / 0
запрос на удаление
    #32284075
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>для каждой записи с 4 надо найти одну запись с 1
Да нет же. М.б. две "4" для одной "1".

> в которой те же номер чека и сумма.
И сумма по той же причине может быть не равна.

Надо ждать Марину...
...
Рейтинг: 0 / 0
запрос на удаление
    #32284079
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
> Да нет же. М.б. две "4" для одной "1".

Я пока не понимаю, откуда это следует. В изначальной постановке было сказано, что для каждой 4 есть одна 1.

И я вообще не могу представить, как может быть два Undo для одной ошибки. Типа, пробил водку, потом отменил полбутылкки, а потом отменил еще полбутылки?

Могу представить наоборот - когда две ошибки отменяются одним Undo, правда и этот случай сам по себе тоже разрушает все, что было предложено.

> И сумма по той же причине может быть не равна.

Тогда надо писать программу, которая подбирает комбинацию записей на заданную сумму (потому что в пределах чека хотя бы сумма 4 должна равняться сумме стираемых 1). Задачка не из легких...

> Надо ждать Марину...

Будем ждать. Мой вопрос к Марине: правда ли, что ее устраивает моя постановка от сегодня, 15:44.
...
Рейтинг: 0 / 0
запрос на удаление
    #32284082
(c)VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ребята,это все гадания на кофейной гуще.Пока не будет четкой постановки задачи,решить ее невозможно
З.Ы существующая таблица-яркий пример того ,как НЕ надо проектировать
базы данных
...
Рейтинг: 0 / 0
запрос на удаление
    #32284086
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
В общем, я пока написал то, что работает (проверено!) в предположении, что моя постановка верна.

1. Создаем запрос qry1:

Код: plaintext
1.
2.
SELECT TOP  1  *
FROM otchet
WHERE (check=[c]) AND (sum=[s]) AND (operate= "1 ");


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.
Sub Knopka_Click()

Dim q As QueryDef

With CurrentDb
    Set q = .QueryDefs( "qry1" )
    With .OpenRecordset( "select * from otchet where operate='4'" , dbOpenDynaset)
        Do Until .BOF And .EOF
            q.Parameters( "c" ) = !Check
            q.Parameters( "s" ) = !Sum
            With q.OpenRecordset
                If .BOF Then
                    MsgBox  "Не найдена запись с 1 . Чек " & q.Parameters( "c" ) &  ", сумма "  & q.Parameters( "s" )
                Else
                    .Delete
                End If
                .Close
            End With
            .Delete
            .MoveFirst
        Loop
        .Close
    End With
End With

End Sub


Если запись с 1 не найдена, то запись с 4 все равно стирается. Если это неправильно, то несложно программу переделать.
...
Рейтинг: 0 / 0
71 сообщений из 71, показаны все 3 страниц
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / запрос на удаление
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]