обращение к однотипным элементам

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 22.11.2006 (Ср) 10:14

Amed писал(а):Хакер, все верно. Машинально написал с какой-то стати (притом, что MessageBox в вб вообще не использую). Поправил пост.

nat-z, хинт: нужные контролы можно отличать по префиксу имени.

Расстреливать бы таких советчиков... Представь себя на месте человека, которому досталось поддерживать такой код -- отличающий контролы по префиксу имени. :-|
Изображение

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 22.11.2006 (Ср) 10:32

>>Amed (10:30:41 22/11/2006)
Отличать контролы по префиксу имени криво, дурно и мерзко?
>>GSerg (10:31:35 22/11/2006)
Отличать для целей написания имён переменных ручками - прямо, хорошо и приятно.
Отличать в плане if left$(.name,3)="chk" then - криво, дурно и мерзко

nat-z
Новичок
Новичок
Аватара пользователя
 
Сообщения: 35
Зарегистрирован: 18.11.2006 (Сб) 19:58

Сообщение nat-z » 22.11.2006 (Ср) 12:24

Все-таки сделала LABEL и CHECKBOX массивами. А оператор присвоения видноне так пишется (у меня выдает ошибку компиляции invalid use of property):
i = 0
Do Until rs.EOF
''If GBind.npp = 1 Then
If i < 10 Then
GB_zakaz1.Label [i].Visible = True
GB_zakaz1.Label [i].Enable = True
GB_zakaz1.Label [i].Caption = gbind.Comment
GB_zakaz1.Check [i].Visible = True
GB_zakaz1.Check [i].Enable = True
GB_zakaz1.Check [i].Caption = gbind.Name
i = i + 1
End If
''Else
''End If
rs.MoveNext
Loop

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 22.11.2006 (Ср) 12:26

Индексы в круглые скобки.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 22.11.2006 (Ср) 12:31

1. Вместо квадратных скобок нужно использовать круглые.
2. Под покровом неизвестности скрывается объект gbind. Может нет у него свойств Comment и Name?
3. Предположительно все лабелы и чеки соответственно будут содержать один и тот же текст.
4. Можно избавиться от счетчика i... Хотя фиг с ним, пусть болтается, главное чтобы заработало.
Лучший способ понять что-то самому — объяснить это другому.

nat-z
Новичок
Новичок
Аватара пользователя
 
Сообщения: 35
Зарегистрирован: 18.11.2006 (Сб) 19:58

Сообщение nat-z » 22.11.2006 (Ср) 12:45

Antonariy писал(а):1. Вместо квадратных скобок нужно использовать круглые.
2. Под покровом неизвестности скрывается объект gbind. Может нет у него свойств Comment и Name?
3. Предположительно все лабелы и чеки соответственно будут содержать один и тот же текст.
4. Можно избавиться от счетчика i... Хотя фиг с ним, пусть болтается, главное чтобы заработало.

Действительно круглые!! И enabled с d на конце пишется!! Только теперь выходит ошибка 424 - obect requered выше (а раньше не было!!) на строке cn.Open...
А вся конструкция выглядит так (из таблицы GBind отбираются записи с NPP=1 и имена в них выводятсяна LIST(i) и эти листы становятся видимыми.

Private Sub Form_Load()
Dim i As Integer
Dim ttt, ttt1 As String 'Characters
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & GBmenu.Pth0 & "" & “GBmax.mdb”
rs.ActiveConnection = cn
rs.Open ("SELECT * FROM GBIND WHERE NPP=1")
i = 0
Select Case GBmenu.Xreg0
Case 11
ttt = "Óäàëåíèå äàííûõ èç ÁÄ"
Case 12
ttt = "Èìïîðò äàííûõ â ÁÄ"
Case 13
ttt = "Ýêñïîðò äàííûõ èç ÁÄ"
End Select
GB_zakaz1.Oper.Caption = GB_zakaz1.Oper.Caption & " " & ttt
Do Until rs.EOF
''If GBind.npp = 1 Then
If i < 10 Then
GB_zakaz1.Label(i).Visible = True
GB_zakaz1.Label(i).Enabled = True
GB_zakaz1.Label(i).Caption = gbind.Comment
GB_zakaz1.Check(i).Visible = True
GB_zakaz1.Check(i).Enabled = True
GB_zakaz1.Check(i).Caption = gbind.Name
i = i + 1
End If
''Else
''End If
rs.MoveNext
Loop
rs.Close
cn.Close
Set rs = Nothing
Set cn = Nothing
End Sub

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 22.11.2006 (Ср) 13:27

nat-z писал(а):Dim ttt, ttt1 As String 'Characters


замени на

Код: Выделить всё
Dim ttt As String, ttt1 As String    'Characters

иначе у тебя ttt объявлется не как String, а как Variant.

а вот здесь сдается мне не все здорово с кавычками
Код: Выделить всё
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & GBmenu.Pth0 & "" & “GBmax.mdb”
Весь мир матрица, а мы в нем потоки байтов!

shady
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 09.11.2005 (Ср) 11:03

Сообщение shady » 22.11.2006 (Ср) 14:07

Antonariy писал(а):2. Под покровом неизвестности скрывается объект gbind. Может нет у него свойств Comment и Name?


nat-z писал(а):rs.Open ("SELECT * FROM GBIND WHERE NPP=1")


Не одно ли ито же??

nat-z
Новичок
Новичок
Аватара пользователя
 
Сообщения: 35
Зарегистрирован: 18.11.2006 (Сб) 19:58

Сообщение nat-z » 22.11.2006 (Ср) 14:10

!Viper! писал(а):
Код: Выделить всё
Dim ttt As String, ttt1 As String    'Characters


Сделала
!Viper! писал(а):а вот здесь сдается мне не все здорово с кавычками
Код: Выделить всё
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & GBmenu.Pth0 & "" & “GBmax.mdb”

Поставила вокруг скобки -
cn.Open ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & GBmenu.Pth0 & "" & “GBmax.mdb”) - прошло это место но дальше
rs.ActiveConnection = cn
rs.Open ("SELECT * FROM GBIND WHERE NPP=1") - не находит таблицу GBind, хотя она есть в GBmax.mdb!!

