powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Access+vba+ ветвление +цикл
23 сообщений из 23, страница 1 из 1
Access+vba+ ветвление +цикл
    #36850264
Kirill96
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пытаюсь создать ветвление
if ......then
......
for i=1 to n
if .....then....
else.....

Private Sub ButtonZ_Click()
Dim rstQU, rstSM, rstZ As DAO.Recordset
Dim dbs As Database
Dim m3, m4, n As Integer
Dim arrZ()
Set dbs = CurrentDb
'ищем максимум код заявки
Set rstQU = dbs.OpenRecordset("SELECT Max(Заявка.IDquest) AS [Max-IDquest] FROM Заявка;")
'ищем код смeны с текущей датой
Set rstSM = dbs.OpenRecordset("SELECT Смена.IDs FROM Смена WHERE (Смена.DateS)=Date();")
m3 = rstSM(0)
'massive
Set rstZ = dbs.OpenRecordset("SELECT Заявка.Nquest FROM Смена INNER JOIN Заявка ON Смена.IDs = Заявка.IDs WHERE Смена.DateS=Date();")
n = DCount("IDquest", "заявка")


'если нет макс кода то заявок нет а значит присваиваем 1 и заеосим в таблицу
If rstQU(0) <= 0 Then
m4 = 1

dbs.Execute "INSERT INTO Заявка (Nquest,Client,Marka,Vf,Tquest,Interval,FIOq,Dataq,Sposob,IDquest,IDs ) Values('" & Form_Заявка![NQU1].Value & "','" & Form_Заявка![CLIE1].Value & "','" & Form_Заявка![MAR1].Value & "','" & Form_Заявка![VF1].Value & "','" & Form_Заявка![TQUE1].Value & "','" & Form_Заявка![INTL1].Value & "','" & Form_Заявка![FIOQZ1].Value & "','" & Form_Заявка![DATAQZ1].Value & "','" & Form_Заявка![SPB1].Value & "','" & m4 & "','" & m3 & "')"

ElseIf rstQU(0) > 0 Then
For i = 1 To n

'Проверка значение формы и значений массива
ElseIf arrZ(0 i) <> Form_Заявка![NQU1].Value Then ---пишет иначи без если
m4 = rstQU(0) + 1

dbs.Execute "INSERT INTO Заявка (Nquest,Client,Marka,Vf,Tquest,Interval,FIOq,Dataq,Sposob,IDquest,IDs ) Values('" & Form_Заявка![NQU1].Value & "','" & Form_Заявка![CLIE1].Value & "','" & Form_Заявка![MAR1].Value & "','" & Form_Заявка![VF1].Value & "','" & Form_Заявка![TQUE1].Value & "','" & Form_Заявка![INTL1].Value & "','" & Form_Заявка![FIOQZ1].Value & "','" & Form_Заявка![DATAQZ1].Value & "','" & Form_Заявка![SPB1].Value & "','" & m4 & "','" & m3 & "')"

Else
MsgBox "Вы пытаетесь занести заявку с существующим номером"
Next i
End If

End Sub

Сразу оговорю што запросы рабочие тоесть все работало но вот заносились заявки со своими номерами без проверки.Сам массив нормально ловит номера заявок. Путаюсь в синтаксисе ветвления с цикло
...
Рейтинг: 0 / 0
Access+vba+ ветвление +цикл
    #36850319
Kirill96
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
забыл добавить после If rstQU(0) > 0 Then

arrZ = rstZ.GetRows(n)
Но ошибка таже пишет че за елсе без иф
...
Рейтинг: 0 / 0
Access+vba+ ветвление +цикл
    #36850353
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сразу по-человечески нельзя?

Код: 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.
35.
36.
37.
Private Sub ButtonZ_Click()
Dim rstQU, rstSM, rstZ As DAO.Recordset
Dim dbs As Database
Dim m3, m4, n As Integer
Dim arrZ()
Set dbs = CurrentDb
'ищем максимум код заявки
Set rstQU = dbs.OpenRecordset("SELECT Max(Заявка.IDquest) AS [Max-IDquest] FROM Заявка;")
'ищем код смeны с текущей датой
Set rstSM = dbs.OpenRecordset("SELECT Смена.IDs FROM Смена WHERE (Смена.DateS)=Date();")
m3 = rstSM( 0 )
'massive
Set rstZ = dbs.OpenRecordset("SELECT Заявка.Nquest FROM Смена INNER JOIN Заявка ON Смена.IDs = Заявка.IDs WHERE Смена.DateS=Date();")
n = DCount("IDquest", "заявка")


'если нет макс кода то заявок нет а значит присваиваем 1 и заеосим в таблицу
If rstQU( 0 ) <=  0  Then
m4 =  1 

