powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Не работает код
23 сообщений из 23, страница 1 из 1
Не работает код
    #38734272
Admiral67
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите пожалуйста в чём может быть затык?
Код в VBA. Я только начинаю программировать.
Почему не хочу использовать для форм источник данных как запрос - форма должна показывать только определенные строчки, где фильтром является значение по полю "Станция", которое берется программой из глобальной переменной.



Private Sub Form_Load()
Dim rsp As Object
Dim con As Object
Dim stSql As String

Set con = Application.CurrentProject.Connection
stSql = "SELECT * FROM [tblGoodsAllocation]"
stSql = stSql & " WHERE [Станция] = CStr(MyVar) "
Set rsp = CreateObject("ADODB.Recordset")
rsp.Open stSql

If (rsp.EOF) Then
' MsgBox = "Не работает"
Else
While (Not (rsp.EOF))
Me.Код = rsp.Fields("Код")
Me.ОЗМ = rsp.Fields("ОЗМ")
Me.Количество= rsp.Fields("Количество")

rsp.MoveNext
Wend
End If


rsp.Close
Set rsp = Nothing
Set con = Nothing

End Sub
...
Рейтинг: 0 / 0
Не работает код
    #38734281
Admiral67
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Забыл написать. Ошибка появляется 3709. Невозможно использование подключения для выполнения операции. Оно закрыто или не допускается в данном контексте.
...
Рейтинг: 0 / 0
Не работает код
    #38734325
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Admiral67,

1. На какой строке ошибка.
2. Зачем нужно Set con = Application.CurrentProject.Connection, если con потом нигде не используется?
...
Рейтинг: 0 / 0
Не работает код
    #38734331
Admiral67
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
The_Prist,

Ошибка возникает на строчке

rsp.Open stSql

Зачем нужна строчка Set con = Application.CurrentProject.Connection затрудняюсь ответить.
...
Рейтинг: 0 / 0
Не работает код
    #38734349
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Admiral67,

stSql = stSql & " WHERE [Станция] = " & CStr(MyVar)
Кстати, что в MyVar?
Да и скобки квадратные не нужны вроде бы, т.к. они применяются если в названии поля присутствуют пробелы.
...
Рейтинг: 0 / 0
Не работает код
    #38734354
капитанская дочка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Admiral67,

вопрос то был скорее риторической. может энтот con использовать надо?
Код: vbnet
1.
rsp.Open stSql, con



послесловие: код лучше оформлять а то глаза режет
...
Рейтинг: 0 / 0
Не работает код
    #38734371
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
капитанская дочкавопрос то был скорее риторической+100
...
Рейтинг: 0 / 0
Не работает код
    #38734418
Admiral67
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
The_Prist,

В MyVar 4 символа - буква и три цирфы.

Исправил. Но теперь получаю другую ошибку.
Отсутствует значение для одного или нескольких параметров.
...
Рейтинг: 0 / 0
Не работает код
    #38734428
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Admiral67,

А это уже ошибка запроса. Скорее всего неверно указано имя поля. Есть в БД вообще поле с именем Станция?
А вообще я еще первым сообщением дал понять, что лучше сразу указывать на какой строке ошибка возникает...
...
Рейтинг: 0 / 0
Не работает код
    #38734429
Admiral67
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
The_Prist,

Ошибка возникает на строчке
rsp.Open stSql, con

Да, разумеется.
...
Рейтинг: 0 / 0
Не работает код
    #38734432
Фотография nord-woolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Не работает код
    #38734437
Admiral67
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
nord-woolf,

Спасибо. После танцев с бубном дело пошло.
Остался вопрос - как в поля формы залить данные из полученной SQL команды?
...
Рейтинг: 0 / 0
Не работает код
    #38734681
капитанская дочка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Admiral67,

давай думать, что делать
...
Рейтинг: 0 / 0
Не работает код
    #38735541
Admiral67
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ценю тонкий юмор. К сожалению Google не помог

Вот что написал (код ниже). Но в форме появляется только первая строка. Просьба подсказать почему?

rsp.MoveFirst
While Not rsp.EOF
For i = 0 To rsp.Fields.Count - 1
Me.Код = rsp.Fields(0)
Me.ОЗМ = rsp.Fields(1)
Me.Количество = rsp.Fields(2)
Me.НомерПаллеты = rsp.Fields(3)
Next
rsp.MoveNext

Wend
...
Рейтинг: 0 / 0
Не работает код
    #38735560
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
здесь происходит перебор записей:
Код: vbnet
1.
2.
3.
4.
While Not rsp.EOF
    ...
    rsp.MoveNext
Wend

все нормально

а здесь происходит вывод первых четырех полей столько раз, сколько всего полей в рекордсете:
Код: vbnet
1.
2.
3.
4.
5.
6.
For i = 0 To rsp.Fields.Count - 1
    Me.Код = rsp.Fields(0)
    Me.ОЗМ = rsp.Fields(1)
    Me.Количество = rsp.Fields(2)
    Me.НомерПаллеты = rsp.Fields(3)
Next

это как если написать на заборе какое-нибудь слово, а потом обвести буквы несколько раз. в вашем случае отличие в том, что шрифт от этого жирнее не станет.

Admiral67Но в форме появляется только первая строка. Просьба подсказать почему?существует два объяснения:
1) эта строка запись единственная. если бы их было больше, то появлялась бы последняя.
2) эта запись последняя. вы сами в глаза не видели свои данные.
...
Рейтинг: 0 / 0
Не работает код
    #38735919
капитанская дочка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,

первая последняя они в сиквеле не нумеруются...
...
Рейтинг: 0 / 0
Не работает код
    #38735941
капитанская дочка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Admiral67,

не знаю где смотрящие но код надо оформлять
и потом это вообще access вот туда и дорога
...
Рейтинг: 0 / 0
Не работает код
    #38736053
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
капитанская дочкаAntonariy,

первая последняя они в сиквеле не нумеруются...Зато в рекордсете у них порядок есть.

В запросе select * from tblGoodsAllocation, происходящем из одной таблицы, записи всегда будут возвращаться в одном и том же порядке в соответствии либо с первичным ключом либо с кластерным индексом, если это mssql. По умолчанию в нем первичный ключ кластерным и является.
...
Рейтинг: 0 / 0
Не работает код
    #38736079
капитанская дочка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Не работает код
    #38736364
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
капитанская дочкаAntonariy,

ms утверждает:
The order in which rows are returned in a result set are not guaranteed unless an ORDER BY clause is specified.

mysql пишет:
If ORDER BY is not given, the rows are returned in whatever order the system finds fastest to produce.
Мне все это известно.

капитанская дочкаумные люди проверяют на деле:
Clearly you cannot assume that your results are ordered unless you explicitly use ORDER BY clause. Умные люди умеют настраивать таблицы и подбирать данные так, чтобы утверждения подтверждались.
...
Рейтинг: 0 / 0
Не работает код
    #38736405
капитанская дочка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariyкапитанская дочкаAntonariy,

ms утверждает:
The order in which rows are returned in a result set are not guaranteed unless an ORDER BY clause is specified.

mysql пишет:
If ORDER BY is not given, the rows are returned in whatever order the system finds fastest to produce.
Мне все это известно.

тогда мне не понятно почему:
AntonariyВ запросе select * from tblGoodsAllocation, происходящем из одной таблицы,
записи всегда будут возвращаться в одном и том же порядке в соответствии
либо с первичным ключом либо с кластерным индексом, если это mssql.
По умолчанию в нем первичный ключ кластерным и является

Antonariyкапитанская дочкаумные люди проверяют на деле:
Clearly you cannot assume that your results are ordered unless you explicitly use ORDER BY clause. Умные люди умеют настраивать таблицы и подбирать данные так, чтобы утверждения подтверждались.

фраза из разряда: умные люди - умные люди.
по существу есть что возразить?
...
Рейтинг: 0 / 0
Не работает код
    #38736481
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
капитанская дочкатогда мне не понятно почему:По опыту. Селектор * из сферической таблицы будет выдавать записи в одном и том же порядке, хоть тресни. Как видим, нужно немного постараться, чтобы директива "не гарантирует" стала выполняться:
Clearly you cannot assume that your results are ordered unless you explicitly use ORDER BY clause.

Создать индекс по рандомному полю и не включить его в выборку.

А теперь фокус-покус: записи будут выводиться не по порядку 1,2,3, а в случайном порядке, но в одном и том же . Сам запусти этот пример, сделай десяток выборок SELECT TOP 100 ID FROM Data.WideTable и найди хоть одно отличие. У меня порядок был одним и тем же: 856 9506 3014 7874 2443

"Не гарантирует" на самом деле означает то, что даже десять одинаковых селектов могут каждый раз возвращать данные в разном порядке, соответственно и top x будет разным. Но для этого нужно еще и с джойнами помудрить.

капитанская дочкафраза из разряда: умные люди - умные люди.
по существу есть что возразить?А я разве возражаю? Не гарантирует, истинная правда. Вот только в случае ТСа условия для "не гарантирует" отсутствуют.
...
Рейтинг: 0 / 0
Не работает код
    #38736726
капитанская дочка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,

все так (почти) но есть одно НО (или больше) а именно неокрепшему мозгу вредно говорить что порядок есть даже если с оговорками

если не ошибаюсь на этом курсе нам рассказывали что принцип по которому возращаются кортежи есть чистой воды математика и эти алгоритмы улучшаются от версии к версии. поэтому "не гарантирует" значит что полагаться на авось не надо. на практике было у меня так что 2010 и 2012 возвращали в разном порядке из одной и той же таблицы для одного и того же запроса. было и такое что два идентичных сервера с идентичными базами давали разный порядок. по мне когда производитель говорит что сувать пальцы нельзя значит нельзя. но не каждый профессионал пользователь читает инструкции или относится к ним серьезно. на знаю правда теперь какое это все отношение имеет к делу...спор ради спора или даже меряние длины пис глубины знанний


тем не менее тс стоит научится оформлять код. описывать свои задачи четче. с вопросами по access обращаться в соответствующий раздел форума. и усвоить что данные из базы будут возвращаться неупорядоченными пока явно не будет использоваться order by

о последнем вопросе тс. на кой тут цикл с i ежели он не используется?

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
rsp.MoveFirst
While Not rsp.EOF
    For i = 0 To rsp.Fields.Count - 1
        Me.Код = rsp.Fields(0)
        Me.ОЗМ = rsp.Fields(1)
        Me.Количество = rsp.Fields(2)
        Me.НомерПаллеты = rsp.Fields(3)
    Next
    rsp.MoveNext
Wend



тогда жу так:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
rsp.MoveFirst
While Not rsp.EOF
    Me.Код = rsp.Fields(0)
    Me.ОЗМ = rsp.Fields(1)
    Me.Количество = rsp.Fields(2)
    Me.НомерПаллеты = rsp.Fields(3)
    rsp.MoveNext
Wend



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

тс видимо хочет выводить список. тогда и пользовать надо список или подчиненую форму.

Код: vbnet
1.
Set Me.MyListbox.Recordset = rsp
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Не работает код
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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