shady
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 09.11.2005 (Ср) 11:03

Сообщение shady » 22.11.2006 (Ср) 14:18

1. Интересно что выдает GBmenu.Pth0
2. Интересно где на самом деле GBmax.mdb
3. Переписать rs.Open ("SELECT * FROM GBIND WHERE NPP=1")
на rs.Open "SELECT * FROM GBIND WHERE NPP=1", cn

nat-z
Новичок
Новичок
Аватара пользователя
 
Сообщения: 35
Зарегистрирован: 18.11.2006 (Сб) 19:58

P.S.

Сообщение nat-z » 22.11.2006 (Ср) 14:26

А там не скобки были а последние кавычки почему-то какие-то не такие были!!!

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 22.11.2006 (Ср) 14:35

А какие? :)

Вообще, приятно, что дело, начатое мной пару месяцев назад (я говорю про разжевывание ответа новичкам, а не посыл в поиск) и названное форумчанами "самым эротичным топиком" с успехом продолжает Konst_One!.. :lol: Так держать... :idea:
А я все практикую лечение травами...

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 22.11.2006 (Ср) 14:49

Twister
стараемся, когда есть время конечно :wink:

nat-z
Новичок
Новичок
Аватара пользователя
 
Сообщения: 35
Зарегистрирован: 18.11.2006 (Сб) 19:58

Сообщение nat-z » 22.11.2006 (Ср) 14:56

shady писал(а):1. Интересно что выдает GBmenu.Pth0
2. Интересно где на самом деле GBmax.mdb
3. Переписать rs.Open ("SELECT * FROM GBIND WHERE NPP=1")
на rs.Open "SELECT * FROM GBIND WHERE NPP=1", cn


1,2 - все OK (поставила круглые скобки и заменила закрыв кавычку и все прошло).
3 - заменила и взяла другую таблицу которая точно есть и поля в ней есть (открывается в другой форме). Теперь выдает object requered на строке GB_zakaz1.Label(i).Caption = gbprov.d_n
текст формы теперь :

Здесь был длинный и бессмысленный текст, но его здесь больше нет.
Если в будущем nat-z захочет явить миру что-нибудь подобное, она воспользуется аттачем, вместо того, чтобы подобным образом уродовать топик.
Кроме того, в будущем, весь код, представленный nat-z в виде кода, а не в виде аттача, должен быть заключён в соответствующие теги, иначе он тоже будет удалён. -- GSerg

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 22.11.2006 (Ср) 15:00

nat-z

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

[offtop]
Гм... нашел вышеупомянутую мной тему в недрах форума, но, к величайшему моему сожалению, весь основной диалог затерт, ни чего не осталось. Модеры, зачем? :cry:
[/offtop]
А я все практикую лечение травами...

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 22.11.2006 (Ср) 15:03

вместо:

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


надо:

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


если конечно d_n - это имя поля в запросе к твоей таблице :wink:

nat-z
Новичок
Новичок
Аватара пользователя
 
Сообщения: 35
Зарегистрирован: 18.11.2006 (Сб) 19:58

Сообщение nat-z » 22.11.2006 (Ср) 15:15

Konst_One писал(а):вместо:
Код: Выделить всё
gbprov.d_n

надо:
Код: Выделить всё
rs!d_n

если конечно d_n - это имя поля в запросе к твоей таблице :wink:

Ух ты - получилось все!!!
По-бесовски все это - то точка, то "!".
И не поняла как и когда у меня закрыв ковычка стала другого написания на экране (хотя тоже двойная!!).

Можно уже закрывать тему (то-то кто-то обрадуется!!).
Остался последний вопрос: чем отличается