dbs.Execute "INSERT INTO Заявка (Nquest,Client,Marka,Vf,Tquest,Interval,FIOq,Dataq,Sposob,IDquest,IDs ) Values('" & Form_Заявка![NQU1].Value & "','" & Form_Заявка![CLIE1].Value & "','" & Form_Заявка![MAR1].Value & "','" & Form_Заявка![VF1].Value & "','" & Form_Заявка![TQUE1].Value & "','" & Form_Заявка![INTL1].Value & "','" & Form_Заявка![FIOQZ1].Value & "','" & Form_Заявка![DATAQZ1].Value & "','" & Form_Заявка![SPB1].Value & "','" & m4 & "','" & m3 & "')"

ElseIf rstQU( 0 ) >  0  Then
For i =  1  To n

'Проверка значение формы и значений массива
 ElseIf arrZ( 0 , i) <> Form_Заявка![NQU1].Value Then
 ---пишет иначи без если
m4 = rstQU( 0 ) +  1 

dbs.Execute "INSERT INTO Заявка (Nquest,Client,Marka,Vf,Tquest,Interval,FIOq,Dataq,Sposob,IDquest,IDs ) Values('" & Form_Заявка![NQU1].Value & "','" & Form_Заявка![CLIE1].Value & "','" & Form_Заявка![MAR1].Value & "','" & Form_Заявка![VF1].Value & "','" & Form_Заявка![TQUE1].Value & "','" & Form_Заявка![INTL1].Value & "','" & Form_Заявка![FIOQZ1].Value & "','" & Form_Заявка![DATAQZ1].Value & "','" & Form_Заявка![SPB1].Value & "','" & m4 & "','" & m3 & "')"

Else
MsgBox "Вы пытаетесь занести заявку с существующим номером"
Next i
End If

End Sub
...
Рейтинг: 0 / 0
Access+vba+ ветвление +цикл
    #36850354
Kirill96
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
после исправлений некоторых код выглядит так

Private Sub ButtonZ_Click()
Dim rstQU, rstSM, rstZ As DAO.Recordset
Dim dbs As Database
Dim m3, m4, n As Integer
Dim arrZ()
Set dbs = CurrentDb
'ищем максимум код заявки
Set rstQU = dbs.OpenRecordset("SELECT Max(Заявка.IDquest) AS [Max-IDquest] FROM Заявка;")
'ищем код смeны с текущей датой
Set rstSM = dbs.OpenRecordset("SELECT Смена.IDs FROM Смена WHERE (Смена.DateS)=Date();")
m3 = rstSM(0)
'massive
Set rstZ = dbs.OpenRecordset("SELECT Заявка.Nquest FROM Смена INNER JOIN Заявка ON Смена.IDs = Заявка.IDs WHERE Смена.DateS=Date();")
n = DCount("IDquest", "заявка")


'если нет макс кода то заявок нет а значит присваиваем 1 и заеосим в таблицу
If rstQU(0) <= 0 Then
m4 = 1
dbs.Execute "INSERT INTO Заявка (Nquest,Client,Marka,Vf,Tquest,Interval,FIOq,Dataq,Sposob,IDquest,IDs ) Values('" & Form_Заявка![NQU1].Value & "','" & Form_Заявка![CLIE1].Value & "','" & Form_Заявка![MAR1].Value & "','" & Form_Заявка![VF1].Value & "','" & Form_Заявка![TQUE1].Value & "','" & Form_Заявка![INTL1].Value & "','" & Form_Заявка![FIOQZ1].Value & "','" & Form_Заявка![DATAQZ1].Value & "','" & Form_Заявка![SPB1].Value & "','" & m4 & "','" & m3 & "')"
Else
If rstQU(0) > 0 Then
arrZ = rstZ.GetRows(n)
Else
For i = 1 To n
If arrZ(0, i) <> Form_Заявка![NQU1].Value Then
m4 = rstQU(0) + 1
dbs.Execute "INSERT INTO Заявка (Nquest,Client,Marka,Vf,Tquest,Interval,FIOq,Dataq,Sposob,IDquest,IDs ) Values('" & Form_Заявка![NQU1].Value & "','" & Form_Заявка![CLIE1].Value & "','" & Form_Заявка![MAR1].Value & "','" & Form_Заявка![VF1].Value & "','" & Form_Заявка![TQUE1].Value & "','" & Form_Заявка![INTL1].Value & "','" & Form_Заявка![FIOQZ1].Value & "','" & Form_Заявка![DATAQZ1].Value & "','" & Form_Заявка![SPB1].Value & "','" & m4 & "','" & m3 & "')"

Else
MsgBox "Вы пытаетесь занести заявку с существующим номером"
Next i ругается на некст без фор
End If

End Sub
...
Рейтинг: 0 / 0
Access+vba+ ветвление +цикл
    #36850364
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как это у вас цикл начинается в одной ветке ветвления а заканчивается в другой????
в этом и ошибка

разберитесь с алгоритмом.
...
Рейтинг: 0 / 0
Access+vba+ ветвление +цикл
    #36850369
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kirill96после исправлений некоторых код выглядит так
Почитайте правила форума и правила оформления сообщений!
...
Рейтинг: 0 / 0
Access+vba+ ветвление +цикл
    #36851570
Kirill96
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
С ветвлением разобрался теперь все работает как надо но вот с циклом засада
тоесть щас идем проверка массива по циклу arrz(0,i) c введенным числом на форме.
Но ошибка в чем иттерации идут и проверка получается бессмысленной, т.к к примеру есть массив
А(абв) есть условие А(i)<>а
Ну на первой итерации не пройдет но дальше то по циклу б<>a и операция проходит.

Возникает вопрос можно ли как то условие задать по другому или вообще обойтись не циклом а проверкой множеств...На ведите на мысль.
...
Рейтинг: 0 / 0
Access+vba+ ветвление +цикл
    #36851640
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Из вашего кода неясно, что такое arrz и как он заполняется

напишите ТЗ
...
Рейтинг: 0 / 0
Access+vba+ ветвление +цикл
    #36851659
Kirill96
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Private Sub ButtonZ_Click()
Dim rstQU, rstSM, rstZD, rstZ As DAO.Recordset
Dim dbs As Database
Dim m3, m4, n As Integer
Dim arrZ()
Set dbs = CurrentDb
'ищем заявки
Set rstZ = dbs.OpenRecordset("SELECT Заявка.Idquest from Заявка;")
'ищем максимум код заявки
Set rstQU = dbs.OpenRecordset("SELECT Max(Заявка.IDquest) AS [Max-IDquest] FROM Заявка;")
'ищем код смeны с текущей датой
Set rstSM = dbs.OpenRecordset("SELECT Смена.IDs FROM Смена WHERE (Смена.DateS)=Date();")

'проверим есть ли смена с текущей датой
If rstSM.RecordCount = 0 Then
MsgBox "Вы пытаетесь занести заявку не оформив свою смену, либо ваша смена не добавилась в БД"
Else
'если есть то находим ее код
m3 = rstSM(0)
Set rstZD = dbs.OpenRecordset("SELECT Заявка.Nquest FROM Смена INNER JOIN Заявка ON Смена.IDs = Заявка.IDs WHERE Смена.DateS=Date();")
n = DCount("IDquest", "заявка")
'проверим есть ли заявки вообще
If rstZ.RecordCount = 0 Then
MsgBox "nety присваиваю коду 1"
m4 = 1
dbs.Execute "INSERT INTO Заявка (Nquest,Client,Marka,Vf,Tquest,Interval,FIOq,Dataq,Sposob,IDquest,IDs ) Values('" & Form_Заявка![NQU1].Value & "','" & Form_Заявка![CLIE1].Value & "','" & Form_Заявка![MAR1].Value & "','" & Form_Заявка![VF1].Value & "','" & Form_Заявка![TQUE1].Value & "','" & Form_Заявка![INTL1].Value & "','" & Form_Заявка![FIOQZ1].Value & "','" & Form_Заявка![DATAQZ1].Value & "','" & Form_Заявка![SPB1].Value & "','" & m4 & "','" & m3 & "')"
Else
'проверим есть ли аявки с таким номером
arrZ = rstZD.GetRows(n) For i = 0 To n - 1 If arrZ(0 i) <> Form_Заявка![NQU1].Value Then
MsgBox "заношу с нарощением кода заявки и номер не совпадает с номером в форме"
m4 = rstQU(0) + 1
dbs.Execute "INSERT INTO Заявка (Nquest,Client,Marka,Vf,Tquest,Interval,FIOq,Dataq,Sposob,IDquest,IDs ) Values('" & Form_Заявка![NQU1].Value & "','" & Form_Заявка![CLIE1].Value & "','" & Form_Заявка![MAR1].Value & "','" & Form_Заявка![VF1].Value & "','" & Form_Заявка![TQUE1].Value & "','" & Form_Заявка![INTL1].Value & "','" & Form_Заявка![FIOQZ1].Value & "','" & Form_Заявка![DATAQZ1].Value & "','" & Form_Заявка![SPB1].Value & "','" & m4 & "','" & m3 & "')"

Else
MsgBox "Вы пытаетесь занести заявку с существующим номером"
End If
Next i
End If
End If
End Sub
...
Рейтинг: 0 / 0
Access+vba+ ветвление +цикл
    #36851670
Kirill96
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
пока придумал тока так

x = InStr(1, tr1, tr2, vbBinaryCompare)
где tr1 массив занесенный в строку
tr2 число введенное на форме занесенное в строку
instr возвращает положение элемента tr2 в tr1,если его нет то 0,
а далее условие.....

