VSFlexGrid - Удаление нескольких записей

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
SunnyVa
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 29.08.2005 (Пн) 9:30
Откуда: Москва

VSFlexGrid - Удаление нескольких записей

Сообщение SunnyVa » 27.09.2005 (Вт) 15:40

Всем хорошего дня!
Столкнулась с такой проблемой: Данные в VSFlexGrid подгружаются через DataSource, соответсвенно удалить записи через команду RemoveItem я не могу (или я не права?)
Метода Delete к сожалению у данной компоненты нет, поэтому делаю следующим образом: ловлю событие KeyUp, в нем анализирую какая была нажата клавиша, соответсвенно если была нажата клавиша Del(Delete), то все что я могу узнать это номера строк, которые были выделены для удаления
Код: Выделить всё

For i = 0 To fg.SelectedRows - 1
            Debug.Print "Строка "; fg.SelectedRow(i); " выделена для удаления"
Next

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

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 27.09.2005 (Вт) 15:50

У источника данных есть поле или поля, однозначно идентифицирующие запись? Например, первичный ключ?
Если да, то удаляй данные непосредственно в источнике данных, например delete from table where key = 1
Lasciate ogni speranza, voi ch'entrate.

lord0n
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 845
Зарегистрирован: 30.06.2005 (Чт) 9:55
Откуда: Moskow

Сообщение lord0n » 27.09.2005 (Вт) 15:51

Data1.Recordset.Delete

тока в гриде нужно сделать:
Код: Выделить всё

data1.Recordset.AbsolutePosition = grid.RowSel - 1
Теория - это когда что-то не работает и известно почему.
Практика - это когда что-то работает, но неизвестно почему.
Нам удалось совместить теорию с практикой, теперь ничего не работает и неизвестно почему.

lord0n
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 845
Зарегистрирован: 30.06.2005 (Чт) 9:55
Откуда: Moskow

Сообщение lord0n » 27.09.2005 (Вт) 15:52

alibek писал(а):У источника данных есть поле или поля, однозначно идентифицирующие запись? Например, первичный ключ?
Если да, то удаляй данные непосредственно в источнике данных, например delete from table where key = 1


