Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Access 2000! Изменение записей в подчиненной таблице

4.1K
31 августа 2003 года
natalia
18 / / 24.08.2003
У меня такая ситуация:
В поле главной формы указывается число N. Оно всегда меньше MaxZapis и больше 1.

Необходимо изменить (MaxZapis-N) записей в подчиненной таблице, начиная с записи под номером N+1. В подчин. таблице есть специальное порядковое поле. Думаю проблема решится, если сделать текущей запись под номером N+1, и вести расчет от нее, но я не знаю как.

Спасибо.
258
01 сентября 2003 года
SergeySV
1.5K / / 19.03.2003
Цитата:
Originally posted by natalia
У меня такая ситуация:
В поле главной формы указывается число N. Оно всегда меньше MaxZapis и больше 1.

Необходимо изменить (MaxZapis-N) записей в подчиненной таблице, начиная с записи под номером N+1. В подчин. таблице есть специальное порядковое поле. Думаю проблема решится, если сделать текущей запись под номером N+1, и вести расчет от нее, но я не знаю как.

Спасибо.



Проблема с редактирование проще всего решить опять же через DAO, по сути также как ты добавляла новые записи, с тем исключением, что в методе OpenRecodset указывается условие отбора записей. Тогда полученный объект Recodset содержит только те записи, которые необходимо изменить, делается это например так:

Код:
Dim dbs As DAO.Database, rst As DAO.Recordset    
 Dim strSQL As String
 
  Set dbs = CurrentDb  
  strSQL = "SELECT * FROM ИмяТаблицы WHERE Код=" & Forms![Гл_форма].Поле.Value
  Set rst = dbs.OpenRecordset(strSQL, dbOpenDynaset)

  Do Until rst.EOF
    rst.Edit
    rst.Fields("Поле1")="ля-ля"
    ...
    rst.Update
    rst.MoveNext
  Loop
 
  rst.Close
  Set rst = Nothing
  Set dbs = Nothing


Условие отбора в Recodset записей задается через строку strSQL в формате языка SQL (структурный язык запросов). Для тебя в начале главное уяснить, что после ключевого слова FROM должно идти название твое таблицы, а после слова WHERE задается условие отбора в виде "НазваниеПоле1=Значение1 AND НазваниеПоле2=Значение2 AND ..." или так "НазваниеПоле1=Значение1 OR НазваниеПоле2=Значение2 OR ..."

Теперь необходимо с тобой определиться каким образом отобрать записи, по какому полю.
В связи с этим не совсем понятно как у тебя организована связь между таблицами и по каким полям и какие значение они принимаются... объясни поподробнее... Вот у тебя в подчин. таблицы показываются какое-то число записей - A. A всегда равно N из главной форме или количество может в какой-нибудь момент может отличаться. В подч. таблице дожно быть: ключ. поле, поле для связи и у тебя еще какое-то порядковое поле есть?
4.1K
01 сентября 2003 года
natalia
18 / / 24.08.2003
Цитата:
Originally posted by SergeySV

Проблема с редактирование проще всего решить опять же через DAO, по сути также как ты добавляла новые записи, с тем исключением, что в методе OpenRecodset указывается условие отбора записей.



Итак, по порядку.

В моей БД 3 таблицы:
1 таб. - сведения о клиенте (ключ. поле VIN атомобиля, его то мы и берем в финансовую аренду);
2 таб. - сведение о лизинге (срок, сумма кредита, процент и прочее + ключ. поле VIN);
3 таб. - сведения о платежах (поля такие: VIN, НомерПП, Дата, Платеж, Процент, СуммаНачисл, Долг). В 3-й таблице ключевых полей нет. Не могу представить каким оно должно быть. Там же все поля повторяются..((

Связи получаются такие: 1 и 2 таблицы Один-К-Одному, 2 и 3 - Один-Ко-Многим. Заводим клиента, указываем данные о кредите и рассчитываем платежи таким макаром:

Dim i As Integer
Dim summaVznos As Currency
DoCmd.OpenForm "pod_vznos", , , , , acHidden
For i = 1 To Me.srok
DoCmd.GoToRecord , "pod_vznos", acNewRec
Forms![pod_vznos].avto_vin.Value = Me.avto_vin
Forms![pod_vznos].nompp = i
Forms![pod_vznos].datevznos = DateAdd("m", i, Me.dateoform)
Forms![pod_vznos].vznos = Me.kredit / Me.srok 'погашение займа
Forms![pod_vznos].procent = (Me.kredit - summaVznos) * Me.stavka / 12 / 100 'процент за период
Forms![pod_vznos].summa = Forms![pod_vznos].procent + Forms![pod_vznos].vznos
Forms![pod_vznos].dolg = Me.kredit - summaVznos
summaVznos = summaVznos + Forms![pod_vznos].vznos
Forms![pod_vznos].flag = False
Next
DoCmd.close acForm, "pod_vznos", acSaveYes
Me.Refresh

Записали клиента и вытаскиваем теперь его точно через месяц. Либо он вносит сумму в соответствии с расчитанным ранее графиком платежей (и мы ставим галочку - блокируем от дальнейших изменений запись), либо на каком-то погашении он вдруг платит больше. Получается, что платежи, начиная со следующего необходимо пересчитать. Так вот исходя из моего метода добавления (который описан выше и мне более понятен), я меняю только одну вещь - вместо acNewRec я пишу acEdit - можно ли так? и он вроде как что-то рассчитывает (не совсем верно, но что-то), НО начиная со второй записи. То есть если изменить первый платеж, то он пересчитает правильно. Как сделать текущей именно ту запись, которую изменили, не знаю, поэтому нашла такой путь: бухгалтер указывает в поле главной формы (поле записано в таблицу и значение хранится) номер изменившегося платежа, и расчеты уже идут от этой цифры. Вот.

))))))) Спасибо, что не забросили.

258
01 сентября 2003 года
SergeySV
1.5K / / 19.03.2003
Цитата:
Originally posted by natalia

В 3-й таблице ключевых полей нет. Не могу представить каким оно должно быть. Там же все поля повторяются..((



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

Посмотри и напиши (через Сервис/Схема данных) по каким полям происходит связь между таблицами 2 и 3.

Далее по сути всего процесса.
Если я тебя правильно понял, то в подчин. форме таблица 3 показывает только те записи, которые относятся к лизингу (таблица 2, уник. ключ - поле VIN, соотв. в из таблицы 3 отбираются только те записи, которые имеют такой же VIN). Причем количество этих платежей стоко, скоко запланировано по графику (твое N я так понимаю). И вроде бы у тебя есть поле в котором они после создания сразу нумеруются от 1 до выбранного N. (как оно называется?, НомерПП?)

Так я вроде все понял, но чтобы не было путаницы, подождем твоих уточнений по полям и накатаем потом условие отбора записей для их редактирования.

4.1K
01 сентября 2003 года
natalia
18 / / 24.08.2003
Уточняю. Для наглядного примера возьму просто строку из БД:

Таб 1:
фам | имя | модель, марка | VIN
Иванов| Петр| Mitsubisi Carisma| 7u889490391267123 и т.д.

Таб 2:
VIN |ДатаОформ| Стоим.|Срок|Кредит
7u889490391267123| 21.08.03| 420000|24 |170700 и т.д.

Таб 3
VIN |НомПП|Дата |Взнос|Процент
7u889490391267123|1 |21.09.03|10225|5112
7u889490391267123|2 |21.10.03|10225|4899
7u889490391267123|3 |21.11.03|10225|4686
..............
7u889490391267123|24 |21......|10225|213

Естественно все три таблицы связаны по VIN(у), это уникальная вещь, присутствующая у каждой машины. Первая и вторая связаны 1-к-одному, т.к. при удалении клиента из БД, сведения о его кредите также не нужны. Вторая и третья таблицы связаны один-ко-многим, т.к. записей с одинаковым VINом ровно столько, каков срок кредита. По-моему я все сделала правильно. ))
258
01 сентября 2003 года
SergeySV
1.5K / / 19.03.2003
В таблице 3 поле VIN не может быть уникальным так как оно может(и будет) повторяться - это типичное поле для связи по отнощению один-ко-многим, но какое же у тебя тогда уникальное(ключевое) поле в таблице3?
258
01 сентября 2003 года
SergeySV
1.5K / / 19.03.2003
И такой еще уточняющий вопросик. Для поля "НомПП" нумерация для другого VIN пойдет опять с 1?

P.S. для примера лучше показывать как минимум 2 записи, чтобы можно было сравнить и проанализировать.
4.1K
01 сентября 2003 года
natalia
18 / / 24.08.2003
Цитата:
Originally posted by SergeySV
И такой еще уточняющий вопросик. Для поля "НомПП" нумерация для другого VIN пойдет опять с 1?

P.S. для примера лучше показывать как минимум 2 записи, чтобы можно было сравнить и проанализировать.



Конечно же нумерация пойдет с 1-цы для другого VINа и т.д.

Показываю еще раз:
VIN|НомерВзноса|ДатаВзноса|ПогашениеЗайма|ПроцентЗаПериод
7u889490391267123| 1| 21.03.03| 12500| 5600
7u889490391267123| 2| 21.04.04| 12500| 4630
...............
7u889490391267123|24| 21.03.05| 12500| 450
890ilk89nk2300283| 1| 13.08.03| 11200| 3600
890ilk89nk2300283| 2| 13.09.03| 11200| 3120
...............
890ilk89nk2300283|12| 13.08.04| 11200| 320

Насчет необходимости в таблице ключевого поля могу поспорить, что это вовсе неважно в моем случае. Ключи бывают первичные и регулярные. Первичный устанавливается для поля, если в нем не будут повторяться записи. Регулярным можно назвать тот, по которому связана таблица отношением один-ко-многим. Это не суть и не проблема даже. Для меня проблема в другом, как изменить записи в подчиненной таблице, НАЧИНАЯ с той, номер которой указали в главной форме.

Вот...Не спорь про уникальность полей, всё у меня продумано. Иначе бы не занималась серьезным делом..)))))

258
01 сентября 2003 года
SergeySV
1.5K / / 19.03.2003
[QUOTE]Originally posted by natalia

Ух какая ты... ;-)
Мы с тобой немного о разном говорим. Ключи действительно могут быть первичные и регулярные. Клучей вообще может быть много и у каждого поля. Они служат для индексирования данных, быстрый поиск и все такое...

Из справки:
Мощь реляционных баз данных, таких как Microsoft Access, опирается на их способность быстро найти и связать данные из разных таблиц при помощи запросов, форм и отчетов. Для этого каждая таблица должна содержать одно или несколько полей, однозначно определяющих каждую запись в таблице. Такие поля называют первичным ключом таблицы.

Ну ладно, работает у тебя и ладно...

Давай лучше на счет наших баран.. фу ты, платежек.
Хначит тебе надо изменить только те записи из Таблицы3, которые имеют такой же VIN как и в выбранной записи Таблицы2, а номера "НомПП" должны быть больше какого-нибудь выбранного числа.

Тогда код будет практический такой же, только добавим следующее условие:
Код:
Dim dbs As DAO.Database, rst As DAO.Recordset    
 Dim strSQL As String
 
  Set dbs = CurrentDb  
  strSQL = "SELECT * FROM Таблица3 WHERE VIN='" & Forms![Гл_форма_Таблица2].ПолеVIN.Value & "' AND " & "НомПП>" & X
  Set rst = dbs.OpenRecordset(strSQL, dbOpenDynaset)

  Do Until rst.EOF
    rst.Edit
    rst.Fields("Поле1")="ля-ля"
    ...
    rst.Update
    rst.MoveNext
  Loop
 
  rst.Close
  Set rst = Nothing
  Set dbs = Nothing

X - это число начиная с которого надо изменять записи Таблицы3

P.S. Forms![Гл_форма_Таблица2].ПолеVIN.Value - тут должен быть путь к твоему элементу, содержащим поле VIN ассоциированный с таблицей2.
5.2K
01 сентября 2003 года
Alexei K
5 / / 01.09.2003
Приветствую Наталья!
АЛексей

все данные в ваших финансовых операциях, завязаны на клиенте
тогда за основную таблицу следует взять таблицу "Сведения о Клиенет" или просто tblClient
в которой помимо полей которые описывают его адрес и так далее, есть поле VIN (PrimaryKey).
остальные таблицы будут примыкать к этой, у них в качестве primary key будет поле VIN из

tblClient.то есть в их PK будут храниться значения из PK tblClient.

да и вообще вроде таблица "Сведения о лизинге" не должна быть здесь, все поля из нее следует

включить в tblClient.ИЛи клиенты у вас оформляют по несколько лизингов?
Если так, то не спорю что она там где и должна быть.

--------------
Наташа, у вас проблема из-за того что вы не спроектировали всю базу грубо говоря на мягкой

офисной бумаге(если она у вас есть)но это как видите ваша проблема:)
--------------
возьму второй вариант с двумя таблицами, так как мне кажется он более подходит.из вашей описи

проблемы вроде ясно что единовременно он может иметь только одну запись о лизинге.
опись основной формы:
таблица источник для формы будет tblClient
и будет одна подчиненная форма в виде "таблица" чтобы было удобнее смотреть, у нее в качестве

источника данных будет tblPayments.
связаны по полю PKVIN ( tblClient) -> FKVIN (tblPayments) FK=Foreign Key FKVIn будет ключевым

полем у tblPayments.

VIN |ДатаОформ| Стоим.|Срок|Кредит|фам | имя | модель |Остаток
7u889490391267123| 21.08.03| 420000|24 |170700|Иванов| Петр| Mits Carisma|50000 -->frmClient

это так сказать в шапке формы( берется из таблицы tblClient)

IN |НомПП|Дата |Взнос|Процент
7u889490391267123|1 |21.09.03|10225|5112
7u889490391267123|2 |21.10.03|10225|4899 -->sfrmPayments_Client
7u889490391267123|3 |21.11.03|10225|4686

это у нас появляется в подчиненной форме.

когда создается новая запись в sfrm (sub form) то access автоматически вставит VIN в соотвествии

с тем который вверху.
далее НОМПП делаем с типом Счетчик, чтобы не мучаться, и оно тоже будет автоматически заполняться
Для поля даты,открываем форму frmPayments и у поля Дата, открываем вкладку События и пишем

событие DblClick

Private Sub Дата_DblClick()
me.дата=date()
me.взнос.setfocus
End Sub
теперь и оно автоматически заполняется, не в этом ли счастье когда у тебя есть комп;)
дальше:

в tblPayments столько записей сколько он сделал платежей и никак иначе.
-------
такой вопрос, проценты не большие ли??????????????????????????????????:)
да и carisma вроде 8000 стоит а не в два раза больше?
-------

Private Sub Взнос_DblClick(Cancel As Integer)
dim payment as string
payment= InputBox(Enter Amount of Payment (rubles), Payment,

(Forms!frmClient.kredit-Forms!frmClient.отстаток) / Forms!frmClient.srok)

не помню как сделать из string -> integer or maybe:) long вспомни сама. и после этого можно тогда

