Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Access+vba+ ветвление +цикл / 23 сообщений из 23, страница 1 из 1
16.09.2010, 14:25
    #36850264
Kirill96
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Access+vba+ ветвление +цикл
Пытаюсь создать ветвление
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
16.09.2010, 14:41
    #36850319
Kirill96
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Access+vba+ ветвление +цикл
забыл добавить после If rstQU(0) > 0 Then

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

Код: 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
16.09.2010, 14:50
    #36850354
Kirill96
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Access+vba+ ветвление +цикл
после исправлений некоторых код выглядит так

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
16.09.2010, 14:53
    #36850364
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Access+vba+ ветвление +цикл
Как это у вас цикл начинается в одной ветке ветвления а заканчивается в другой????
в этом и ошибка

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

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

напишите ТЗ
...
Рейтинг: 0 / 0
17.09.2010, 09:52
    #36851659
Kirill96
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Access+vba+ ветвление +цикл
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
17.09.2010, 09:56
    #36851670
Kirill96
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Access+vba+ ветвление +цикл
пока придумал тока так

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

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

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

и марш читать фак по оформлению сообщений, в частности исходного кода
...
Рейтинг: 0 / 0
17.09.2010, 12:22
    #36851961
Kirill96
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Access+vba+ ветвление +цикл
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
17.09.2010, 12:29
    #36851980
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Access+vba+ ветвление +цикл
разумеется, откуда ему знать, что x - это у вас переменная, а не часть синтаксиса запроса???

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

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

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

AND Смена.DateS= D ;")
...
Рейтинг: 0 / 0
21.09.2010, 12:05
    #36857145
Kirill96
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Access+vba+ ветвление +цикл
или где можно прочитать про такой синтаксис & + ......
...
Рейтинг: 0 / 0
21.09.2010, 12:13
    #36857166
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Access+vba+ ветвление +цикл
Код: plaintext
"WHERE (Заявка.Nquest=x) AND Смена.DateS="+Format$(Date(),"\#mm\/dd\/yyyy\#")+";"
...
Рейтинг: 0 / 0
21.09.2010, 12:14
    #36857171
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Access+vba+ ветвление +цикл
Kirill96или где можно прочитать про такой синтаксис & + ......
Что такое "синтаксис &+"
& и + это (в случае текстовой строки) операторы конкатенации - можете прочитать в хелпе
...
Рейтинг: 0 / 0
21.09.2010, 12:34
    #36857264
mds_world
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Access+vba+ ветвление +цикл
Kirill96или где можно прочитать про такой синтаксис & + ......
Про полезный трюк при склеивании строк с использованием "&" и "+" в ВБА можно прочитать здесь http://www.sql.ru/faq/faq_topic.aspx?fid=213 Ответ Q19, пункт А2
...
Рейтинг: 0 / 0
21.09.2010, 13:07
    #36857361
Kirill96
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Access+vba+ ветвление +цикл
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
21.09.2010, 13:07
    #36857364
Kirill96
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Access+vba+ ветвление +цикл
дама=дата
...
Рейтинг: 0 / 0
21.09.2010, 13:23
    #36857424
Kirill96
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Access+vba+ ветвление +цикл
#" & d3 & "#
#" & d4 & "#
выдает ошибку
...
Рейтинг: 0 / 0
21.09.2010, 13:33
    #36857465
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Access+vba+ ветвление +цикл
Kirill96не проходит
я вам дал ответ, как правильно
чем он вас не удовлетворил?
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Access+vba+ ветвление +цикл / 23 сообщений из 23, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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