powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Помогите с кодом
16 сообщений из 16, страница 1 из 1
Помогите с кодом
    #39607058
Wawan2005
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть куча всего, но вот кусок в котором надо взять из второй таблицы данные соответствующие данным первой таблицы

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
'Лист программирования
Dim rsLP As Recordset, myLP, S1 As String

Set rsLP = CurrentDb.OpenRecordset("select * from [Оборудование ОВО] where Наименование=" & Me.П_УО)                  ' на эту строку ругается

Do Until rsLP.EOF
        myLP1 = rsLP!Шлейфы
        myLP2 = rsLP!Сопротивление
    rsLP.MoveNext
Loop
П_Проб = "Шлейф-1= " & asl1 & ", Шлейф-2= " & asl2 & ", Шлейф-3= " & asl3 & ", Шлейф-4= " & asl4 & ", Шлейф-5= " & asl5 & ", Шлейф-6= " & asl6 & ", Шлейф-7= " & asl7 & ", Шлейф-8= " & asl8 & ", Шлейфов- " & myLP1 & ", Сопрот- " & myLP2



P.S.: Данные в поле "Наименование" и "П_УО" равные
Заранее спасибо.
...
Рейтинг: 0 / 0
Помогите с кодом
    #39607069
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Помогите с кодом
    #39607078
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем вам цикл, если в переменных myLP1, myLP2 окажутся только данные случайной записи?
...
Рейтинг: 0 / 0
Помогите с кодом
    #39607085
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Wawan2005Есть куча всего, но вот кусок в котором надо взять из второй таблицы данные соответствующие данным первой таблицы

возможно вы хотели сформировать
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
Dim rsLP As dao.Recordset
dim myLP1,myLP2, S1 