блин не успел :( :lol:
Теория - это когда что-то не работает и известно почему.
Практика - это когда что-то работает, но неизвестно почему.
Нам удалось совместить теорию с практикой, теперь ничего не работает и неизвестно почему.

SunnyVa
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 29.08.2005 (Пн) 9:30
Откуда: Москва

Сообщение SunnyVa » 27.09.2005 (Вт) 15:55

Ребят, у источника данных есть первичный ключ... Поле называется sa_id. Но ведь на момент нажатия кнопки Delete я знаю только строки, но пока не знаю какое значение поля sa_id у каждой выделенной строки...

lord0n
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 845
Зарегистрирован: 30.06.2005 (Чт) 9:55
Откуда: Moskow

Сообщение lord0n » 27.09.2005 (Вт) 16:11

SunnyVa писал(а):Ребят, у источника данных есть первичный ключ... Поле называется sa_id. Но ведь на момент нажатия кнопки Delete я знаю только строки, но пока не знаю какое значение поля sa_id у каждой выделенной строки...


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

SunnyVa
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 29.08.2005 (Пн) 9:30
Откуда: Москва

Сообщение SunnyVa » 27.09.2005 (Вт) 16:26

эх... мне бы лучше узнать значение sa_id...

lord0n
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 845
Зарегистрирован: 30.06.2005 (Чт) 9:55
Откуда: Moskow

Сообщение lord0n » 27.09.2005 (Вт) 16:30

SunnyVa писал(а):эх... мне бы лучше узнать значение sa_id...


а в чем проблема:
a=rs.fields(0)

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

AjaxVS
Постоялец
Постоялец
 
Сообщения: 506
Зарегистрирован: 01.12.2004 (Ср) 13:12
Откуда: Donetsk, Battle.Net

Сообщение AjaxVS » 28.09.2005 (Ср) 12:05

Дайте линк на VSFlexGrid +_+ Пжалста...

lord0n
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 845
Зарегистрирован: 30.06.2005 (Чт) 9:55
Откуда: Moskow

Сообщение lord0n » 28.09.2005 (Ср) 12:11

AjaxVS писал(а):Дайте линк на VSFlexGrid +_+ Пжалста...


а в поисковиках поискать, ни как?
Теория - это когда что-то не работает и известно почему.
Практика - это когда что-то работает, но неизвестно почему.
Нам удалось совместить теорию с практикой, теперь ничего не работает и неизвестно почему.

AjaxVS
Постоялец
Постоялец
 
Сообщения: 506
Зарегистрирован: 01.12.2004 (Ср) 13:12
Откуда: Donetsk, Battle.Net

Сообщение AjaxVS » 28.09.2005 (Ср) 12:15

Чесслово, не нашел...
Искал еще и Janus.ocx - тоже самое...
Пойду читать доки гугла +_+

SunnyVa
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 29.08.2005 (Пн) 9:30
Откуда: Москва

Сообщение SunnyVa » 28.09.2005 (Ср) 13:08

Ребят, всем спасибо за советы...
Решила я в итоге сделать так: ловлю событие нажатие кнопки delete... там записываю в колекцию номера строк, которые были выделены для удаления.... затем вызываю событие удаления, в которое передаю эту коллекцию...
Код: Выделить всё

Dim dCol As Collection
        Set dCol = New Collection
        For i = 0 To fg.SelectedRows - 1
            dCol.Add fg.SelectedRow(i)
        Next
       
        RaiseEvent Delete(dCol)


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

Private Sub dgActions_Delete(dCol As Collection)
If PermissionDelete Then
    dgActions.RecDelete dCol
Else
    MsgBox "Нет полномочий на удаление", vbCritical, "Отсутствуют полномочия"
    Exit Sub
End If
End Sub

Public Sub RecDelete(dCol As Collection)
For i = 1 To dCol.Count 'цикл по колекции строк, которые нужно удалить
j = dCol.Item(i) - (i - 1) 'номер строки в vsflexgride, (i-1) - так как если пользователь хочет удалить несколько строк сразу, то после удаления первой строки идет смещение строк
fg.Select j, 1 'выделяю строку, которую необходимо удалить
ds.RecDelete 'вызывается процедура удаления из источника данных vsflexgrid-а
sys.Macros("LocalRequery").Execute 'обновляю vsflexgrid после удаления строки
Next i

End Sub


GB826
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 312
Зарегистрирован: 04.08.2005 (Чт) 0:58
Откуда: Планета #3

Сообщение GB826 » 28.09.2005 (Ср) 13:20

Зря, чтобы узнать ИД каждой удаляемой строки в твоем случае


fg.TextMatrix(fg.selectedrow(i),fg.ColIndex("sa_id"))

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 28.09.2005 (Ср) 13:24

AjaxVS писал(а):Чесслово, не нашел...
Искал еще и Janus.ocx - тоже самое...
Пойду читать доки гугла +_+


Э-э-х:

http://www.janusys.com, http://www.infragistics.com, http://www.componentone.com и другие - оно все прекрасно находится, только не надо выдумывать самостоятельно имена компонентов навроде Janus.ocx.

P.S С такими проблемами удаления я бы повесился...
:lol:
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

lord0n
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 845
Зарегистрирован: 30.06.2005 (Чт) 9:55
Откуда: Moskow

Сообщение lord0n » 28.09.2005 (Ср) 13:34

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

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 28.09.2005 (Ср) 13:42

lord0n писал(а):да, крута завинчено
я думаю можно сделать все намного проще


Я подскажу - не должно быть ни одной строки кода.
По крайней мере у меня их нет - при работе с Recordset-ом допускающим удаление. :lol:

P.S с VSFlexGrid-ом я не работаю, так что как конкретно с ним не знаю...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

lord0n
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 845
Зарегистрирован: 30.06.2005 (Чт) 9:55
Откуда: Moskow

Сообщение lord0n » 28.09.2005 (Ср) 13:45

Andrey Fedorov писал(а):
lord0n писал(а):да, крута завинчено
я думаю можно сделать все намного проще


Я подскажу - не должно быть ни одной строки кода.
По крайней мере у меня их нет - при работе с Recordset-ом допускающим удаление. :lol:

P.S с VSFlexGrid-ом я не работаю, так что как конкретно с ним не знаю...


погоди, а как ты удаляешь без кода
я использую одну строку(rs.delete), а как без кода - незнаю
Теория - это когда что-то не работает и известно почему.
Практика - это когда что-то работает, но неизвестно почему.
Нам удалось совместить теорию с практикой, теперь ничего не работает и неизвестно почему.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 28.09.2005 (Ср) 13:52

lord0n писал(а):погоди, а как ты удаляешь без кода
я использую одну строку(rs.delete), а как без кода - незнаю


А нафига оно - мне удалять?

Это Grid "говорит" Recordset-у на котором он основан что надо удалить такие-то записи. Мне-то зачем шевелиться - код для этого совершенно не нужен. По идее так должно быть с любым нормальным Grid-ом.
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

lord0n
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 845
Зарегистрирован: 30.06.2005 (Чт) 9:55
Откуда: Moskow

Сообщение lord0n » 28.09.2005 (Ср) 14:08

Andrey Fedorov писал(а):
lord0n писал(а):погоди, а как ты удаляешь без кода
я использую одну строку(rs.delete), а как без кода - незнаю


А нафига оно - мне удалять?

Это Grid "говорит" Recordset-у на котором он основан что надо удалить такие-то записи. Мне-то зачем шевелиться - код для этого совершенно не нужен. По идее так должно быть с любым нормальным Grid-ом.


а нормальный это какой?
среди них бесплатные есть :roll:
Теория - это когда что-то не работает и известно почему.
Практика - это когда что-то работает, но неизвестно почему.
Нам удалось совместить теорию с практикой, теперь ничего не работает и неизвестно почему.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 28.09.2005 (Ср) 14:16

lord0n писал(а):а нормальный это какой?


Я использую Janus GridEx 2000 (http://www.janusys.com)
alibek пользует другой - я подзабыл название - он подскажет...

lord0n писал(а):среди них бесплатные есть :roll:


Не знаю. У меня купленный - лицензия где-то дома валяется...
Но по серъезному поддерживать/развивать бесплатно серъезный продукт никто не будет.
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

lord0n
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 845
Зарегистрирован: 30.06.2005 (Чт) 9:55
Откуда: Moskow

Сообщение lord0n » 28.09.2005 (Ср) 14:21

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

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 28.09.2005 (Ср) 14:25

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


Все приходит со временем...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

SunnyVa
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 29.08.2005 (Пн) 9:30
Откуда: Москва

Сообщение SunnyVa » 28.09.2005 (Ср) 14:31

Andrey Fedorov писал(а):
lord0n писал(а):погоди, а как ты удаляешь без кода
я использую одну строку(rs.delete), а как без кода - незнаю


А нафига оно - мне удалять?

Это Grid "говорит" Recordset-у на котором он основан что надо удалить такие-то записи. Мне-то зачем шевелиться - код для этого совершенно не нужен. По идее так должно быть с любым нормальным Grid-ом.


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

Код: Выделить всё

rst.Delete adAffectCurrent

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 28.09.2005 (Ср) 14:33

Andrey Fedorov писал(а):Я использую Janus GridEx 2000 (http://www.janusys.com)
alibek пользует другой - я подзабыл название - он подскажет...

Конечно скажу :)
QuantumXpressGrid
Lasciate ogni speranza, voi ch'entrate.

lord0n
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 845
Зарегистрирован: 30.06.2005 (Чт) 9:55
Откуда: Moskow

Сообщение lord0n » 28.09.2005 (Ср) 14:50

alibek писал(а):
Andrey Fedorov писал(а):Я использую Janus GridEx 2000 (http://www.janusys.com)
alibek пользует другой - я подзабыл название - он подскажет...

Конечно скажу :)
QuantumXpressGrid


пробовал - чета меня он не впячатлил :roll:
хотя это наверно потому что у меня запросы к гриду маленькие
Теория - это когда что-то не работает и известно почему.
Практика - это когда что-то работает, но неизвестно почему.
Нам удалось совместить теорию с практикой, теперь ничего не работает и неизвестно почему.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 28.09.2005 (Ср) 15:01

lord0n писал(а):пробовал - чета меня он не впячатлил :roll:
хотя это наверно потому что у меня запросы к гриду маленькие


Ну с таками запросами лучшими могут оказаться ListBox или ListView...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 81

    TopList