Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: 2003
 
 автор: alex77755   (18.04.2010 в 12:18)   личное сообщение
 
 

Так получилось, что пришлось помогать дочке с решением заданий. А я в Аксесе слабоват.
Что бы помочь нужно разобраться самому. Вопрос стоит так Разработать модуль с такими-то условиями по существующим таблицам (типа если у кого-то долгов > 3 не вернуто, то больше не давать).
Вот в чем вопрос. как работает модуль в аксес. Он же должен быть к чему-то привязан. Ну там к форме, или как/ Как вызывается? В задании стоит вопрос о проверке. Так я думаю, что фамилию(есть таблца отдельно с фамилиями) не стоит вводить вречную, а выбрать из списка. Значит форма(со списком) желательна. Посоветуйте где хорошо расписано о модулях в аксесе
С VB6 и VBA в Ёкселе знаком неплохо. А с Ексесс очень поверхностно.

  Ответить  
 
 автор: час   (18.04.2010 в 17:30)   личное сообщение
 
 


Посоветуйте где хорошо расписано о модулях в аксесе

Очень хорошо расписано на этом форуме....
И очень много....
Вы лучше делая - задавайте вопросы - на которые у Вас в знаниях отсутствуют ответы....
==============================================================
Так я думаю, что фамилию(есть таблца отдельно с фамилиями) не стоит вводить вречную, а выбрать из списка

Для начала создайте ПолеСоСписком на основе таблицы фамилии (источник строк в свойствах поля)

  Ответить  
 
 автор: osmor   (19.04.2010 в 08:42)   личное сообщение
 
 