s1="select * from [Оборудование ОВО] where Наименование=" & Me.П_УО)
debug.print s1  '''''проверьте, что имеете в Наименование= и  Me.П_УО


Set rsLP = CurrentDb.OpenRecordset(s1)                  
s1 = "Шлейф-1= " & asl1 & ", Шлейф-2= " & asl2 & _
& ", Шлейф-3= " & asl3 & ", Шлейф-4= " & asl4 & ", Шлейф-5= " & asl5 _
& ", Шлейф-6= " & asl6 & ", Шлейф-7= " & asl7 & ", Шлейф-8= " & asl8

Do Until rsLP.EOF
        myLP1 = rsLP!Шлейфы
        myLP2 = rsLP!Сопротивление

s1=s1 & ", Шлейфов- " & myLP1 & ", Сопрот- " & myLP2

    rsLP.MoveNext
Loop
П_Проб=s1
...
Рейтинг: 0 / 0
Помогите с кодом
    #39607112
Фотография Joss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Wawan2005Есть куча всего, но вот кусок в котором надо взять из второй таблицы данные соответствующие данным первой таблицы

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
'Лист программирования
Dim rsLP As Recordset, myLP, S1 As String

Set rsLP = CurrentDb.OpenRecordset("select * from [Оборудование ОВО] where Наименование=" & Me.П_УО)                  ' на эту строку ругается

Do Until rsLP.EOF
        myLP1 = rsLP!Шлейфы
        myLP2 = rsLP!Сопротивление
    rsLP.MoveNext
Loop
П_Проб = "Шлейф-1= " & asl1 & ", Шлейф-2= " & asl2 & ", Шлейф-3= " & asl3 & ", Шлейф-4= " & asl4 & ", Шлейф-5= " & asl5 & ", Шлейф-6= " & asl6 & ", Шлейф-7= " & asl7 & ", Шлейф-8= " & asl8 & ", Шлейфов- " & myLP1 & ", Сопрот- " & myLP2



P.S.: Данные в поле "Наименование" и "П_УО" равные

Заранее спасибо.

У Вас Me.П_УО символьное значение, а символьные значения должны заключаться в апострофы. Например
Код: vbnet
1.
Set rsLP = CurrentDb.OpenRecordset("select * from [Оборудование ОВО] where Наименование='" & Me.П_УО & "'") 
...
Рейтинг: 0 / 0
Помогите с кодом
    #39607203
Wawan2005
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо, я решил проблему по другому

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
'Лист программирования
Dim rsLP As Recordset, myLP, S1 As String
Set rsLP = CurrentDb.OpenRecordset("select * from [Оборудование ОВО] ")
Do Until rsLP.EOF
       Select Case Me.П_УО
       Case Is = rsLP!Наименование
        myLP1 = rsLP!Шлейфы
        myLP2 = rsLP!Сопротивление
       End Select
    rsLP.MoveNext
Loop
П_Проб = "Шлейфы- " & myLP1 & ", Сопрот- " & myLP2                 'не нужное я выкинул.



Может кому пригодится.
...
Рейтинг: 0 / 0
Помогите с кодом
    #39607236
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Wawan2005Может кому пригодится.

У меня одного ощущение, что Ваван, постоянно вносит изменения в сам компилятор акцесса?...
- то у него в рабочем коде появляются новые свойства элементов управления типа Visibl
- сейчас вот крутое объявление переменной myLP, дающее право на использование наверное дочерних переменных myLP1 и myLP2
Или это просто острая нехватка Option Explicit ?
...
Рейтинг: 0 / 0
Помогите с кодом
    #39607247
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Wawan2005Может кому пригодится. Кому такое пригодится?
...
Рейтинг: 0 / 0
Помогите с кодом
    #39607255
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Wawan2005,

По-моему вы решили задачу самым неэффективным способом, который только можно придумать. При размере таблицы в десятки тысяч записей бедете ждать очень долго вместо десятых долей секунды. Зачем тут Select Case, когда лучше If подходит? Is в Case тоже не нужно использовать при равенстве. Рекордсеты закрываем. Ну и Option Explicit включите, проблем не оберетесь.
Так будет гораздо быстрее работать:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Dim rsLP As Recordset
Set rsLP = CurrentDb.OpenRecordset("select * from [Оборудование ОВО] where [Наименование]='" & Me.П_УО & "'")
With rsLP
	If rsLP.Recordcount > 0 Then
		П_Проб = "Шлейфы- " & !Шлейфы & ", Сопрот- " & !Сопротивление
	Else
		П_Проб = "Нет данных для оборудования '" & Me.П_УО & "'"
	End If
	.Close
End With
Set rsLP = Nothing
...
Рейтинг: 0 / 0
Помогите с кодом
    #39607264
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, а начать правильнее будет так:
Код: vbnet
1.
2.
3.
4.
Dim rsLP As DAO.Recordset
Dim db as DAO.Database
Set db = CurrentDb
Set rsLP = db.OpenRecordset("select * from [Оборудование ОВО] where [Наименование]='" & Replace(Me.П_УО,"'","''") & "'")


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

Не используйте CurrentDb для обработки рекордсетов, в некотрых более сложных случаях могут быть ошибки, т.к. CurrentDb указывает на мгновенный снимок базы, переменная пересоздается при любом изменении структуры базы и объект, созданный с использованием CurrentDb напрямую может стать невалидным.

Ну и в тексте SQL при подстановке строк нужно задваивать одинарные кавычки, иначе будет ошибка, если в названии встретится кавычка.
...
Рейтинг: 0 / 0
Помогите с кодом
    #39607345
Wawan2005
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MrShin,

Ну до Ваших познаний мне ой как далеко, просто то, что я сотворил как не странно работает.
А вот почему Case, так мне и нужен чистый выбор, значений шлейфа и сопротивления при Наименовании равном П_УО,
Вечером попробую и Ваш вариант, вся проблема в том , что 80 % операторов, что Вы написали я в душе не чаю как работают и что делают, выдираю кусками из готовых примеров и пытаюсь подогнать под свои задачи.
Но если распишите как и что делают операторы в данном куске, может поменьше буду глупостей городить?! (Желательно как для тупых, хотя почему "как"?!)
...
Рейтинг: 0 / 0
Помогите с кодом
    #39607378
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что конкретно не понятно? Оператор With rsLP нужен в основном в данном случае только для того, чтобы не писать везде rsLP внутри этого блока. Можно его убрать и везде, где метод/свойство начинаются с точки или восклицательного знака просто поставить rsLP:
Код: vbnet
1.
2.
3.
4.
5.
6.
	If rsLP.Recordcount > 0 Then
		П_Проб = "Шлейфы- " & rsLP!Шлейфы & ", Сопрот- " & rsLP!Сопротивление
	Else
		П_Проб = "Нет данных"
	End If
	rsLP.Close
...
Рейтинг: 0 / 0
Помогите с кодом
    #39607645
Wawan2005
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MrShin,

Как работает вот это

Код: vbnet
1.
Dim rsLP As Recordset
...
Рейтинг: 0 / 0
Помогите с кодом
    #39607650
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это просто объявление объекта Recordset из библиотеки DAO. Вам необходимо ознакомиться с объектной моделью VBA, если вы задаете такие вопросы. Без нее ничего толкового сделать не удастся.
...
Рейтинг: 0 / 0
Помогите с кодом
    #39608216
Wawan2005
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MrShin,

А ссылочек путёвых не подкините, а то где не пытался читать либо сжато, либо не понятно.
...
Рейтинг: 0 / 0
Помогите с кодом
    #39608260
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да в хелпе все есть. Смотрите, например, объект Recordset, там есть свойства и методы, в описании часто приведены примеры. В сети полно примеров, если уж совсем гуглить лень, купите или скачайте книжку для начинающих.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Помогите с кодом
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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