сделать следующую операцию

me.vznos = payment
Forms!frmClient.остаток=Forms!frmClient.kredit-payment
End Sub

вот видишь все просто, если не учесть проценты, но я не силен уже в математике как в 3 классе.так

что оставляю это тебе.и еще одно введение поле Остаток.за ним надо следить или будет не

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

сумма взноса(у меня она без учета процентов).
после нажатия ОК этим числом заполниться поле ВЗНОС.
Дальше если он делает второй платеж, то опять появиться Окошко со значением следующего платежа
и если например он платит больше то мы вводим столько сколько он закинул в кассу.
и все ВОЛЯ!слудующий взнос, уже будет с учетом предыдущего и так далее.но главное поле остаток

сделать.
и еще сделать проверку на значение поля ОСТАТОК если оно равно нулю то платеж не принимается.
может он захочет деньжат подкинуть.
отмена делается вот так me.undo.
that`s all ,good bye Natalia
Alexei Kozlov
извини у меня нет время форматировать то что я написал.смотри внимательнее так поля таблицы сбились Поле ОСТАТОК!
4.1K
02 сентября 2003 года
natalia
18 / / 24.08.2003
Цитата:
Originally posted by Alexei K
Приветствую тебя, Алексей!

все данные в ваших финансовых операциях, завязаны на клиенте
тогда за основную таблицу следует взять таблицу "Сведения о Клиенет" или просто tblClient
в которой помимо полей которые описывают его адрес и так далее, есть поле VIN (PrimaryKey).
остальные таблицы будут примыкать к этой, у них в качестве primary key будет поле VIN из

tblClient.то есть в их PK будут храниться значения из PK tblClient.

да и вообще вроде таблица "Сведения о лизинге" не должна быть здесь, все поля из нее следует

включить в tblClient.ИЛи клиенты у вас оформляют по несколько лизингов?
Если так, то не спорю что она там где и должна быть.



Видите ли, я сначала тоже так подумала, кинуть все поля в одну таблицу (сведения о лизинге в таблицу клиентов), но уж очень много там полей получается, поэтому раскидала. Может неверный ход, но я новичок в этом деле..)))

Цитата:

--------------
Наташа, у вас проблема из-за того что вы не спроектировали всю базу грубо говоря на мягкой

офисной бумаге(если она у вас есть)но это как видите ваша проблема:)
--------------



))))))))))
У меня уже почти все работает. И работает следующим образом. Вносится клиент, заносятся все данные о нем и кредите, далее на нажатие кнопки <Рассчитать платежи> происходит добавление N (,где N - срок кредита) записей в подчиненную таблицу со всему будущими платежами, процентами и долгами. Когда вносят платежи, открывают другую форму через поиск (который также уже организован) и ставят галки наротив соответствующего платежа. Итак, всё это фунциклирует. Но, в моей БД не предусмотрен случай, когда клиент принес очередной платеж несколько больше необходимой суммы. Не потому он не предусмотрен, потому как не продумана БД на офисной бумаге, а потому как не хватает у меня на сей счет элементарных знаний..))) Так вот, существует у меня острая необходимость пересчитать оставшиеся платежи. Они должны быть меньше, впрочем как и проценты. Сумма нового платежа = (Сумма_кредита - Сумма_всех_выплаченных_платежей) / Оставшиеся_месяцы_кредита. Да формулы для математика не проблемы. Проблема для меня программирование, на которое должным образом у универе не уделялось внимание.

Алексей, так ты можешь помочь разобраться? Как же мне пересчитать (изменить) существующие записи начиная с той, которую изменили?

------
PS А про машину, вот за что купила, за то и продаю.. такие у нас видать цены...)))))

5.2K
03 сентября 2003 года
Alexei K
5 / / 01.09.2003
Приветствую Наталья!
Я вижу что ваша ошибка в проектировании все еще мучает Вас:)
Наталья, вот слова " У меня уже почти все работает" видать могут остаться навсегда с вашией базой данных.Но это предположение.Гипотеза.

Так тут все просто.Надо чтобы было одно поле в базе данных, в котором учитываются уже прошедшии платежи.

но вот фигня, сказать прямо, это поле из-за твоего проекта не может быть в той же таблице что и записи о платежах.вот досадно.
то есть программирование сразу усложняется.
количество полей, сколько их должно быть по смыслу столько их и надо делать, то есть выделять в смысловые группы и никак иначе , а то потом будут вот такие "Почти все работает".
то есть наталья, в vba можно все сделать, так он язык программирования.
вот видишь наталья, там все равно, придется доделать(не переделать) таблицу платежей.
наталья, извини, давай на почту.мне трудно через форум общаться ,пойми меня.
Всего тебе! Алексей
------------------
Но цены то черт побери Офигенные У ВАС!
и если можешь вернее ты можешь, когда у тебя будет открыта база данных, в меню СЕРВИС далее АНАЛИЗ и далее АРХИВАРИУС и вот пометь там все объекты базы данных и вышли мне.
а то мне не очень понятна схема расчетов.отчет АРХИВАРИУСА можно перекинуть в Word
и из него во что нить еще более переносимое:)а то он будет тяжелый,хотя у тебя не так много объектов
и еще!!!!!!!!!!!!!!!!!!!!
что это такое!!!!!!!
----------------
Dim i As Integer
Dim summaVznos As Currency
DoCmd.OpenForm "pod_vznos", , , , , acHidden
For i = 1 To Me.srok
DoCmd.GoToRecord , "pod_vznos", acNewRec
Forms![pod_vznos].avto_vin.Value = Me.avto_vin
Forms![pod_vznos].nompp = i
Forms![pod_vznos].datevznos = DateAdd("m", i, Me.dateoform)
Forms![pod_vznos].vznos = Me.kredit / Me.srok 'погашение займа
Forms![pod_vznos].procent = (Me.kredit - summaVznos) * Me.stavka / 12 / 100 'процент за период
Forms![pod_vznos].summa = Forms![pod_vznos].procent + Forms![pod_vznos].vznos
Forms![pod_vznos].dolg = Me.kredit - summaVznos
summaVznos = summaVznos + Forms![pod_vznos].vznos
Forms![pod_vznos].flag = False
Next
DoCmd.close acForm, "pod_vznos", acSaveYes
Me.Refresh
-------------
а точнее ты глянь, summaVznos используется перед тем как инициализируется!
вот поэтому у тебя полезут ошибки!
Currency!Вот это надо бы убрать.это тебе не 1С:Бухгалтерия.
это просто я забыл тебе тогда написать!следить за такой фигней надо:)
и весь отчет сожми .чтобы мне не трудно было взять с почты.хотя это не критично, главное чтобы отчет был полный.
все.
Всегда приятно говорить с новичками, много новых идей от них можно взять;)
И особенно с девушками!
4.1K
04 сентября 2003 года
natalia
18 / / 24.08.2003
Это не фигня, это денежный формат. Вычитала в литературе. У меня сложилось впечатление, что ты не можешь ответить на мой несложный (ведь я новичок - сложностей не подкину) вопрос. Я пришла на ентот форум получить конкретный ответ на конкретный вопрос и по конкретной теме, а не читать Ваши скучные нравоучения. Не буду оправдыватьси перед Вами и говорить о своих других умениях, хотя замечу, из практики, раз вы так хорохоритесь - знаете меньше меня и в целом маловоспитаны. И вообще, математику надо подтянуть, а то не слишком ли отстал от среднего уровня? Пытаюсь объяснить, что всех знаний в одной черепушке не уместишь, и если Вы такой асс в Access(е), то честь Вам и хвала небесная, да в общем-то и только. Базу высылать Вам естессно не буду, застеснялась че-та.
--------------------

Примечание.
программер без знания математики - балерун в кроссовках
5.2K
04 сентября 2003 года
Alexei K
5 / / 01.09.2003
Наталья Да Вы что!С вами тут никто не ссориться.
но для программирования нужны данные!
вот ты сидишь и в курсе того как у тебя база работает, и спрашиваешь как тебе там что-то доделать ,но при этом ты забыла что я то! не знаю как у тебя все работает!
у тебя небыло конкретики!
ты можешь любому дать свой первый вопрос, в этой ветке, и ответ ты не найдешь.
такие вопросы неуместны.
ты думаешь что -то что тебе надо так долго делать чтоли???
да это фигня.чистой воды.и делать это тебе или нам приходится из-за твоей ошибки в проектировании.
ну не в обиду тебе.
раз ты говоришь что ты новичок.
тут вроде еще никто не хорохориться!
ты не можешь четко в форуме написать структуру базы данных и код который ты там написала!
практика у тебя тоже фиговая.так нельзя определить знает человек что-то или нет.
база данных это тебе не какая то программа в одном файле, хотя ты видать это так и представила, у нее очень много компонент!ты вот это учла!а то практика!
а про математику! это получилось из-за того что вы новичок! не знаете что код надо комментировать, код требует комментариев, потому-что после некоторого времени в нем ничего не понятно, кроме унарных операций:)
асс должен быть не в Access , а мыслить надо умеючи, то есть проект делать очень просчитано!
про "все" тоже не надо, надо умещать только что надо.а то что надо обычно у всех получается уместить.
в access тебе сложно подсказать, потому-что я еще не знаю,модель всех событиий в твоей форме.там же есть события!у формы,не только одно свойство "имя".
мне чести не надо.кто знает тот знает.
по C++/C тебе можно сразу дать конкректный ответ, и то если это не программирование под windows а здесь сложнее!(access)
И давай сделаем Наталья так, мне базу высылать не надо, мне надо хотя бы отчет,
ты одного не понимаешь, человеческой психики, (или не знаю как это сказать) ,этот отчет универсальной средство для понимания процессов в базе данных!
а твои объяснения -это не универсальный способ передать описание этих процессов!
согласна?!
я думаю да.если нет.тогда лучше через некоторое время тебе согласится!
я же тебе сказал что мне нравиться с новичками общаться.никто здесь не хорохорился.
если бы у меня уже сегодня был отчет по твоей базе данных, то у тебя завтра дополнения.
да и сама ты как видишь чести себе не делаешь, написав последнее сообщение!
Давай мне базу или отчет, если базу то только без данных.можешь это сделать
так:открой еще одну новую базу данных и в меню Файл-Внешние данные-Импорт
и вот там все объекты выбери и нажми импорт и получишь такую же базу только без данных.
И давай высылай! Я жду.
результат ты получишь тот который тебе надо, если ты базу вышлешь, если отчет то тебе придется чуть чуть изменить некоторые таблицы самой.
вот ты даже не знаешь сколько я уже в access программирую.а говоришь что я в нем каким-то образом по твоему могу знать меньше тебя!
программер без знания математики - балерун в кроссовках--что вот это такое!?
программист должен знать как работает процессор и несколько свойств математики, который любой процессор обеспечивает, но конечно за исключением тех кто пишет типа matlab программы.
я не полно здесь описал понятие программист.
да и фигня я не про currency написал , а про ошибку с summavznos вот так.
и новички всегда подкидывают сложности, от того что не знаю возможностей!
какой нить проги!
я уже не буду разбирать все твои слова по буквам.пора остановиться.

но и ты больше себя так не веди.проблема-то твоя!и если ты ее не опишешь как надо , то у тебя это проблема останется.
и помни про универсальность некоторых средств и про не универсальность других.люди разные на свете.и логика разная.
Я жду базы.
Ты извини, я не знаю сколько тебе лет, может быть и разговариваю с тобой не так как тебе хочется.
И желаю тебе всех тех знаний которые тебе нужны.
Мне даже сейчас было приятно с тобой пообщаться;):)
4.1K
04 сентября 2003 года
natalia
18 / / 24.08.2003
Видите ли Алексей.. Вы не подумайте, что я какого-нить предпенсионного возрасту.. Дело в Вашей излишней самоуверенности и некоторой дажа наглости.. Я вовсе не про аксесовские умения говорила, про другие отрасли и направления. А вот в аксессе я как раз только плавать учусь. Какая там ошибка с суммойвзносов? Видимо, нуно до цикла set summavznos=0 написать? Насчет комментарияв, чего там комментировать, итак все ясно? Во мне вобще-т основы программирования еще с 8-го классу заложены. Да вот только не мое это. Давайте лучше я вопросы позадам, и услышу от Вас внятные вразумительные ответы БЕЗ излишних комментариев? Если Вы готовы конечно. Мне не в лом объяснять будет. БД я не пришлю все равно, во-первых обосрете ни за что в общем-то, а я человек закомплексованнай..) Во-вторых я над ней столько плакала, чтобы просто вот так кому-то, пишущему с орфографическими ошибками, высылать.. не дело это... И потом, Ваш тон.. просто убивает меня. Надо как-то договориться, чуйствую.
258
05 сентября 2003 года
SergeySV
1.5K / / 19.03.2003
Ну не хочешь, не посылай... дело как говорится твое, житейское.
Если пока структуру базы менять не хочешь, посмотри мой топик от 01.09.2003 17:43, там конкретный код под твою форму (небольшие уточнения только могут понадобится)

А опыт дело наживное, я свои первые базы пока делал несколько раз в процессе под корень переделывал. Проектирование базы процесс довольно сложный и ответственный, потому как напроектировать можно все что угодно, а расплачиваться придется потом, когда уже большая половина кода написана и отработана, а ты упираешься в следующую преграду и понимаешь, что уже проще все переделать, чем ваять очередные изощреные пути обхода.
Так что, я сильно удивлюсь, если в самом конце, когда вся база будет написана: формы открываться, запросы выполняться, отчеты и диаграммы автоматически генериться, ты не увидишь и не захочешь переделать ее с учетом накопленного опыта и полученных шишек... :-)
4.1K
05 сентября 2003 года
natalia
18 / / 24.08.2003
Цитата:
Originally posted by SergeySV
Ну не хочешь, не посылай... дело как говорится твое, житейское.



Не поняла, а ты тожж базу просил выслать.. я запуталась короче...))

Цитата:

Если пока структуру базы менять не хочешь, посмотри мой топик от 01.09.2003 17:43, там конкретный код под твою форму (небольшие уточнения только могут понадобится)



уже всё перелапачиваю, завязала на кодеКлиента только 2 таблицы..) В подчиненной все ж таки от ключевого поля отказалась, да и аксесс сказал, что не обязательно это..)

А тот топик, понимаешь мне почему-то кажется, что тот код на изменение только одной записи.. а мне то нуно несколько. Кстати у меня идея появилась, можешь помочь? А что если рассчитывать записи начиная с конца? Ведь к последней строке можно вроде подобраться?

Спасибо.

5.2K
05 сентября 2003 года
Alexei K
5 / / 01.09.2003
SergeySV я рад что ты опять подключился.
Привет Всем коллегам:)
Наталья, у новичков, есть такая особенность, внести что-то свое новое?
Согласна?
Так вот определение ключевого поля в таблице , является обязательным шагом в

проектировании таблицы.так что не надо такой новизны как удаление или не создание ключевых полей
Access никогда не говорит, он просто молчит,ведь в итоге в обвале индексов или

таблицы,или медленном поиске! будет виноват не он, а проектировщик.
Если тебе хочется узнать, все правила, то тебе надо писать в связке Access + SQL Server
вот тогда ты будешь вспотыкаться от своего стиля написания очень учащенно:)
а особенно в ключевых полях.
Ошибка с summavznos именно в этом.
и как я знаю set надо если у тебя объектная переменная.а если это простой тип данных то

можно и summavznos=0.
орфография может и страдает,я же печатаю не как вы, смотря на клаву, но вроде вы

уважаемая после моего последнего сообщения ниразу не написали access правильно.вот это

как понимать?:)слепой метод понимаешь.у меня же даже нет русских букв на клаве.
natural pro не хотелось пачкать.
а вот когда пишешь на языке assembler ты знаешь там тоже все понятно, в течении того

дня когда код пишется, но потом ты как в тумане.
так что без комментариев, больше времени потом будет уходить на любую модификацию кода.
SergeySV вот я не видел, за тобою что ты как то издевался над ее базой и говорил что

типа это глупо и так далее, за собой я тоже не заметил,или это просто мнение новичка о

своей базе данных?
Наталья, вы вроде девушка, судя по имени, но такие слова вставляете.14 предложение.7

слово.
Ты короче знаешь как сделай Наталья,вышли нам с Сергеем, копии отчетов АРХИвариуса или

базы данных, и мы тебе потом пришлем экслюзивный результат от каждого?
Ты согласна?
и даже не пытайся объяснить , я тебе говорю! если ты конечно, не применишь один метод в

своих объяснениях, что бы их сделать универсальными.
Так ты согласна поиграть в такую игру?
А то мы здесь до дела не дойдем.
Я согласен.Сергей Слово за тобой.И решение за вами Наталья.
я думаю игра стоит свеч;)
258
05 сентября 2003 года
SergeySV
1.5K / / 19.03.2003
2АлексейК: Ну мне то что, пришлет - посмотрим, не пришлет - не посмотрим, окончательное решение все равно за Натальей. Я сам не считаю себе спецом в Access (тов. Гетца даже еще не дочитал) поэтому могу только советовать и делиться опытом, если он конечно кому-нибудь нужен :-)

2natalia: предложенный код работает с указн. записии и до конца, за счет Do Until rst.EOF .... rst.MoveNext Loop. Если в коде что не понятно, лучше уточни, потому как так писать придется во многих местах и понимать такие куски надо. Сложного ничего нет, когда разберешься.
На счет: А что если рассчитывать записи начиная с конца? - тут я так понимаю у тебя срабатывает такой же стереотип, который был и у меня в свое время...

Ты видишь в форме свои записи, умешь перемещать по ним DoCmd.GoToRecord и считывать после этого нужные значения из полей формы... - это конечно очень наглядно, но имеет массу недостатков( не считаешь нужные данные пока не станешь на эту запись, а пока встанешь, пользователь еще куда мышкой может ткнуть, долго это, да и совсеми записями в форме приходится работать, а не с отобранными нужными и т.д.).
Главное, что бы ты поняла, что работа с записями возможна и совершенно по другому, а именно: напрямую с таблицами (без всяких форм), а уже потом отражать полученные данные в форме, если это надо...

В этом коде, суть - rst = dbs.OpenRecordset(strSQL, dbOpenDynaset), она загружает в rst набор записей уже отобранный в соотв. с инструкцией strSQL. Они уже отобраны, только те самые платежки, которые к выбр. лизингу относятся и им абсолютно все равно, где ты в форме там стоишь. Удобно. Работаешь с записями, а потом даешь команду обновить в форме все сделанные изменения.
4.1K
05 сентября 2003 года
natalia
18 / / 24.08.2003
Небольшая редакция :)
5.2K
08 сентября 2003 года
Alexei K
5 / / 01.09.2003
Now playing: Madonna - Frozen

summavznos As Double тип надо менять, или будет неточно считать.

и алгоритм расчета, сколько я уже не пытался, он неверен в корне.
начиная с расчета, а пересчет я сделал на основе расчета.вот ниче не
получилось.
надо тебе доделать так чтобы дальнейшая сумма взноса, расчитывалась
взависимости от ОСТАТКА.да и остаток ты странно сделала.он уже уплатил
типа первый ,а у него осталось все таже сумма.
ну дальше код-то идет конечно без ошибок, все расчитывает и пересчитывает откуда не возьми:)
это исправление в форму frmAddKlient_p:
Call Payment_Recalculation(Me.KdKlient, Me.NmVznos, Forms!frmAddKlient!StavkaKredita, Forms!frmAddKlient!SrokKredita, Forms!frmAddKlient!SumKredita)
а это в modAddon :
-----------------------------------
Option Compare Database


Public Function Payment_Calculation(client As Long, data As Date, SumKredita As double ,SrokKredita As Long, StavkaKredita As double)
Dim db As Database, td As TableDef, rst As Recordset, summavznos As Double, temp As Double
Set db = CurrentDb()
Set td = db.TableDefs("tblVznos")
Set rst = td.OpenRecordset(dbOpenTable)
temp = SumKredita
For i = 1 To SrokKredita
rst.AddNew
rst!KdKlient = client
rst!NmVznos = i
rst!DtVznos = DateAdd("m", i, Date)
rst!SumVznosa = SumKredita / SrokKredita
summavznos = rst!SumVznosa + summavznos
rst!SumDolga = temp - rst!SumVznosa
rst!ProcVznos = rst!SumDolga * StavkaKredita / 12 / 100
rst!SumNachisleno = rst!ProcVznos + rst!SumVznosa
temp = rst!SumDolga
rst!Flag = False
rst.Update
Next i
Set rst = Nothing
Set db = Nothing
End Function
-------------------------------------
Public Function Payment_Recalculation(client As Long, NmVznos As Long, StavkaKredita As Double, SrokKredita As Long, SumKredita As Double)
Dim db As Database, qd As QueryDef, rst As Recordset, summavznos As Double, temp As Double, temp1 As Double
Dim temp3 As Double
Set db = CurrentDb()
Set qd = db.QueryDefs("qryVBA")
qd.Parameters(0) = client

If Not (NmVznos = 1) Then
'-1 для того чтобы захватить предыдущую запись, нам там нужно поле остаток.
qd.Parameters(1) = NmVznos - 1
Set rst = qd.OpenRecordset(dbOpenDynaset)
rst.MoveFirst
temp = rst!SumDolga
summavznos = rst!SumVznosa

'передвигаемя на следующую запись, ту в которой было изменено сумма платежа
rst.MoveNext
'редактирование первой записи в платежах, вернее той у которой изменилась сумма платежа
rst.Edit
summavznos = rst!SumVznosa + summavznos
rst!SumDolga = temp - rst!SumVznosa
rst!ProcVznos = rst!SumDolga * StavkaKredita / 12 / 100
rst!SumNachisleno = rst!ProcVznos + rst!SumVznosa

temp = rst!SumDolga
rst.Update
rst.MoveNext
temp3 = temp
Else
qd.Parameters(1) = NmVznos
Set rst = qd.OpenRecordset(dbOpenDynaset)
rst.MoveFirst
summavznos = rst!SumVznosa
rst.Edit
summavznos = rst!SumVznosa + summavznos
rst!SumDolga = SumKredita - rst!SumVznosa
rst!ProcVznos = rst!SumDolga * StavkaKredita / 12 / 100
rst!SumNachisleno = rst!ProcVznos + rst!SumVznosa

temp = rst!SumDolga
rst.Update
rst.MoveNext
temp3 = temp
End If



'далее редактирование остальных с учетом той у которой изменилась сумма платежа

While Not rst.EOF
rst.Edit
rst!SumVznosa = temp3 / (SrokKredita - qd.Parameters(1))
summavznos = summavznos + rst!SumVznosa
rst!SumDolga = temp - rst!SumVznosa
rst!ProcVznos = rst!SumDolga * StavkaKredita / 12 / 100
rst!SumNachisleno = rst!ProcVznos + rst!SumVznosa
'сумма кредита должна уменьшаться
temp = rst!SumDolga
rst.Update
rst.MoveNext
Wend

rst.Close
Set rst = Nothing
Set db = Nothing
End Function
--------------------------
qryVBA:
PARAMETERS [q] Long, Long;
SELECT tblVznos.KdKlient, tblVznos.NmVznos, tblVznos.DtVznos, tblVznos.SumVznosa,
tblVznos.ProcVznos, tblVznos.SumNachisleno, tblVznos.SumDolga, tblVznos.NalBnal,
tblVznos.Buhgalter, tblVznos.Flag
FROM tblVznos
WHERE (((tblVznos.KdKlient)=[q]) AND ((tblVznos.NmVznos)>=));
-----------------------------
вот так ,видать мне еще рано подучивывать математику.

и как интересно по такой схеме раньше считали, в ней раньше ведь
округлялось все до целого.под что попадают махинации с финансами?
и наконец-то последний платеж стал , правильным, видно что если
уплатить его ,то долга не будет!
а раньше если даже его уплатишь то должок висит:)
тут вроде не очень точно считаются проценты опять формула видать
неверна,хотя в предоставленном источнике именно она.и выбора у меня не
было.вернее последний процент!его просто нет, но так и должно быть
судя по начальной формуле.
и наконец-то отыскал, эту ошибку:
rst!SumDolga = temp - rst!SumVznosa
rst!ProcVznos = rst!SumDolga * StavkaKredita / 12 / 100
вот так надо писать.долг вычислять Перед, а не после

rst!ProcVznos = (SumKredita - summavznos) * StavkaKredita / 12 / 100
я не понял , что за цифра 12? это не срок кредита случайно:)
и надо еще проверку, на предельные значения, чтобы избежать
ошибок, в поле суммавзноса.а то может быть что клиент начнет переплачивать.
но тогда сразу видно ошибку, у него не будет платежа где в остатке 0.
258
09 сентября 2003 года
SergeySV
1.5K / / 19.03.2003
Исчерпывающий ответ. ;-)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог