| |
|
|
| | Так получилось, что пришлось помогать дочке с решением заданий. А я в Аксесе слабоват.
Что бы помочь нужно разобраться самому. Вопрос стоит так Разработать модуль с такими-то условиями по существующим таблицам (типа если у кого-то долгов > 3 не вернуто, то больше не давать).
Вот в чем вопрос. как работает модуль в аксес. Он же должен быть к чему-то привязан. Ну там к форме, или как/ Как вызывается? В задании стоит вопрос о проверке. Так я думаю, что фамилию(есть таблца отдельно с фамилиями) не стоит вводить вречную, а выбрать из списка. Значит форма(со списком) желательна. Посоветуйте где хорошо расписано о модулях в аксесе
С VB6 и VBA в Ёкселе знаком неплохо. А с Ексесс очень поверхностно. | |
| |
| |
| |
|
|
| |
Посоветуйте где хорошо расписано о модулях в аксесе
|
Очень хорошо расписано на этом форуме....
И очень много....
Вы лучше делая - задавайте вопросы - на которые у Вас в знаниях отсутствуют ответы....
==============================================================
Так я думаю, что фамилию(есть таблца отдельно с фамилиями) не стоит вводить вречную, а выбрать из списка
|
Для начала создайте ПолеСоСписком на основе таблицы фамилии (источник строк в свойствах поля) | |
| |
| |
| |
|
|
| | Задача по отбору данных соответствующих некому условию (как у Вас "у кого-то долгов > 3 не вернуто'), решаются с помощью запросов.
ПОсмотрите базы "Борей" и "Решения" (ониидут в комплекте с access) | |
| |
| |
| |
|
|
| | Я создал форму. На ней комбобокс. Связал его с таблицей.
Тепери при выборе в камбо чела надо из другой таблици выбрать его долги
Я делал то же самое из VB и у меня нормально работал код(урезанный)
тое есть я шел по таблице по записям и сверял фамилию с образцом Ну и соответственно считал. Попытался применить здесь: rs.RecordCount = 1 хотя там записей полно
где у меня не правльно?
Set db = WS.OpenDatabase(strDBName, False, False)
sSQL = "SELECT * FROM [Знакомые];"
Set rs = db.OpenRecordset(sSQL)
rs.MoveLast
rs.MoveFirst
For J = 1 To rs.RecordCount
здесь мой код. построчно выбирал, считал
rs.MoveNext
Next J | |
| |
| |
| |
|
|
| |
rs.MoveLast
rs.MoveFirst
do while not rs.EOF
здесь мой код. построчно выбирал, считал
rs.MoveNext
loop
|
Лучше сразу отбирать нужные (соответствующие условию) записи, а не лопатить все записи из таблицы
sSQL = "SELECT * FROM [Знакомые] where Здесь условие ;"
посчитать кол-во записей соответвующих условию можно функцией Dcount или запросом с группировкой | |
| |
| |
| |
|
|
| | Теперь можно в конструкторе запросов - создать запрос к таблице долгов, где условие отбора по полю фамилия - указать комбобокс с формы(его значение)
================================================
И ещё одно условие отбора записей из таблицы долгов - по полю( долг) , если таковое имеется если такового нет, можно по дате окончания задолженности(дата возврата долга)
но тут надо с группировкой, потому - время выложить Вашу базу для обозрения...  | |
| |
| |
| |
|
|
| | Я не стал делать в запросе по тому, что в задании вопрос о модуле. Вот я и решил в модуль вынести процедуру поиска-отбора-сравнения-суммирования.
В процедуру модуля передаю с формы фамилию из комбика. С этим всё нормально. И уже из модуля надо считать все записи из таблицы. Перелопатить. Ничего другого не придумал, чем заполнить модуль. Вот пока загвоздка с открытием таблицы | |
| |
| |
| |
|
|
| | Вот пока загвоздка с открытием таблицы |
мой код не помог? | |
| |
| |
| |
|
|
| |
Я не стал делать в запросе по тому, что
|
Этот самый запрос SQL - потом переносится ручками в модуль - в вмиде строки запроса - как выше написал Osmor
sSQL = "SELECT * FROM [Знакомые] where Здесь у
|
| |
| |
| |
| |
|
|
| | В модуле объявляются переменные - чёта типа
Public rst As Recordset, tdf As TableDef, dbs As Database,
qdf As QueryDef, strSQL As String, tabk As String, tabd As String
|
| |
| |
| |
| |
|
|
| | В модуле создаётся функция или процедура чёта типа
и в неё вписываем SQL инструкцию запроса, созданного с помощъю конструктора, хотя конечно если можете запрос без конструктора создать - пожалуйста.........
'Dim rst As ADODB.Recordset
'Set rst = New ADODB.Recordset
'rst.Open "SELECT должники_TBL.* From должники_TBL WHERE ((.............. ", GLB_CONNECTION, adOpenKeyset, adLockOptimistic
'If rst.RecordCount <> 0 Then
' Do While Not rst.EOF '
'rst("")=""
' rst.MoveNext
' Loop
'End If
|
| |
| |
| |
| |
|
|
| | что то с условием не разберусь. С синтаксисом. Всё время ругается
А как узнать количество строк?
Set db = CurrentDb() 'это я я взял из примеров. Правильно ли такое обращение к базе?
sSQL = "SELECT * FROM [Мне должны] " 'запрос
Set rs = db.OpenRecordset(sSQL) ' пытаюсь открыть рекрдсет
For J = 1 To rs.RecordCount ' этой строкой, я считывал из проги на VB. Сейчас rs.RecordCount =1
' но если ставлю число, то считывает. Значит надо только подставить что-то вместо rs.RecordCount . Если ставлю число, то
Debug.Print rs.Fields(0)' в дебаггер печатает нужный мне список
Form_Выдача.Список8.AddItem rs.Fields(0)' а в список не хочет. ПОЧЕМУ?
rs.MoveNext
Next J | |
| |
| |
| |
|
|
| | с одним разобрался
Do While Not rs.EOF
Form_Выдача.Список8.AddItem rs.Fields(0)
Debug.Print rs.Fields(0)
rs.MoveNext
Loop
А в список то что не добавляет? | |
| |
| |
| |
|
|
| | rs.RecordCount - количесво записей
rs.RecordCount =1 - так нельзя (только чтение)
========================
может
Form_Выдача.Список8.AddItem nz(rs.Fields(0))
и какими словами матерится??? | |
| |
| |
| |
|
|
| | что стоит источником строк списка? | |
| |
| |
| |
|
|
| | rs.RecordCount =1 - так нельзя (только чтение)
Я так и не делаю Просто кокде мышку наведёшь видно =1
А никак не ругается. но всписке пусто | |
| |
| |
| |
|
|
| |
что стоит источником строк списка?
|
такого же не было в VB
Теперь уже стоит то, что нужно. Стал выводить
Непривычно. То маску заполнять, то источник. Я думал как в VB или VBA Ёксел. Там проще
Спасибо за помощь. Буду разбираться дальше | |
| |
| |
| |
|
|
| | Када познаёшь - непривычно
Када освоишься - обычно  | |
| |
| |
| |
|
|
| | не знаю как щяс, но раньше было так - чтобы проверит реальное RecordCount надо в рекордсете сделать rs.movelast:rs.movefirst и уже потом определить rs.RecordCount | |
| |
| |
|
|
| |
|
|
| |
в VB у меня так и было. Правда не понял зачем. Но через EOF тоже нормально
Сейчас борюсь с очисткой списка. Clear не нахожу. А как же чистить список.? | |
| |
| |
| |
|
|
| | как проверить на заполненность ячейку? Если пустая - показывает Null. в дебаггер пишет Null.
но ни на что не реагирует
пробовал варианты: Null, '"Null", Empty | |
| |
| |
| |
|
|
| | может Список.RowSource = "" | |
| |
| |
| |
|
|
| | if IsNull(ячейка) = true then msgbox "Пустая !"
if nz(ячейка) = "" then msgbox "Пустая !"
if nz(rs.Fields(3)) = "" then msgbox "Пустая !" | |
| |
| |
| |
|
|
| |
if nz(rs.Fields(3)) = "" then msgbox "Пустая !"
|
|
Спасибо! Самое то
nz - что за зверь? Пока не сталкивался
может Список.RowSource = ""
|
Блин и точно.
Ещё раз спасибо.
У меня списо заполняется программно, так я и думал, что должно быть Clear | |
| |
| |
| |
|
|
| | NZ () - это типа Nет Zначения
Если в VB то типа
Public Function NZVB(TEST_Val As Variant) As Variant
' функция проверки строковых значений
On Error GoTo nz_err
If Not IsNull(TEST_Val) Then
If IsMissing(TEST_Val) = True Then
NZVB = ""
Else
NZVB = TEST_Val
End If
Else
NZVB = ""
End If
On Error GoTo 0
Exit Function
nz_err:
NZVB = ""
End Function
|
| |
| |
| |
| |
|
|
| | Ну практически на все вопросы задания ответил. А для себя возник вопрос:
На форме у меня 2 комбика.
В дном список друзей. При воборе чела заполняется история долгов и если количество невернутых больше 3 то второй комбик и кнопка "Выдать" остаются невидимыми. А вопрос такой: Второй комбик связан с таблицей "Моя библиотека"
И показавает всю библиотеку. Но часть книг находится на руках. И есть таблица "Мне должны".
Как сделать, что бы в комбике не отображались отсутсвующие книги | |
| |
| |
| |
|
|
| | Как сделать, что бы в комбике не отображались отсутсвующие книги
=========================================================
Оч просто:
В таблице ("Моя библиотека") добавьте поле логическое.
как только отдали почитать галочку ставим
а в комбик запросом выбираем тока те у которых галочки нема.....
Када вернут - галочку уберём............. 
==========================================================
И ваще Вам не комбик2 нужен а ленточная форма не связанная с основной и поле поиска нужнойкниги....
ды ваще то совершенству нет передела (я не опечатался!!!!)  | |
| |
| |
| |
|
|
| |
В таблице ("Моя библиотека") добавьте поле логическое.
как только отдали почитать галочку ставим
|
Так а если базу нельзя менять?
И ваще Вам не комбик2 нужен а ленточная форма не связанная с основной и поле поиска нужнойкниги....
|
Ну это ваще пока тёмный лес: форма выдачи с кучей контролов да еще типа подчинённая ленточная форма.(которую надо всё равно как-то связывать с чем-то)
Мне проще открыть два рекордсета(такое вроде бы возможно) и двумя циклами перелопатить две таблицы. И выбрать соответствующие записи. Так, по крайней мере мне понятней пока. Разберусь больше может быть и буду делать по другому
Ну ладно. Допустим поле я добавлю. Галочку смогу поставить. Как проверить наличие галочки при связывании комбика с таблицей? я пока не знаю | |
| |
| |
| |
|
|
| | Када добавите поле типа логическое
Поставьте там пару галочек
Создайте(потренеруйтеся) в закладке запросы - запрос к таблице моя библиотека
с условием отбора для поля-галочки Истина (True) и всё поймёте без лишних слов | |
| |
| |
| |
|
|
| | Потом у Вашего комбика источник строк этот запрос выбирайте в свойствах комбика.
А условие отбора поменяете на ложь (False)
=============================================
Вот оно счастье - совсем близко, только потяни.......... 
ой ........ о чём это Я.....  | |
| |
| |