powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Проблема с подсчетом удаленной записью
18 сообщений из 18, страница 1 из 1
Проблема с подсчетом удаленной записью
    #38662773
dima_18
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте всем!

Подскажите пожалуйста ответ на следующий вопрос. У меня есть порядковый номер - номер записи (он же у меня номер заказа) и соответствует записи, когда добавляется новая запись - т.е. добавление. Изменяться он не может -редактирование запрещено.
Когда я удаляю запись - она ведь только помечается на удаление, как я знаю.
Я потом добавляю новую запись и у меня появляется запись с номером на единицу больше от удаленной.
Это произошло потому, что я удалил, но по факту она считается. Как делать так, чтобы это не было?!

Спасибо.
Помогите пожалуйста.
...
Рейтинг: 0 / 0
Проблема с подсчетом удаленной записью
    #38662917
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Номер записи в смысле recno() ? Если так - нельзя его использовать. Сделай после удаления PACK и все съедет.
Заведи отдельное поле для номера и отдельное для идентификатора (ID) записи. Это разные вещи, т.к. рано или поздно потребуется создать две записи с одним номером.
...
Рейтинг: 0 / 0
Проблема с подсчетом удаленной записью
    #38662953
dima_18,
Насколько я понял, у тебя сейчас проблема с удалением "концевого" заказа, то есть добавленного последним. Тогда это можно решить так:
При добавлении записи сначала ищутся удаленные записи. Например, через locate for deleted() . Если такая запись найдена, то надо проверить последняя ли это запись в таблице. Если это последняя физическая запись, то с нее снимается пометка на удаление и поля редактируются (запрет на редактирование для удаленных записей временно снимается). Если удаленная запись не последняя или нет удаленных записей, то создается новая запись.

А теперь скажи, что делать с записями, которые удалены в середине таблицы? Как с ними поступать? Нужно на их место писать какие-нибудь новые данные (что будет в твоей постановке фактически неверно: более поздний заказ может иметь номер меньший, чем более ранний) или "умерла, так умерла"?

В итоге получается такая куча работы (написание и отладка алгоритма по использованию удаленных записей), что проще сделать так, как посоветовал Дима...
...
Рейтинг: 0 / 0
Проблема с подсчетом удаленной записью
    #38663027
SSn888
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Станислав С...кийdima_18,
Насколько я понял, у тебя сейчас проблема с удалением "концевого" заказа, то есть добавленного последним. Тогда это можно решить так:
При добавлении записи сначала ищутся удаленные записи. Например, через locate for deleted() . Если такая запись найдена, то надо проверить последняя ли это запись в таблице. Если это последняя физическая запись, то с нее снимается пометка на удаление и поля редактируются (запрет на редактирование для удаленных записей временно снимается). Если удаленная запись не последняя или нет удаленных записей, то создается новая запись.

А теперь скажи, что делать с записями, которые удалены в середине таблицы? Как с ними поступать? Нужно на их место писать какие-нибудь новые данные (что будет в твоей постановке фактически неверно: более поздний заказ может иметь номер меньший, чем более ранний) или "умерла, так умерла"?

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

маммамиа...
секс стоя, в гамаке и в водолазном костюме...


ТС:
1. Никогда. Никогда не используйте рекно как идентификатор
2. Повторите прослушивание лекции "уникальный идентификатор записи", которую Вы, наверно, проспали
3. Раз уж такая пьянка и Вам нужно "выкручиваться из чего есть" - добавьте хоть поле "номер", типа инт с автоинкриментом... он хоть как-то обеспечит неповторение и даст то самое увеличение номера на единицу, которое Вам почему-то нужно
4. Почитайте про РЕКНО... Вы вообще-то с ним можете влететь еще и хуже, ибо в оптимистичных режимах эта функция может возвращать и отрицательные числа
...
Рейтинг: 0 / 0
Проблема с подсчетом удаленной записью
    #38665870
dima_18
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте Всем!

Большое спасибо за ответы. Извините, что сразу не ответил.
Сначала:
1. Да, у меня есть второе поле для порядкового номера записи и для номера заказа. Эти поля разные.
2. Что касается заказа, то возможен следующий сценарий. Добавляем номер, а потом отказываемся от него т.е. удаляем неявно, но что после него забили -остается в силе.
Т.е. идут записи допустим с номерами заказов:
10
11
12
13
14
15
.......
затем вспомнили что 13 номер заказа по какой -либо непонятной причине нужно удалить.
В результате следующий номер заказа будет все равно 16, а не со смещением назад, просто данная запись отцепляется от клиента и потеряна , так потеряна.