Разумеется массив скорее всего уложится в рамки переменной стринг
...
Рейтинг: 0 / 0
Access+vba+ ветвление +цикл
    #36851675
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kirill96,

Зачем сканировать массив для проверки существования значения? Проверяйте сразу в базе "SELECT .... WHERE ...."

и марш читать фак по оформлению сообщений, в частности исходного кода
...
Рейтинг: 0 / 0
Access+vba+ ветвление +цикл
    #36851961
Kirill96
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dim rstQU, rstSM, rstZD, rstZ, rstZDF As DAO.Recordset
Dim dbs As Database
Dim m3, m4, x As Integer
Dim x1 As Date

Set dbs = CurrentDb

.................


x = Form_Заявка![NQU1]
MsgBox x
Set rstZDF = dbs.OpenRecordset("SELECT Заявка.Nquest FROM Смена INNER JOIN Заявка ON Смена.IDs = Заявка.IDs WHERE (Заявка.Nquest=x) AND Смена.DateS=Date();")

Пишет слишком мало параметров при таком виде
WHERE (Заявка.Nquest=x) AND Смена.DateS=Date();")
WHERE (Заявка.Nquest=Form_Заявка![NQU1]) AND Смена.DateS=Date();")
WHERE (Заявка.Nquest=Form_Заявка![NQU1].Value) AND Смена.DateS=Date();")
WHERE (Заявка.Nquest=x) AND Смена.DateS=Date();")

если явное че то подставить то проходит
типо
WHERE (Заявка.Nquest=1) AND Смена.DateS=Date();")
...
Рейтинг: 0 / 0
Access+vba+ ветвление +цикл
    #36851980
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
разумеется, откуда ему знать, что x - это у вас переменная, а не часть синтаксиса запроса???

Код: plaintext
"...Nquest=" + x + ") AND..."
...
Рейтинг: 0 / 0
Access+vba+ ветвление +цикл
    #36851983
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ох уж эти двоечники

Код: plaintext
Set rstZDF = dbs.OpenRecordset("SELECT Заявка.Nquest FROM Смена INNER JOIN Заявка ON Смена.IDs = Заявка.IDs WHERE (Заявка.Nquest=" & x & ") AND Смена.DateS=Date()")
...
Рейтинг: 0 / 0
Access+vba+ ветвление +цикл
    #36857140
Kirill96
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
WHERE (Заявка.Nquest=x) AND Смена.DateS=Date();")

а как штоб прошел с переменной имещей значение дата

AND Смена.DateS= D ;")
...
Рейтинг: 0 / 0
Access+vba+ ветвление +цикл
    #36857145
Kirill96
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
или где можно прочитать про такой синтаксис & + ......
...
Рейтинг: 0 / 0
Access+vba+ ветвление +цикл
    #36857166
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
"WHERE (Заявка.Nquest=x) AND Смена.DateS="+Format$(Date(),"\#mm\/dd\/yyyy\#")+";"
...
Рейтинг: 0 / 0
Access+vba+ ветвление +цикл
    #36857171
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kirill96или где можно прочитать про такой синтаксис & + ......
Что такое "синтаксис &+"
& и + это (в случае текстовой строки) операторы конкатенации - можете прочитать в хелпе
...
Рейтинг: 0 / 0
Access+vba+ ветвление +цикл
    #36857264
Фотография mds_world
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kirill96или где можно прочитать про такой синтаксис & + ......
Про полезный трюк при склеивании строк с использованием "&" и "+" в ВБА можно прочитать здесь http://www.sql.ru/faq/faq_topic.aspx?fid=213 Ответ Q19, пункт А2
...
Рейтинг: 0 / 0
Access+vba+ ветвление +цикл
    #36857361
Kirill96
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Set rstSVF = dbs.OpenRecordset("SELECT Смена.DateB, Смена.Dispetcher, Смена.Operator, Смена.Laborant, Смена.Cars, Смена.OursCars, Смена.AnotherCars, Смена.Inrepair, Смена.IDs, Смена.DateE, Смена.Idmanager FROM Смена WHERE Смена.DateB=d1 AND Смена.DateE=d2
не проходит
где d1 и d2 переменные имеющие значение в формате дама

в запросе не хватает точки с зяпятой и двойных опострофов, на ето не обращать внимание
...
Рейтинг: 0 / 0
Access+vba+ ветвление +цикл
    #36857364
Kirill96
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
дама=дата
...
Рейтинг: 0 / 0
Access+vba+ ветвление +цикл
    #36857424
Kirill96
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
#" & d3 & "#
#" & d4 & "#
выдает ошибку
...
Рейтинг: 0 / 0
Access+vba+ ветвление +цикл
    #36857465
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kirill96не проходит
я вам дал ответ, как правильно
чем он вас не удовлетворил?
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Access+vba+ ветвление +цикл
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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