Момчета, здравейте! Адски ще съм благодарен ако някой от Вас има някакви познания по Аксес и удари едно рамо в изпълнението на тази задача! Значи иска се да се направи ето това:
във формата за книгите, която направихте току-що, до бутоните със стрелките добавете бутон „Заявка за зареждане на склад“. Направете така, че когато потребителят кликне бутона, да се направи проверка дали складовата наличност на съответната книга (AvailableQuantity в Books) е по-малка от 5 и ако е така, то да се създаде e-mail съобщение до sales@izmislendostavchik.com с прикачен автоматично генериран Excel файл с данните от заявката „Books Query“. Ако складовата наличност е по-голяма или равна на 5, то да се извежда съобщение „В момента не е нужно зареждане на тази книга".
С всичко до тук съм се справил, но тази задача вече не знам как става... Мисля си за макрос, но не успявам да го създам така, че да сработи. Всякаква помощ ще ми е адско полезна!
Ето линк към работната книга до момента: http://dox.bg/files/dw?a=d035b0584e
Малко помощ по Microsoft Access
- streetracer1
- Мнения: 460
- Регистриран на: Вто 05 ное 2013 19:15
- Автомобил: Seat Ibiza
- Двигател: BMT 2008г
- Местоположение: Враца/София
Малко помощ по Microsoft Access
Последна промяна от streetracer1 на Чет 01 май 2014 12:39, променено общо 1 път.
- Чудомир
- Мнения: 2856
- Регистриран на: Вто 18 юли 2006 0:37
- Автомобил: Passat 5.5 + Caravelle T4
- Двигател: 03 V6 AMX + 97 VR6 AES
- Местоположение: Нейде из Швабско или под тепетата
Re: Малко помощ по Майкрософт Аксес
С макро няма как да стане.
Имаш основни грешки, които избождат очите:
В books query колонката Year я има 2 пъти
Думичката Year e резервирана, така че не е хубаво да се ползва за име на колонка, поле или друго. Като отворя query-то немския Аксес при мен го интерпретира на Jahr (аналога на Year), и мрънка, че не намира такава колонка. Промени името на полето на PubYear или нещо подобно.
Обектите в Аксес обикновено се именуват според вида им - qryBooks за query, frmBooks за формуляр и т.н. Сътветно формуляр с име books query е знак за лош дизайн, освен че е и подвежда - обектът с името не е query, а е формуляр.
Във формата използвай за имена на полетата други имена от тези на колонките в таблицата или query-тo, което ти е DataSource. Примерно ако в таблицата имаш поле BookId, то елемента, който е във формата, трябва да е нещо от рода на txtBookId, ако примерно се ползва TextControl, за да покажеш информацията от тази колонка от таблицата. Респективно ако ползваш ComboBox - cmbTextId
В противен случай, когато си в VBA едитора, през референцията с Ме.<нещоси> не е ясно дали референцираш полето от таблицата или формуляр контрол-а.
Във формата ти липсва BookId, за да можеш да референцираш директно към книгата, чието количество искаш да запиташ.
Ето ти идея за бутона:
Освен това не става ясно защо трябва да бъде генериран мейл с всички записи от "books query" - логично е да се генерира само мейл за книгата, която току-що е била проверена?
И в books query имаш твърди параметри "Година 2010 ИЛИ цена по-голяма от 10", които нямат никакъв смисъл или поне ги няма в условието на задачата?
Имаш основни грешки, които избождат очите:
В books query колонката Year я има 2 пъти
Думичката Year e резервирана, така че не е хубаво да се ползва за име на колонка, поле или друго. Като отворя query-то немския Аксес при мен го интерпретира на Jahr (аналога на Year), и мрънка, че не намира такава колонка. Промени името на полето на PubYear или нещо подобно.
Обектите в Аксес обикновено се именуват според вида им - qryBooks за query, frmBooks за формуляр и т.н. Сътветно формуляр с име books query е знак за лош дизайн, освен че е и подвежда - обектът с името не е query, а е формуляр.
Във формата използвай за имена на полетата други имена от тези на колонките в таблицата или query-тo, което ти е DataSource. Примерно ако в таблицата имаш поле BookId, то елемента, който е във формата, трябва да е нещо от рода на txtBookId, ако примерно се ползва TextControl, за да покажеш информацията от тази колонка от таблицата. Респективно ако ползваш ComboBox - cmbTextId
В противен случай, когато си в VBA едитора, през референцията с Ме.<нещоси> не е ясно дали референцираш полето от таблицата или формуляр контрол-а.
Във формата ти липсва BookId, за да можеш да референцираш директно към книгата, чието количество искаш да запиташ.
Ето ти идея за бутона:
Код: Избери всички
Private Sub btnReStock_Click()
Dim qty, msgtext
qty = DFirst("AvailableQuantity", "books", "BookID=" & Me.txtBookID)
Select Case qty
Case qty < 5
If MsgBox("Iskate li da generirate nova porychka?", vbInformation + vbOKCancel, "Nova porychka") = vbOK Then
msgtext = "Kolichestvoto na kniga " & Me.txtTitle & " e izcherpano"
DoCmd.SendObject acSendQuery, "query books", acFormatXLS, "sales@izmislendostavchik.com", , , "Nova zajavka", msgtext
End If
Case Else
MsgBox "Ne e neobhodimo zarezdane v momenta", vbOKOnly + vbInformation, "Info"
End Select
End Sub
Освен това не става ясно защо трябва да бъде генериран мейл с всички записи от "books query" - логично е да се генерира само мейл за книгата, която току-що е била проверена?
И в books query имаш твърди параметри "Година 2010 ИЛИ цена по-голяма от 10", които нямат никакъв смисъл или поне ги няма в условието на задачата?
- streetracer1
- Мнения: 460
- Регистриран на: Вто 05 ное 2013 19:15
- Автомобил: Seat Ibiza
- Двигател: BMT 2008г
- Местоположение: Враца/София
Re: Малко помощ по Майкрософт Аксес
Всичко, което е в работната книга е от няколко задачи, които трябваше да се направят съответно на различни упражнение. Това последното, което не успявам да направя е поредната задача, която трябва да се извърши върху тази книга. Честно да си кажа почти нищо не схванах... Ако ще е от полза... ето клип с демонстрация какво се иска от мен: http://www.youtube.com/watch?v=eP7h5a0QRw4
- Чудомир
- Мнения: 2856
- Регистриран на: Вто 18 юли 2006 0:37
- Автомобил: Passat 5.5 + Caravelle T4
- Двигател: 03 V6 AMX + 97 VR6 AES
- Местоположение: Нейде из Швабско или под тепетата
Re: Малко помощ по Майкрософт Аксес
Няма как да ти обясня как се прави френски гараж, когато единствения ти допир с автомобили е бил с автоматици, и то в ролята на пътник
Втори опит, накратко: За да фунционират нещата добре, има някакви основни начини как се прави една такава "работна книга" (тва от Workbook ли е превод? Щото ако да, то този термин го няма в Аксес, а до колкото знам само в Ексел)
Тези основни начини (или за да останем при директен превод от английски: добри практики) са козметични и нещата ще тръгнат и без тях. липсата им обаче прави по-нататъшното развитие на раб. книга трудоемко. Затова ти казах, че има неща за доизглаждане.
За да си решиш проблема бързо, вкарваш един бутон във формата, след като си минал в Design View s триъгълника горе вляво. После го именуваш btnReStock в Properties (през десен клик върху бутона стигаш до тях). После на Event кликаш до OnClick и копираш кода, който съм пуснал.
Най-накрая трябва да добавиш поле BookId във формата през менюто Add existing field и да го преименуваш на txtBookId.
Не е 100% това, което се вижда на видеото, но да речем едни 85-90% ги покриваш.
П.С. Обозначенията на английски може да не са точни, защото карам по спомен - при мен софтуера е на немски.