Подскажите пожалуйста такой проект действия, как лучше сообразить?!
спасибо. Как Dima_T?
...
Рейтинг: 0 / 0
Проблема с подсчетом удаленной записью
    #38665885
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для начала ответь на вопрос: что плохого в том что нет 13-го заказа? Какие это проблемы вызовет? Если никаких - то пусть так и будет.

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

А для внутренней идентификации используй ID, отдельное поле с уникальным значением, присваиваемым в момент добавления записи. Например поле с автоинкрементом.
...
Рейтинг: 0 / 0
Проблема с подсчетом удаленной записью
    #38665958
SSn888
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dima_182. Что касается заказа, то возможен следующий сценарий. Добавляем номер, а потом отказываемся от него т.е. удаляем неявно, но что после него забили -остается в силе.

Угу... и что же у вас за каша будет, когда два человека на разных компах введут один и тот же номер заказа для разных документов?

dima_18затем вспомнили что 13 номер заказа по какой -либо непонятной причине нужно удалить.
В результате следующий номер заказа будет все равно 16, а не со смещением назад, просто данная запись отцепляется от клиента и потеряна , так потеряна.

Подскажите пожалуйста такой проект действия, как лучше сообразить?!
спасибо. Как Dima_T?

ну так оно же и вполне логично, что остальные заказы не будут вниз "сползать по номеру".
или при каждом таком удалении желаете потом (как результат "сползания по номеру вниз") - будете все заказы с номером выше уделенного перепечатывать, чтоб отразить измененные номера? и так далее..

Так что проект действия, если я правильно понял ситуацию из Вашей формулировки - "все нормально, ничего трогать не надо". Удаляется 13-й из серединки, а у остальных нумерация сохраняется - ну так это ж и есть правильно

dima_18Как Dima_T?
Ой... так вопрос был только Диме? Не к сообществу?
Срочно забудьте все, что я Вам наговорил! %)
...
Рейтинг: 0 / 0
Проблема с подсчетом удаленной записью
    #38665961
SSn888
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TДля начала ответь на вопрос: что плохого в том что нет 13-го заказа? Какие это проблемы вызовет?
Есть традиция... по пятницам выдавать особо любимым клиентам заказ под номером 13.... а его - ой, в БД-то нет... досадно, однако %)
...
Рейтинг: 0 / 0
Проблема с подсчетом удаленной записью
    #38666092
dima_18
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Большое спасибо за ответ,SSn888!

Извините, если не правильно поняли мою фразу. Хотя, я не написал, что вопрос только Диме. Я написал, если Вы прочитали внимательно, согласно предложению Димы. Ну да ладно, я считаю, что это приятная шутка и не более того.

Еще раз Вам большое спасибо.

Да, я разобрался со своей бедой - и тут конечно, я сам виноват и делал изменение номеров.
Почему я так задумал, не знаю сам. Извиняюсь за вопрос - все решил.

Разрешите пожалуйста тогда задать следующий вопрос другого плана. Вот с этим вопросом нет решения у меня пока.

Есть грид и вывожу много полей:
1 столбец - ф
2 столбей - имя
3 столбей -отчество
и т.д.
Так как полей много, то все они не входят в грид и требуют смещения нижней полосы прокрутки.
Дак вот, когда я добавляю новую запись, то у меня в гриде почему -то полоса прокрутки нижняя уходит до конца вправо и чтоб к первому столбцу данной записи попасть, я ее резко влево делаю, т.е. лишнее движение. Нельзя ли сделать чтоб при добавлении - и показывалась первый, а не последний столбец.

Заранее, большое спасибо всем!
...
Рейтинг: 0 / 0
Проблема с подсчетом удаленной записью
    #38666156
SSn888
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dima_18,

Всегда пожалуйста :)

у грида есть метод ActivateCell, параметрами указываете строку и столбец ячейки, на которую хотите "вставание курсором"
только не забывайте еще фиксировать именно факт перехода (вызовите еще AfterRowColChange после этого)
...
Рейтинг: 0 / 0
Проблема с подсчетом удаленной записью
    #38666332
dima_18
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Большое спасибо, SSn888 !

Извиняюсь за глупость.
Я не очень понял Ваши подсказки.

Подскажите пожалуйста. Для примера как прописать.
У меня person2.fname - это первый столбец.
Напишите пожалуйста Ваш вариант.
...
Рейтинг: 0 / 0
Проблема с подсчетом удаленной записью
    #38666447
SSn888
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dima_18,

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

ThisForm.grid1.column1

Вот с объектами и работайте
авторThisForm.grid1.ActivateCell(1,1)

На форме у Вас лежит объект грид.
(правой кнопкой - Пропертис)
Он - составной.
Каждый столбец - это объект в объекте грид (наверху панелки пропертиез шелкните распахивающийся список - ниже самого грида будет несколько его подчиненных объектов)
Таблица "персон" у Вас - наполнение свойства грида "Источник данных"
Поле "персон.нейм" - оно же для столбца этого грида.
Они просто показывают - отуда брать объекту данные и куда их класть.

А далее - работайте не с полем, а с объектом (когда хотите движение именно по объекту)

полностью установка на 1-й столбец текщей строки у Вас будет нечто вроде
авторThisForm.grid1.ActivateCell(ThisForm.grid1.ActiveRow,1)

И почитайте все-же учебники по VFP и по ООП
...
Рейтинг: 0 / 0
Проблема с подсчетом удаленной записью
    #38666476
dima_18
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Большое спасибо, SSn888!

Вам за помощь. Извините за вопросы и я обязуюсь почитать.
Извините последний вопрос и все.
Следующего плана:

я вывожу данные в excel и у меня все заполняется хорошо и я сделал, чтобы помещалось на 1 страницу, но -внимание - у меня всегда печатается вторая страница, хотя она полностью и пустая.

Можно ли как -то сделать так, чтобы вторую страницу не печаталаcь вообще?
...
Рейтинг: 0 / 0
Проблема с подсчетом удаленной записью
    #38666500
SSn888
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dima_18,

чего-то это уж смахивает на тонкий троллинг напополам с эльфингом и стебом %)))))))))

ладно, продолжим...
выделяете в екселе мышкой нужное, ctl+p, галочку на Вывести на печать Выделенный диапазон ))))))
...
Рейтинг: 0 / 0
Проблема с подсчетом удаленной записью
    #38666557
dima_18
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не вы меня не правильно поняли.
Выводится в excel все автоматически и заполняется нужные ячейки соответственно. Я должен нажать кнопку печать и будет все печатать. Но если я не посмотрю в настройки и соответственно не выделю текст, как Вы сказали, то я увижу на выходе полную и пустую страницу соответственно. А последняя выйдет как пустая. Вопрос из-за чего - так все поместилось на одной.
И второе можно ли как- то автоматически сделать настройки, что выводить только страницу первую.
...
Рейтинг: 0 / 0
Проблема с подсчетом удаленной записью
    #38666626
SSn888
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dima_18,

тут куча вариантов возможна-то

- программно меняйте размер шрифта или высоту ячейки
- программно из фокса выделите в екселе ячейки и далее - по уже озвученному
- забейте в ексле макрос для этого дела
и так далее, и тому подобное
...
Рейтинг: 0 / 0
Проблема с подсчетом удаленной записью
    #38667075
Фотография pipos522
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
всю тему не читал
Код: sql
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.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
* 1) У меня есть порядковый номер - (он же номер заказа)
* 2) Когда добавляется новая запись - Изменяться он не может
* 3) Когда я удаляю запись - она только помечается на удаление
* 4) Потом новую запись у меня появляется с номером на единицу больше от удаленной
* 5) Я удалил, но по факту она считается

*~~~~~~~~~~~~~~~~~~~~~~~~~~~*
 WITH CREATEOBJECT("Form_1")
  	.show(1)
 ENDWITH

*~~~~~~~~~~~~~~~~~~~~~~~~~~~*
 DEFINE CLASS Form_1 AS Form
    AutoCenter = .T.
  	Height     =  400
  	Width      =  500
  	Caption    = "Form_1"
  	Name       = "Form_1"
    BackColor  = RGB(245,243,222)

PROCEDURE load &&=================================&&
  CREATE TABLE  Table_1 (Nom N(4), Data_ D(8), Name_ C(15)) 
    INSERT INTO Table_1 VALUES ( 1, DATE()   , 'Заказ №1')
    INSERT INTO Table_1 VALUES ( 2, DATE()+10, 'Заказ №2')
    INSERT INTO Table_1 VALUES ( 3, DATE()+15, 'Заказ №3')
    INSERT INTO Table_1 VALUES ( 4, DATE()+20, 'Заказ №4')
    INSERT INTO Table_1 VALUES ( 5, DATE()+25, 'Заказ №5')
    INSERT INTO Table_1 VALUES ( 6, DATE()+30, 'Заказ №6')
    GO TOP
ENDPROC

PROCEDURE Init &&=================================&&
  This.AddObject('Grid_1','Grid') && GRID
  WITH This.Grid_1
   .Height = 350
   .Width  = 480
   .Top          =  10
   .Left         =  10
   .Visible      = .T. 
   .DeleteMark   = .F.
   .RecordMark   = .F.
   .ReadOnly     = .T.
   .ScrollBars   =  2
   .ColumnCount  =  3
   .HeaderHeight =  0
   .RecordSource = ''
   .RecordSource = 'Table_1'
   .column1.ControlSource = 'Nom'
   .column2.ControlSource = 'Data_'
   .column3.ControlSource = 'Name_'
   .column1.width = 100
   .column2.width = 100
   .column3.width = 100
   .column1.Resizable = .F.
   .column2.Resizable = .F.
   .column3.Resizable = .F.
   .column1.Alignment = 2
   .column2.Alignment = 2
   .column3.Alignment = 2
ENDWITH

*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~* CommandButton 1
 ThisForm.AddObject('com_1','CommandButton_1')
 WITH ThisForm.com_1
     .Caption = 'Удалить'
     .Visible  = .T. 
     .TOP      = 370
     .LEFT     = 145
     .Height   = 20
     .Width    = 100
 ENDWITH
*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~* CommandButton 2
 ThisForm.AddObject('com_2','CommandButton_2')
 WITH ThisForm.com_2
     .Caption = 'Добавить'
     .Visible  = .T. 
     .TOP      = 370
     .LEFT     = 255
     .Height   = 20
     .Width    = 100
 ENDWITH

ENDPROC
ENDDEFINE

*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*
 DEFINE CLASS CommandButton_1 as CommandButton
  PROCEDURE click

	  nAnswer = MESSAGEBOX('Удалить?', 4+256, 'Внимание!')
    IF nAnswer=6
    SELECT Table_1
    IF !EOF()
    
       DELETE
       CLOSE DATABASES
       USE Table_1
       PACK
    
    WITH Thisform.Grid_1
    .RecordSource = ''
    .RecordSource = 'Table_1'
    .column1.ControlSource = 'Nom'
    .column2.ControlSource = 'Data_'
    .column3.ControlSource = 'Name_'
    .column1.width = 100
    .column2.width = 100
    .column3.width = 100
    .column1.Resizable = .F.
    .column2.Resizable = .F.
    .column3.Resizable = .F.
    .column1.Alignment = 2
    .column2.Alignment = 2
    .column3.Alignment = 2
    ENDWITH
    ELSE    
    WAIT 'STOP!' WINDOW NOWAIT
    ENDIF
    ThisForm.Refresh
    ENDIF

  ENDPROC
 ENDDEFINE

*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*
 DEFINE CLASS CommandButton_2 as CommandButton
  PROCEDURE click
  
   SELECT Table_1
   CALCULATE max(nom) TO nn                              
   INSERT INTO Table_1 VALUES (nn+1, DATE(), '')
   ThisForm.Grid_1.Column3.SetFocus
   ThisForm.Refresh
  
  ENDPROC
 ENDDEFINE

...
Рейтинг: 0 / 0
Проблема с подсчетом удаленной записью
    #38673641
KeremetRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У нас имеется разный ассортимент строительных смесей, необходимых для строительства и ремонта по самым низким ценам. Подробнее по телефону.
Доставка по Москве и Московской Области. (Газель, бычок, камаз).
С полным ассортиментом можно ознакомиться на нашем официальном сайте.
www.keremet.ru
Мы готовы проконсультировать вас по телефонам.
84957826358 и 89265123397.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Проблема с подсчетом удаленной записью
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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