Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Delete rows from data window / 17 сообщений из 17, страница 1 из 1
14.11.2007, 18:52
    #34939989
dub2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delete rows from data window
Код: 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.
26.
27.
28.
29.
30.
31.
32.
33.
34.
Удалить  3  строки из data window dw_1
, после и из базы, в которых столбец col_1 =  10 
Код прикреплён к кнопке на dialog window
boolean b // true - выделить строку		false - отменить выделение
long i,n
n= dw_1.RowCount() // количество строк в data window
for i =  1  to n
if dw_1.object.col_1[i] =   10  then
		b = true
		dw_1.selectrow(i,b)	// выделяет строку правильно
end if
next
return

если вместо
dw_1.selectrow(i,b)	
поставить для удаления
dw_1.deleterow(i)   
, то аварийное завершение на операторе
if dw_1.object.col_1[i] =   10  then
.Чтобы не было аварийного
Завершения внутри for ставлю:

dw_1.deleterow(i)   
n -- // вычитаю , т.к. после удаления кол-во оставшихся строк уменьшено на 1.

Однако НЕПРАВИЛЬНО, вот что имеем:
// для col_1 =  10 , всего было  3  записи, т.е.  2  удалены, а  1  остаётся в  DataWindow
// для col_1 =  101 , всего было  7  записей, т.е.  4  удалены, а  3  остаётся в  DataWindow
Как в цикле удалить все строки согласно условию 
if dw_1.object.col_1[i] =   10  then	 	– 	таких строк  3 
или
if dw_1.object.col_1[i] =   101  then	 	-	таких строк  7 

...
Рейтинг: 0 / 0
14.11.2007, 18:57
    #34940007
Dim2000
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delete rows from data window
dub2 wrote:

> for i = 1 to n

Помедитируй над этой строкой.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
14.11.2007, 19:07
    #34940037
dub2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delete rows from data window
авторdub2 wrote:

> for i = 1 to n

Помедитируй над этой строкой.


В условии сказано, что виделение строк виполняется правильно с указанним оператором FOR, только удаление не віполняется
...
Рейтинг: 0 / 0
14.11.2007, 19:12
    #34940059
Dmitry.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delete rows from data window
еще один намёк:
при удалении первой строки, вторая становится первой
...
Рейтинг: 0 / 0
14.11.2007, 19:16
    #34940066
dub2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delete rows from data window
n -- // вычитаю , т.к. после удаления кол-во оставшихся строк уменьшено на 1.

Ета строка и учитивает ваш намек, но к упеха нет
...
Рейтинг: 0 / 0
14.11.2007, 19:29
    #34940097
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delete rows from data window
dub2n -- // вычитаю , т.к. после удаления кол-во оставшихся строк уменьшено на 1.

Ета строка и учитивает ваш намек, но к упеха нет
Не учитывает.
Правильный цикл такой.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
i =  1 
Do While i <= n
  If ... Then
     DeleteRow(i)
     n --
     Continue
  End If
  i ++
Loop
...
Рейтинг: 0 / 0
14.11.2007, 21:12
    #34940248
Dmitry.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delete rows from data window
Anatoly Moskovsky dub2n -- // вычитаю , т.к. после удаления кол-во оставшихся строк уменьшено на 1.

Ета строка и учитивает ваш намек, но к упеха нет
Не учитывает.
Правильный цикл такой.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
i =  1 
Do While i <= n
  If ... Then
     DeleteRow(i)
     n --
     Continue
  End If
  i ++
Loop


гуру ошибся :)
правильнее сделать цикл так
Код: plaintext
1.
2.
3.
4.
for i = n to i
  If ... Then
     DeleteRow(i)
  End If
next
...
Рейтинг: 0 / 0
14.11.2007, 21:14
    #34940252
edmikeca
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delete rows from data window
Можно еще тупее:

for i = n to 1 step – 1
if … then
dw_1.DeleteRow(i)
end if
next
...
Рейтинг: 0 / 0
14.11.2007, 21:15
    #34940254