Задача по отбору данных соответствующих некому условию (как у Вас "у кого-то долгов > 3 не вернуто'), решаются с помощью запросов.
ПОсмотрите базы "Борей" и "Решения" (ониидут в комплекте с access)

  Ответить  
 
 автор: alex77755   (19.04.2010 в 09:19)   личное сообщение
 
 

Я создал форму. На ней комбобокс. Связал его с таблицей.
Тепери при выборе в камбо чела надо из другой таблици выбрать его долги
Я делал то же самое из 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

  Ответить  
 
 автор: osmor   (19.04.2010 в 10:04)   личное сообщение
 
 


rs.MoveLast
rs.MoveFirst
do while not rs.EOF
здесь мой код. построчно выбирал, считал
rs.MoveNext
loop

Лучше сразу отбирать нужные (соответствующие условию) записи, а не лопатить все записи из таблицы
sSQL = "SELECT * FROM [Знакомые] where Здесь условие ;"

посчитать кол-во записей соответвующих условию можно функцией Dcount или запросом с группировкой

  Ответить  
 
 автор: час   (19.04.2010 в 12:37)   личное сообщение
 
 

Теперь можно в конструкторе запросов - создать запрос к таблице долгов, где условие отбора по полю фамилия - указать комбобокс с формы(его значение)
================================================
И ещё одно условие отбора записей из таблицы долгов - по полю( долг) , если таковое имеется если такового нет, можно по дате окончания задолженности(дата возврата долга)
но тут надо с группировкой, потому - время выложить Вашу базу для обозрения...

  Ответить  
 
 автор: alex77755   (19.04.2010 в 13:53)   личное сообщение
 
 

Я не стал делать в запросе по тому, что в задании вопрос о модуле. Вот я и решил в модуль вынести процедуру поиска-отбора-сравнения-суммирования.
В процедуру модуля передаю с формы фамилию из комбика. С этим всё нормально. И уже из модуля надо считать все записи из таблицы. Перелопатить. Ничего другого не придумал, чем заполнить модуль. Вот пока загвоздка с открытием таблицы

  Ответить  
 
 автор: osmor   (19.04.2010 в 14:00)   личное сообщение
 
 

Вот пока загвоздка с открытием таблицы


мой код не помог?

  Ответить  
 
 автор: час   (19.04.2010 в 16:00)   личное сообщение
 
 


Я не стал делать в запросе по тому, что


Этот самый запрос SQL - потом переносится ручками в модуль - в вмиде строки запроса - как выше написал Osmor
sSQL = "SELECT * FROM [Знакомые] where Здесь у

  Ответить  
 
 автор: час   (19.04.2010 в 16:04)   личное сообщение
 
 

В модуле объявляются переменные - чёта типа

Public rst As Recordset, tdf As TableDef, dbs As Database,
 qdf As QueryDef, strSQL As String, tabk As String, tabd As String
    

  Ответить  
 
 автор: час   (19.04.2010 в 16:07)   личное сообщение
 
 

В модуле создаётся функция или процедура чёта типа
и в неё вписываем 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

  Ответить  
 
 автор: alex77755   (20.04.2010 в 11:34)   личное сообщение
 
 

что то с условием не разберусь. С синтаксисом. Всё время ругается

А как узнать количество строк?
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

  Ответить  
 
 автор: alex77755   (20.04.2010 в 11:43)   личное сообщение
 
 

с одним разобрался
Do While Not rs.EOF
Form_Выдача.Список8.AddItem rs.Fields(0)
Debug.Print rs.Fields(0)
rs.MoveNext
Loop

А в список то что не добавляет?

  Ответить  
 
 автор: час   (20.04.2010 в 11:51)   личное сообщение
 
 

rs.RecordCount - количесво записей
rs.RecordCount =1 - так нельзя (только чтение)
========================
может
Form_Выдача.Список8.AddItem nz(rs.Fields(0))
и какими словами матерится???

  Ответить  
 
 автор: osmor   (20.04.2010 в 11:55)   личное сообщение
 
 

что стоит источником строк списка?

  Ответить  
 
 автор: alex77755   (20.04.2010 в 12:55)   личное сообщение
 
 

rs.RecordCount =1 - так нельзя (только чтение)
Я так и не делаю Просто кокде мышку наведёшь видно =1

А никак не ругается. но всписке пусто

  Ответить  
 
 автор: alex77755   (20.04.2010 в 13:20)   личное сообщение
 
 


что стоит источником строк списка?


такого же не было в VB
Теперь уже стоит то, что нужно. Стал выводить
Непривычно. То маску заполнять, то источник. Я думал как в VB или VBA Ёксел. Там проще
Спасибо за помощь. Буду разбираться дальше

  Ответить  
 
 автор: час   (20.04.2010 в 13:56)   личное сообщение
 
 

Када познаёшь - непривычно
Када освоишься - обычно

  Ответить  
 
 автор: Силblч   (20.04.2010 в 14:37)   личное сообщение
 
 

не знаю как щяс, но раньше было так - чтобы проверит реальное RecordCount надо в рекордсете сделать rs.movelast:rs.movefirst и уже потом определить rs.RecordCount

  Ответить  
 
 автор: час   (20.04.2010 в 14:38)   личное сообщение
 
 

  Ответить  
 
 автор: alex77755   (20.04.2010 в 14:42)   личное сообщение
 
 


rs.movelast:rs.movefirst


в VB у меня так и было. Правда не понял зачем. Но через EOF тоже нормально
Сейчас борюсь с очисткой списка. Clear не нахожу. А как же чистить список.?

  Ответить  
 
 автор: alex77755   (20.04.2010 в 15:00)   личное сообщение
 
 

как проверить на заполненность ячейку? Если пустая - показывает Null. в дебаггер пишет Null.
но ни на что не реагирует

If (rs.Fields(3)) = 0

пробовал варианты: Null, '"Null", Empty

  Ответить  
 
 автор: час   (20.04.2010 в 15:04)   личное сообщение
 
 

может Список.RowSource = ""

  Ответить  
 
 автор: час   (20.04.2010 в 15:06)   личное сообщение
 
 

if IsNull(ячейка) = true then msgbox "Пустая !"
if nz(ячейка) = "" then msgbox "Пустая !"
if nz(rs.Fields(3)) = "" then msgbox "Пустая !"

  Ответить  
 
 автор: alex77755   (20.04.2010 в 15:17)   личное сообщение
 
 



if nz(rs.Fields(3)) = "" then msgbox "Пустая !"


Спасибо! Самое то
nz - что за зверь? Пока не сталкивался

может Список.RowSource = ""

Блин и точно.
Ещё раз спасибо.
У меня списо заполняется программно, так я и думал, что должно быть Clear

  Ответить  
 
 автор: час   (20.04.2010 в 20:22)   личное сообщение
 
 

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

  Ответить  
 
 автор: alex77755   (20.04.2010 в 20:22)   личное сообщение
 
 

Ну практически на все вопросы задания ответил. А для себя возник вопрос:
На форме у меня 2 комбика.
В дном список друзей. При воборе чела заполняется история долгов и если количество невернутых больше 3 то второй комбик и кнопка "Выдать" остаются невидимыми. А вопрос такой: Второй комбик связан с таблицей "Моя библиотека"
И показавает всю библиотеку. Но часть книг находится на руках. И есть таблица "Мне должны".
Как сделать, что бы в комбике не отображались отсутсвующие книги

  Ответить  
 
 автор: час   (20.04.2010 в 20:25)   личное сообщение
 
 

Как сделать, что бы в комбике не отображались отсутсвующие книги
=========================================================
Оч просто:
В таблице ("Моя библиотека") добавьте поле логическое.
как только отдали почитать галочку ставим
а в комбик запросом выбираем тока те у которых галочки нема.....
Када вернут - галочку уберём.............
==========================================================
И ваще Вам не комбик2 нужен а ленточная форма не связанная с основной и поле поиска нужнойкниги....
ды ваще то совершенству нет передела (я не опечатался!!!!)

  Ответить  
 
 автор: alex77755   (20.04.2010 в 21:10)   личное сообщение
 
 


В таблице ("Моя библиотека") добавьте поле логическое.
как только отдали почитать галочку ставим


Так а если базу нельзя менять?


И ваще Вам не комбик2 нужен а ленточная форма не связанная с основной и поле поиска нужнойкниги....


Ну это ваще пока тёмный лес: форма выдачи с кучей контролов да еще типа подчинённая ленточная форма.(которую надо всё равно как-то связывать с чем-то)
Мне проще открыть два рекордсета(такое вроде бы возможно) и двумя циклами перелопатить две таблицы. И выбрать соответствующие записи. Так, по крайней мере мне понятней пока. Разберусь больше может быть и буду делать по другому
Ну ладно. Допустим поле я добавлю. Галочку смогу поставить. Как проверить наличие галочки при связывании комбика с таблицей? я пока не знаю

  Ответить  
 
 автор: час   (20.04.2010 в 21:14)   личное сообщение
 
 

Када добавите поле типа логическое
Поставьте там пару галочек
Создайте(потренеруйтеся) в закладке запросы - запрос к таблице моя библиотека
с условием отбора для поля-галочки Истина (True) и всё поймёте без лишних слов

  Ответить  
 
 автор: час   (20.04.2010 в 21:17)   личное сообщение
 
 

Потом у Вашего комбика источник строк этот запрос выбирайте в свойствах комбика.
А условие отбора поменяете на ложь (False)
=============================================
Вот оно счастье - совсем близко, только потяни..........
ой ........ о чём это Я.....

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList