Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » VBA for Access

Модерирует : ShIvADeSt

ShIvADeSt (14-09-2011 00:58): Все обсуждение тут http://forum.ru-board.com/topic.cgi?forum=33&topic=0357&start=1180  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

Elena3785

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
помогите, пожайлуста в следующей проблеме. у меня есть форма, из которой данные попадают в таблицу Начисление2. Я написала код:
 
Private Sub КнДобавитьДанные1_Click()
 
       Dim База As Object, Начисление2 As Object
    Set База = CurrentDb
    Set Начисление2 = База.OpenRecordset("Начисление2", dbOpenDynaset)
        With Начисление2
        .AddNew
        ![КодРаботник] = [КодРаботник]
        ![Год] = [Год]
        ![Месяц] = [Месяц]
        ![Выручка] = [Выручка]
        ![КодПлан] = [КодПлан]
        ![Коэффициент] = [Коэффициент]
        ![Оклад] = [Оклад]
        ![КолДетей] = [КолДетей]
        ![ФиксЗП] = [ФиксЗП]
        ![Курс] = [Курс]
        ![НеоблагаемаяСумма] = [НеоблагаемаяСумма]
        ![СтоимостьТрафика] = [СтоимостьТрафика]
        ![НеоблагаемаяСуммаД] = [НеоблагаемаяСуммаД]
                 
        .Update
 
     End With
     
    Начисление2.Close
     
    Set База = Nothing
 
End Sub
 
Это работает, но добавляет только одну запись из формы, т.е когда я в форму ввожу только одну запись. А как прописать этот код, чтобы добавлялось несколько записей из этой формы в таблицу Начисление2?
Заранее спасибо.

Всего записей: 24 | Зарегистр. 11-05-2008 | Отправлено: 20:32 06-10-2008
AlexeiKozlov

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Private Sub КнДобавитьДанные1_Click()
 
       Dim База As Object, Начисление2 As Object
dim count as integer,i as integer
    Set База = CurrentDb
    Set Начисление2 = База.OpenRecordset("Начисление2", dbOpenDynaset)
count=3
       
 
 
     for i=1 to count
 With Начисление2
        .AddNew
        ![КодРаботник] = [КодРаботник]
        ![Год] = [Год]
        ![Месяц] = [Месяц]
        ![Выручка] = [Выручка]
        ![КодПлан] = [КодПлан]
        ![Коэффициент] = [Коэффициент]
        ![Оклад] = [Оклад]
        ![КолДетей] = [КолДетей]
        ![ФиксЗП] = [ФиксЗП]
        ![Курс] = [Курс]
        ![НеоблагаемаяСумма] = [НеоблагаемаяСумма]
        ![СтоимостьТрафика] = [СтоимостьТрафика]
        ![НеоблагаемаяСуммаД] = [НеоблагаемаяСуммаД]
                 
        .Update
     End With
next i
    Начисление2.Close
     
    Set База = Nothing
 
End Sub

Всего записей: 2211 | Зарегистр. 16-10-2004 | Отправлено: 22:28 06-10-2008
Zhenik2000

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здрасьте вам! у меня такой вопрос.
 
Есть таблица
СОТРУДНИК | ДАТА1 | ДАТА2
-----------------------------------
Иванов          01.10     20.10
Иванов          25.10     28.10
Петров           03.10     15.10
 
как программно сделать так, чтобы если я вводил в поле СОТРУДНИК новую запись "Иванов", а (ДАТА1) или (ДАТА2) или (ДАТА1 и ДАТА2) попадала в промежуток другой записи "Иванов" выдавало ошибку?
 
например, что неправильно:
Иванов 15.10 16.10
Иванов 20.09 02.10
Иванов 18.10 25.10
Иванов 25.09 30.10
 
и т. д.
 
Заранее спасибо!:)

Всего записей: 1 | Зарегистр. 07-10-2008 | Отправлено: 14:39 08-10-2008 | Исправлено: Zhenik2000, 10:55 09-10-2008
Elena3785

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AlexeiKozlov
Спасибо тебе  за подсказку, только вот когда я начала пробовать, то в таблицу добавляется только одна первая запись из формы в количестве 3 раз (т.к. count = 3), а надо чтобы добалялись разные записи, внесенные в форму.  
Может что-то типа этого, только не работает, число записей и первую запись не определяет:
 
Private Sub КнДобавитьДанные_Click()
   
Dim База As Object, Начисление2 As Object
Dim count As Integer, i As Integer, c As Integer
Dim ПерваяЗапись As Integer, ЧислоЗаписей As Integer
Dim Количество As Integer
     
    Set База = CurrentDb
    Set Начисление2 = База.OpenRecordset("Начисление2", dbOpenDynaset)
 
ПерваяЗапись = ДобавлениеДанных.Form.SelTop
ЧислоЗаписей = ДобавлениеДанных.Form.SelHeight
       
ДобавлениеДанных.SetFocus
DoCmd.RunCommand acCmdSelectAllRecords
   
Количество = IIf(ЧислоЗаписей = 0, 1, ЧислоЗаписей)
 