edmikeca
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delete rows from data window
edmikecaМожно еще тупее:

for i = n to 1 step – 1
if … then
dw_1.DeleteRow(i)
end if
next Звыняте, уже Dmitry. Написал.
...
Рейтинг: 0 / 0
14.11.2007, 21:49
    #34940303
18-я весна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delete rows from data window
Dmitry.правильнее сделать цикл так
Код: plaintext
1.
2.
3.
4.
for i = n to i
  If ... Then
     DeleteRow(i)
  End If
next

Побойтесь бога, через неделю он не сможет вспомнить, что делает эта конструкция (даже если исправит все опечатки) :)
Не говоря уже о том, что сюда сложно вносить изменения. Например, вполне может требоваться именно прямой порядок при обработке строк.
...
Рейтинг: 0 / 0
14.11.2007, 22:32
    #34940349
AIS
AIS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delete rows from data window
А может проше сделать так:
- отключить прорисовку DW;
- дать фильтр, где i=10;
- удалить все оставшиеся строки из DW;
- отменить фильтр;
- сброс изменений DW;
- включить прорисовку DW.

Ну, вот пожалуй и всё.
...
Рейтинг: 0 / 0
15.11.2007, 10:17
    #34940872
spas2001
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delete rows from data window
n -- // вычитаю , т.к. после удаления кол-во оставшихся строк уменьшено на 1. -
Это надо делать только в том случае если впереди написано
for i=1 to dw_1.rowcount()
У вас же написано
n = dw_1.rowcount()
for i = 1 to n
Поэтому спокойно выбросите и эту строку с вычитанием и все должно отработать

-----------------------------------------------------------------------------
Главная деталь любой машины - голова ее владельца
...
Рейтинг: 0 / 0
15.11.2007, 10:28
    #34940930
Dim2000
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delete rows from data window
edmikeca wrote:

> for i = n to 1 step -- 1

На это я и намекал аффтару топега .
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
15.11.2007, 10:35
    #34940966
Riska
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delete rows from data window
spas2001n -- // вычитаю , т.к. после удаления кол-во оставшихся строк уменьшено на 1. -
Это надо делать только в том случае если впереди написано
for i=1 to dw_1.rowcount()
У вас же написано
n = dw_1.rowcount()
for i = 1 to n
Поэтому спокойно выбросите и эту строку с вычитанием и все должно отработать

-----------------------------------------------------------------------------
Главная деталь любой машины - голова ее владельца
Как раз с точностью до наоборот. При for i=1 to dw_1.rowcount() n вообще не участвует в празднике.
...
Рейтинг: 0 / 0
15.11.2007, 11:10
    #34941155
Riska
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delete rows from data window
По поводу скрипта:
бывают случаи, когда нужно идти именно от первой строки к последней. В этом случае не проходит
Код: plaintext
STEP -  1 
. Можно воспользоваться скриптом, приведенном автором топика, только добавить
Код: plaintext
i --
...
Рейтинг: 0 / 0
15.11.2007, 11:38
    #34941314
А
А
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delete rows from data window
i-- взлом счетчика, это не очень хорошо
если нужен порядок, то я бы написал так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
long i =  1 
do while ( true )
	if ( dw_1.RowCount() < i ) then exit
	if ( dw_1.Object.col_1[i] =  10  ) then
		dw_1.DeleteRow( i )
	else
		i++
	end if
loop
а если порядок не нужен, так как edmikeca
...
Рейтинг: 0 / 0
15.11.2007, 11:41
    #34941329
spas2001
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delete rows from data window
Ага не участвует только при каждой итерации пересчитывается
И если используется не обратный шаг возникают пропуски
так что явное уменьшение при обратном удалении можно не добавлять
-----------------------------------------------------------------------------
Главная деталь любой машины - голова ее владельца
...
Рейтинг: 0 / 0
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Delete rows from data window / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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