Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Access+vba+ ветвление +цикл
|
|||
|---|---|---|---|
|
#18+
Пытаюсь создать ветвление 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 Сразу оговорю што запросы рабочие тоесть все работало но вот заносились заявки со своими номерами без проверки.Сам массив нормально ловит номера заявок. Путаюсь в синтаксисе ветвления с цикло ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2010, 14:25 |
|
||
|
Access+vba+ ветвление +цикл
|
|||
|---|---|---|---|
|
#18+
забыл добавить после If rstQU(0) > 0 Then arrZ = rstZ.GetRows(n) Но ошибка таже пишет че за елсе без иф ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2010, 14:41 |
|
||
|
Access+vba+ ветвление +цикл
|
|||
|---|---|---|---|
|
#18+
сразу по-человечески нельзя? Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2010, 14:50 |
|
||
|
Access+vba+ ветвление +цикл
|
|||
|---|---|---|---|
|
#18+
после исправлений некоторых код выглядит так 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2010, 14:50 |
|
||
|
Access+vba+ ветвление +цикл
|
|||
|---|---|---|---|
|
#18+
Как это у вас цикл начинается в одной ветке ветвления а заканчивается в другой???? в этом и ошибка разберитесь с алгоритмом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2010, 14:53 |
|
||
|
Access+vba+ ветвление +цикл
|
|||
|---|---|---|---|
|
#18+
Kirill96после исправлений некоторых код выглядит так Почитайте правила форума и правила оформления сообщений! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2010, 14:53 |
|
||
|
Access+vba+ ветвление +цикл
|
|||
|---|---|---|---|
|
#18+
С ветвлением разобрался теперь все работает как надо но вот с циклом засада тоесть щас идем проверка массива по циклу arrz(0,i) c введенным числом на форме. Но ошибка в чем иттерации идут и проверка получается бессмысленной, т.к к примеру есть массив А(абв) есть условие А(i)<>а Ну на первой итерации не пройдет но дальше то по циклу б<>a и операция проходит. Возникает вопрос можно ли как то условие задать по другому или вообще обойтись не циклом а проверкой множеств...На ведите на мысль. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2010, 08:32 |
|
||
|
Access+vba+ ветвление +цикл
|
|||
|---|---|---|---|
|
#18+
Из вашего кода неясно, что такое arrz и как он заполняется напишите ТЗ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2010, 09:41 |
|
||
|
Access+vba+ ветвление +цикл
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2010, 09:52 |
|
||
|
Access+vba+ ветвление +цикл
|
|||
|---|---|---|---|
|
#18+
пока придумал тока так x = InStr(1, tr1, tr2, vbBinaryCompare) где tr1 массив занесенный в строку tr2 число введенное на форме занесенное в строку instr возвращает положение элемента tr2 в tr1,если его нет то 0, а далее условие..... Разумеется массив скорее всего уложится в рамки переменной стринг ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2010, 09:56 |
|
||
|
Access+vba+ ветвление +цикл
|
|||
|---|---|---|---|
|
#18+
Kirill96, Зачем сканировать массив для проверки существования значения? Проверяйте сразу в базе "SELECT .... WHERE ...." и марш читать фак по оформлению сообщений, в частности исходного кода ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2010, 10:00 |
|
||
|
Access+vba+ ветвление +цикл
|
|||
|---|---|---|---|
|
#18+
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();") ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2010, 12:22 |
|
||
|
Access+vba+ ветвление +цикл
|
|||
|---|---|---|---|
|
#18+
разумеется, откуда ему знать, что x - это у вас переменная, а не часть синтаксиса запроса??? Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2010, 12:29 |
|
||
|
Access+vba+ ветвление +цикл
|
|||
|---|---|---|---|
|
#18+
ох уж эти двоечники Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2010, 12:29 |
|
||
|
Access+vba+ ветвление +цикл
|
|||
|---|---|---|---|
|
#18+
WHERE (Заявка.Nquest=x) AND Смена.DateS=Date();") а как штоб прошел с переменной имещей значение дата AND Смена.DateS= D ;") ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2010, 12:02 |
|
||
|
Access+vba+ ветвление +цикл
|
|||
|---|---|---|---|
|
#18+
или где можно прочитать про такой синтаксис & + ...... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2010, 12:05 |
|
||
|
Access+vba+ ветвление +цикл
|
|||
|---|---|---|---|
|
#18+
Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2010, 12:13 |
|
||
|
Access+vba+ ветвление +цикл
|
|||
|---|---|---|---|
|
#18+
Kirill96или где можно прочитать про такой синтаксис & + ...... Что такое "синтаксис &+" & и + это (в случае текстовой строки) операторы конкатенации - можете прочитать в хелпе ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2010, 12:14 |
|
||
|
Access+vba+ ветвление +цикл
|
|||
|---|---|---|---|
|
#18+
Kirill96или где можно прочитать про такой синтаксис & + ...... Про полезный трюк при склеивании строк с использованием "&" и "+" в ВБА можно прочитать здесь http://www.sql.ru/faq/faq_topic.aspx?fid=213 Ответ Q19, пункт А2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2010, 12:34 |
|
||
|
Access+vba+ ветвление +цикл
|
|||
|---|---|---|---|
|
#18+
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 переменные имеющие значение в формате дама в запросе не хватает точки с зяпятой и двойных опострофов, на ето не обращать внимание ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2010, 13:07 |
|
||
|
Access+vba+ ветвление +цикл
|
|||
|---|---|---|---|
|
#18+
дама=дата ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2010, 13:07 |
|
||
|
Access+vba+ ветвление +цикл
|
|||
|---|---|---|---|
|
#18+
#" & d3 & "# #" & d4 & "# выдает ошибку ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2010, 13:23 |
|
||
|
|

start [/forum/topic.php?fid=60&msg=36857465&tid=2159420]: |
0ms |
get settings: |
12ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
34ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
| others: | 16ms |
| total: | 156ms |

| 0 / 0 |