With Начисление2
        .SetFocus
        For i = ПерваяЗапись To ПерваяЗапись + Количество - 1
         
                   DoCmd.GoToRecord , , acGoTo, i
 
        .AddNew
        .Form![КодРаботник] = [КодРаботник]
        .Form![Год] = [Год]
        .Form![Месяц] = [Месяц]
        .Form![Выручка] = [Выручка]
        .Form![КодПлан] = [КодПлан]
        .Form![Коэффициент] = [Коэффициент]
        .Form![Оклад] = [Оклад]
        .Form![КолДетей] = [КолДетей]
        .Form![ФиксЗП] = [ФиксЗП]
        .Form![Курс] = [Курс]
        .Form![НеоблагаемаяСумма] = [НеоблагаемаяСумма]
        .Form![СтоимостьТрафика] = [СтоимостьТрафика]
        .Form![НеоблагаемаяСуммаД] = [НеоблагаемаяСуммаД]
   
        .Update
         
        Next i
         
        DoCmd.RunCommand acCmdSaveRecord
        .Requery
     
End With
 
    Начисление2.Close
       
    Set База = Nothing
 
End Sub
Но кажется это полная чушь?

Всего записей: 24 | Зарегистр. 11-05-2008 | Отправлено: 19:54 09-10-2008 | Исправлено: Elena3785, 21:10 09-10-2008
AlexeiKozlov

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добавлено:
Private Sub КнДобавитьДанные_Click()
   
Dim База As Object, Начисление2 As Object
Dim count As Integer, i As Integer, c As Integer
Dim ПерваяЗапись As Integer, ЧислоЗаписей As Integer
Dim Количество As Integer
     
    Set База = CurrentDb
    Set Начисление2 = База.OpenRecordset("Начисление2", dbOpenDynaset)
 
ПерваяЗапись = ДобавлениеДанных.Form.SelTop
ЧислоЗаписей = ДобавлениеДанных.Form.SelHeight
       
Количество = IIf(ЧислоЗаписей = 0, 1, ЧислоЗаписей)
For i = ПерваяЗапись To ПерваяЗапись + Количество - 1
With Начисление2
        .AddNew
        .Form![КодРаботник] = [КодРаботник]
        .Form![Год] = [Год]
        .Form![Месяц] = [Месяц]
        .Form![Выручка] = [Выручка]
        .Form![КодПлан] = [КодПлан]
        .Form![Коэффициент] = [Коэффициент]
        .Form![Оклад] = [Оклад]
        .Form![КолДетей] = [КолДетей]
        .Form![ФиксЗП] = [ФиксЗП]
        .Form![Курс] = [Курс]
        .Form![НеоблагаемаяСумма] = [НеоблагаемаяСумма]
        .Form![СтоимостьТрафика] = [СтоимостьТрафика]
        .Form![НеоблагаемаяСуммаД] = [НеоблагаемаяСуммаД]
   
        .Update
         End With
     ДобавлениеДанных.Form.recordset.movenext
  Next i
 
 
    Начисление2.Close
       
    Set База = Nothing
 
End Sub

Всего записей: 2211 | Зарегистр. 16-10-2004 | Отправлено: 09:54 10-10-2008 | Исправлено: AlexeiKozlov, 11:06 10-10-2008
Hird

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Имеется одна таблица с данными сотрудников: имя, фамилия и т. д., а также форма, где присутствует фотография.
Я посчитал, что хранить сотни мегабайтных изображений в таблице не айс и стал подгружать их из внешней папки:
 

Код:
 
Private Sub Form_Current()
Dim str As String
        Set FSO = CreateObject("Scripting.FileSystemObject")
        str = "C:\" + Name.Value + Surename.Value + ".jpg"  'формат названий графических файлов: ИмяФамилия.jpg
        If FSO.FileExists(str) = True Then
            img8.Picture = str
        Else
            img8.Picture = "C:\no.gif"
        End If
End Sub
 

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

Всего записей: 1 | Зарегистр. 10-10-2008 | Отправлено: 09:58 10-10-2008 | Исправлено: Hird, 11:03 10-10-2008
AlexeiKozlov

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
удалено.
 
Добавлено:
Hird
иди на sql.ru

Всего записей: 2211 | Зарегистр. 16-10-2004 | Отправлено: 09:59 10-10-2008 | Исправлено: AlexeiKozlov, 11:07 10-10-2008
Elena3785

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AlexeiKozlov
Попробовала второй вариант. Выдает ошибку 424: object requried и выделяет в коде строку: ПерваяЗапись = ДобавлениеДанных.Form.SelTop
В чем может быть проблема?

Всего записей: 24 | Зарегистр. 11-05-2008 | Отправлено: 18:00 13-10-2008
AlexeiKozlov

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ДобавлениеДанных.SelTop  
 
вот так надо наверное.
трудно сказать,не зная стуктуры твоих форм.

Всего записей: 2211 | Зарегистр. 16-10-2004 | Отправлено: 19:03 13-10-2008
Elena3785

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AlexeiKozlov
А если я тебе пошлю базу, чтобы ты мог посмотреть?