rs.Open (SELECT * FROM GBprov") и
rs.Open "SELECT * FROM GBprov", cn
и как лучше писать?

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 22.11.2006 (Ср) 15:17

так всегда надо писать:
Код: Выделить всё
rs.Open "SELECT * FROM GBprov", cn

nat-z
Новичок
Новичок
Аватара пользователя
 
Сообщения: 35
Зарегистрирован: 18.11.2006 (Сб) 19:58

Сообщение nat-z » 22.11.2006 (Ср) 16:34

Все, спасибо!!!
Вопросов еще куча, но это уже в другие топики!!!

FaKk2
El rebelde gur&#250;
El rebelde gur&#250;
Аватара пользователя
 
Сообщения: 2031
Зарегистрирован: 09.03.2003 (Вс) 22:10
Откуда: Los Angeles

Сообщение FaKk2 » 22.11.2006 (Ср) 19:32

Этот топик нужно распечатать и использовать как средство повышения настроения в особо гадкие дни. Браво аффтар, я еле сдерживаюсь, чтоб не засмеяться во весь голос на работе. :lol:

П.С. Ты в курсе, что в VB существует такая штука как дебаггер. И если вылетает ошибка в длинном куске кода, то можно с большой точностью найти строку и даже причину ошибки!

nat-z
Новичок
Новичок
Аватара пользователя
 
Сообщения: 35
Зарегистрирован: 18.11.2006 (Сб) 19:58

Сообщение nat-z » 23.11.2006 (Чт) 12:56

FaKk2 писал(а): в VB существует такая штука как дебаггер. И если вылетает ошибка в длинном куске кода, то можно с большой точностью найти строку и даже причину ошибки!

Да строку я нахожу - она желтая становится!
Это я уже знаю.
А в FAQ даже ссылки по однотипным элементам нет!!!
А в программе у меня уже много чего сделано, хоть и книжки нет!! У меня уже даже размер формы на экране сделан переменным в зависимости от количества выводимых строк!
А вот как очистить таблицу в mdb-файле (именно отдельную таблицу а не весь файл) - есть такой оператор?
PS В выходные точно поеду в город за книжкой, так что с понедельника надеюсь больше не буду приставать!!
А кусок для очистки таблицы у меня сейчас вот такой:
Как я и обещал, неотформатированный код nat-z был удалён. -- GSerg

shady
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 09.11.2005 (Ср) 11:03

Сообщение shady » 23.11.2006 (Чт) 13:20

Что подразумевается под очисткой? Удаление всех записей из таблицы?
Если да, то можно и так
Код: Выделить всё
cn.Execute "DELETE FROM Имя_Вашей_Таблицы"


2 GSerg
Как я и обещал, неотформатированный код nat-z был удалён. -- GSerg

Что хоть там такое есть-то, ужасно интересно... Всега, когда я захожу, уже все подтерто.. :(

nat-z
Новичок
Новичок
Аватара пользователя
 
Сообщения: 35
Зарегистрирован: 18.11.2006 (Сб) 19:58

Сообщение nat-z » 23.11.2006 (Чт) 13:41

shady писал(а):
Код: Выделить всё
cn.Execute "DELETE FROM Имя_Вашей_Таблицы"

- все классно получилось, спасибо большое!!!
2 GSerg
Как я и обещал, неотформатированный код nat-z был удалён. -- GSerg

Что хоть там такое есть-то, ужасно интересно... Всега, когда я захожу, уже все подтерто.. :( [/quote] - а вот сейчасотвечала и кажется поняла: отформатировать - /code/ вокруг текста поставить??
Тогда буду делать!!! Прямо сейчас высылаю чтобы попробовать! И пусть смотрял любопытные - мне скрывать нечего!!
Код: Выделить всё
Private Sub Command1_Click()
'Dim i As Integer
'Dim ttt As String, ttt1 As String
Dim cn  As New ADODB.Connection
Dim rs  As New ADODB.Recordset
Dim cn1 As New ADODB.Connection
Dim rs1 As New ADODB.Recordset
cn.Open ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & GBmenu.Pth0 & "" & "GBmax.mdb")
rs.ActiveConnection = cn
For i = 0 To GBmenu.Xw1
    If GB_zakaz1.Check(i).Value = 1 Then
       ttt = "SELECT * FROM " & Trim(GB_zakaz1.Check(i).Caption)
       rs.Open ttt, cn  ' открытие access-файла
       If GBmenu.Xreg0 = 12 Or GBmenu.Xreg0 = 13 Then  ' export/import dbf
          cn1.Open "Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq=" & GBmenu.Pth0
          rs1.ActiveConnection = cn1
          rs1.Open ttt & ".dbf", cn1
          rs1.Close
       Else  ' Xreg0 = 11 -очистка таблицы
          cn.Execute "DELETE FROM " & Trim(GB_zakaz1.Check(i).Caption)
       End If
       rs.Close  ' закрытие access-файла
    End If
    Next
'Unload Me
End Sub

Пред.

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

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

Сейчас этот форум просматривают: Yandex-бот и гости: 97

    TopList