Втори опит, накратко: За да фунционират нещата добре, има някакви основни начини как се прави една такава "работна книга" (тва от Workbook ли е превод? Щото ако да, то този термин го няма в Аксес, а до колкото знам само в Ексел)
Тези основни начини (или за да останем при директен превод от английски: добри практики) са козметични и нещата ще тръгнат и без тях. липсата им обаче прави по-нататъшното развитие на раб. книга трудоемко. Затова ти казах, че има неща за доизглаждане.
За да си решиш проблема бързо, вкарваш един бутон във формата, след като си минал в Design View s триъгълника горе вляво. После го именуваш btnReStock в Properties (през десен клик върху бутона стигаш до тях). После на Event кликаш до OnClick и копираш кода, който съм пуснал.
Най-накрая трябва да добавиш поле BookId във формата през менюто Add existing field и да го преименуваш на txtBookId.
Не е 100% това, което се вижда на видеото, но да речем едни 85-90% ги покриваш.
П.С. Обозначенията на английски може да не са точни, защото карам по спомен - при мен софтуера е на немски.
- streetracer1
- Мнения: 460
- Регистриран на: Вто 05 ное 2013 19:15
- Автомобил: Seat Ibiza
- Двигател: BMT 2008г
- Местоположение: Враца/София
Re: Малко помощ по Майкрософт Аксес
Благодаря ти! Има напредък. Значи като цяло с щракването изкарва съобщение, че няма нужда да се зарежда, но при книга под 5 броя си изкарва същото, не пуска нито друго съобщение, нито някаква форма за поръчка. 

- Чудомир
- Мнения: 2856
- Регистриран на: Вто 18 юли 2006 0:37
- Автомобил: Passat 5.5 + Caravelle T4
- Двигател: 03 V6 AMX + 97 VR6 AES
- Местоположение: Нейде из Швабско или под тепетата
Re: Малко помощ по Майкрософт Аксес
Първо заменяш стария код с този:
После:
1 - кликаш
2 - трябва от 1 да издърпаш с мишката BookID към формата
3 - кликаш
4 - преименуваш както е показано
Стана ли да реагира при по-малко от 5?
Код: Избери всички
Private Sub btnReStock_Click()
Dim qty, msgtext
Me.Refresh
qty = DFirst("AvailableQuantity", "books", "BookID=" & Me.txtBookID)
If IsNull(qty) Then
MsgBox "Neuspeshen opit za ustanovjavane na broikata"
Exit Sub
End If
Select Case qty
Case 1 To 5
If MsgBox("Iskate li da generirate nova porychka?", vbInformation + vbOKCancel, "Nova porychka") = vbOK Then
msgtext = "Kolichestvoto na kniga " & Me.Title & " e izcherpano"
DoCmd.SendObject acSendQuery, "books query", acFormatXLS, "sales@izmislendostavchik.com", , , "Nova zajavka", msgtext
End If
Case Else
MsgBox "Ne e neobhodimo zarezdane v momenta", vbOKOnly + vbInformation, "Info"
End Select
End Sub
После:
1 - кликаш
2 - трябва от 1 да издърпаш с мишката BookID към формата
3 - кликаш
4 - преименуваш както е показано
Стана ли да реагира при по-малко от 5?
- streetracer1
- Мнения: 460
- Регистриран на: Вто 05 ное 2013 19:15
- Автомобил: Seat Ibiza
- Двигател: BMT 2008г
- Местоположение: Враца/София
Re: Малко помощ по Майкрософт Аксес
Направо заспа!
Голямо благодаря, колега! Само ще си ги направя на български известията и така го оставям. С макроси си играх и стигнах до положение, в което проверява и извежда съобщения, но при под 5 броя не успях да създам мейл. Така го оставям и отново ти благодаря! 



- Чудомир
- Мнения: 2856
- Регистриран на: Вто 18 юли 2006 0:37
- Автомобил: Passat 5.5 + Caravelle T4
- Двигател: 03 V6 AMX + 97 VR6 AES
- Местоположение: Нейде из Швабско или под тепетата
Re: Малко помощ по Майкрософт Аксес
Честито! Ще черпиш....
Сега ако промениш в заглавието Аксес на Access цена няма да имаш.
Успех!

Успех!
- streetracer1
- Мнения: 460
- Регистриран на: Вто 05 ное 2013 19:15
- Автомобил: Seat Ibiza
- Двигател: BMT 2008г
- Местоположение: Враца/София
Re: Малко помощ по Microsoft Access


Върни се в “ОФФ-Топик - електроника, техника, обзавеждане”
Кой е на линия
Потребители, разглеждащи този форум: Няма регистрирани потребители и 21 госта