Всего записей: 24 | Зарегистр. 11-05-2008 | Отправлено: 20:39 13-10-2008
David_Kats



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
При создании базы добавлял некоторые ссылки (References) ADO, Controls и т.п. Но при открытии базы на другом компе, ругается и пишет, что мол че-то невозможно найти, какие-то неправильные ссылки и т.п Кто подскажет, кто расскажет в чем тут дело-то?

Всего записей: 29 | Зарегистр. 06-11-2007 | Отправлено: 14:04 14-10-2008
Dixi257



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
David_Kats
Дык на то они и ссылки, что файлы (*.ocx, *.dll) на которые эти ссылки добавлены, должны лежать на другом компьютере в тех же самых местах. Мало того, часто нужно, чтобы эти *.ocx и *.dll были корректно установлены, зарегестрированы в реестре.
Т.е. перенос (запуск в сети) базы на другом компьютере часто требует идентичности  программного обеспечения.

Всего записей: 128 | Зарегистр. 24-08-2005 | Отправлено: 16:54 14-10-2008
David_Kats



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Dixi257
Спасибо за отклик! Ну так а как это сделать? Как перенести, корректно установить и т.п. И как узнать какой именно файл переносить?

Всего записей: 29 | Зарегистр. 06-11-2007 | Отправлено: 16:35 16-10-2008
Dixi257



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
И как узнать какой именно файл переносить?

  Дружище, а как ты ссылки вставлял? Там же и смотри, что отсутствует. Т.е. открываешь на редактирование любой модуль, меню->сервис->ссылки. По названию и местоположению файла, помеченного как отсутствующей,  определяешь к чему этот файл относиться. Потом, тебе виднее, какие контролы ты используешь, эти контролы и раздавай клиентам, если лицензия позволяет.
  Вот еще, может мы о разном говорим, можешь точнее описать, что за ошибка появляется. Да и вообще, если ты раздаешь базу клиентам, то надо написать сервис протоколирования ошибок. Все модули должны содержать подпрограмму обработки ошибок времени исполнения и тупо записывать максимально возможное количество информации об ошибке в файл. Правда, нерабочие ссылки, если не ошибаюсь, относятся к этапу компиляции.
  Ну и в завершение, хорошо бы вообще использовать SetupWizard и создавать инсталяционный пакет для раздачи клиентам.

Всего записей: 128 | Зарегистр. 24-08-2005 | Отправлено: 23:52 16-10-2008
klimusu



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
подскажите как распечатать массив данных RS1
 
        Dim DB1 As Database
        Dim RS1 As Recordset
        Dim SQL As String
        Set DB1 = CurrentDb()
        SQL = "Select * From Users"
        Set RS1 = DB1.OpenRecordset(SQL)
         
        RS1.Close
        DB1.Close

Всего записей: 931 | Зарегистр. 23-01-2006 | Отправлено: 13:32 19-10-2008
klimusu



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
в общем решение нашел решение
RS1.Fields("Surname").Value
 
но возникает проблема если это поле пустое, т.е. нет в таблице значения для "Surname".
vb говорит что ошибка синтаксиса в sql запросе.
как быть?

Всего записей: 931 | Зарегистр. 23-01-2006 | Отправлено: 19:59 19-10-2008
David_Kats



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Народ! Куда-то пропала страница свойств и не хочет возвращаться ни по нажатию соответствующей кнопки на панели инструментов, ни из контекстного меню. Как быть?

Всего записей: 29 | Зарегистр. 06-11-2007 | Отправлено: 16:03 20-10-2008
MrZeRo



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
klimusu
Ну, запрос можно переписать :

Цитата:
 
Select * From Users WHERE Surname IS NOT NULL
 

Можно

Цитата:
 
SELECT ...., Nz(Surname, "") as Surname, ... FROM Users
 

тогда пустышки будут выводиться.
Можно при выводе проверять:

Цитата:
 
IF RS1.Fields("Surname").Value IS NOT NULL THEN .... (выводится информация)
 


----------
... не это главное ...

Всего записей: 831 | Зарегистр. 30-01-2002 | Отправлено: 17:16 20-10-2008
klimusu



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MrZeRo
а если я хочу не только surname проверять на пустышку? просто в запросе указать все поля? не смотрится как-то запросик

Всего записей: 931 | Зарегистр. 23-01-2006 | Отправлено: 17:57 20-10-2008
dneprcomp



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
klimusu

Цитата:
не смотрится как-то запросик

Тогда в свойствах полей в TABLE PROPERTY поставь дефолтные значения для новых записей. Также, произведи апдейт всей базы, чтобы везде заменить Null на дефолтные значения.

Всего записей: 3923 | Зарегистр. 31-03-2002 | Отправлено: 20:20 20-10-2008 | Исправлено: dneprcomp, 21:30 20-10-2008
   

Страницы: 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

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » VBA for Access
ShIvADeSt (14-09-2011 00:58): Все обсуждение тут http://forum.ru-board.com/topic.cgi?forum=33&topic=0357&start=1180


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2025

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru