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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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

   

dneprcomp



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ShamaN
А процитировать msg ошибки не требуется? Да и строку не худо было бы поточнее указать. А то получается что ошибка в 'Private Sub Command2_Click()'

Всего записей: 3920 | Зарегистр. 31-03-2002 | Отправлено: 21:14 16-08-2006
Anton T

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
У нас в:
две таблице: Контакты и Контакты-2,
две формы: Контакты и Контакты-2 подчиненная форма.
В таблице Контакты(это главная таблица и связанная таблица Контакты-2) имеется 2 поля: КодКонтакта и Фамилия, а в Контакты-2 имеется 4 поля: КодКонтакта, Имя, Отечество, Город, Адрес.
В форме Контакты: Фамилия(поле со списком), Контакты-2 режим табличный.
 
Как можно сделать в VBA, если в Фамилия "Бондарчук" уже существует, то переход к текущую запису, если Фамилия "Бондаренко" не найден, то создает новый запись?

Всего записей: 325 | Зарегистр. 12-04-2006 | Отправлено: 13:31 21-11-2006
AnSoNi

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как програмно изменить описание поля таблицы?
создаю поле с помощью ADOX: [имяТаблицы].Columns.Append [имяПоля], ТипПоля, РазмерПоля  
а как описание его добавить - незнаю.  Подскажите, пожалуйста.

Всего записей: 14 | Зарегистр. 23-11-2005 | Отправлено: 13:46 27-12-2006
filemoto



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Люди помогите, срочно нужно решение такой задачи:
 
Есть 2 таблицы [main] и [models]  
В таблице [main] есть поле "Модели", это поле заполняется значениями из таблицы [models]. А задача такая: нужно организовать 5.000 записей в таблице [main], используя значения из [models] рандомно.  

Всего записей: 132 | Зарегистр. 08-04-2006 | Отправлено: 11:46 30-12-2006
Dixi257



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
filemoto
 
 Ну, в общем так
 
Открываешь открываешь рекордсет из таблицы modeles, из него заполняешь массив, заодно, определяешь количество элементов.
Рекордсет закрываешь.
Открываешь рекордсет из таблицы main.
В цикле выбираешь из массива случайные значения, используя функцию Rnd(), и добавляешь их в рекордсет, не забывая обновить после каждого ввода.
Функция Rnd() возвращает случайное число от 0 до 1, это число нужно домножить на количество элементов в массиве плюс 0,5 и взять целую часть, чтобы получить случайный индекс элемента массива. Int(Rnd()*(Nn+0.5))
Рекордсет закрываешь.
Все.

Всего записей: 128 | Зарегистр. 24-08-2005 | Отправлено: 12:13 30-12-2006
filemoto



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Dixi257
спасибо. суть ясна
 лУчше кодом конечно...
как там разобрать, где нужно обновление для рекордсета и его закрытие...
 
и кстати, то, что значения закидываются в массив, а потом заполняется поле, будет ли в этом случае раляция? в смысле, будет ли связь между таблицами? или заполнение тут будет как просто новое слово каждый раз?

Всего записей: 132 | Зарегистр. 08-04-2006 | Отправлено: 12:55 30-12-2006
Dixi257



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

Цитата:
в смысле, будет ли связь между таблицами?

  Нет, но и задачи такой Вы не ставили.
  Если связь нужна она легко организуется, просто в основную таблицу нужно вставлять значение ключевого поля из другой таблицы, а в схеме данных указать связь.
 
Цитата:
или заполнение тут будет как просто новое слово каждый раз?

 Да
 
Dim Rs1 As Recordset, Rs2 As Recordset
 
' Тип массива зависит от типа данных
Dim Ms1() As String
 
Dim k1 As Long, k2 As Long, i As Long
Dim Max1 As Long
 
Max1 = 5000
 
Set Rs1 = CurrentDb.OpenRecordset("Modeles", dbOpenDynaset)
 
k1 = 100
ReDim Ms1(k1) As String
Rs1.MoveFirst
k2 = 0
 
Do
    Ms1(k2) = Rs1("Модели")
    Rs1.MoveNext
    k2 = k2 + 1
    If k2 > k1 Then
        k1 = k1 + 100
        ReDim Preserve Ms1(k1) As String
    End If
Loop Until Rs1.EOF
 
Rs1.Close
 
Set Rs2 = CurrentDb.OpenRecordset("Main", dbOpenDynaset)
 
Randomize Timer
 
For k1 = 1 To Max1
    i = Int(Rnd() * k2 - 0.5)
    Rs2.AddNew
    Rs2("модели") = Ms1(k1)
    Rs2.Update
Next
 
Rs2.Close

Всего записей: 128 | Зарегистр. 24-08-2005 | Отправлено: 14:25 08-01-2007 | Исправлено: Dixi257, 14:26 08-01-2007
filemoto



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
спасибо Dixi257 за пример.
мне еще предложили такой вариант:
Option Compare Database
Option Explicit
 
Public Sub set5000()
     Dim dbs As Database
     
     Dim rsModels As Recordset
     Dim rsMain As Recordset
     Dim MyValue As Long
     
     Dim i As Long
     
     Set dbs = CurrentDb
     Set rsModels = dbs.OpenRecordset("models", dbOpenSnapshot)
     Set rsMain = dbs.OpenRecordset("main")
 
rsModels.MoveLast
 
For i = 1 To 5001
 
Randomize
 
MyValue = Int((rsModels.RecordCount * Rnd) + 0)
rsModels.AbsolutePosition = MyValue
 
rsMain.AddNew
 
rsMain.Fields("Модели") = rsModels.Fields("Наименование")
rsMain.Update
Next i
 
End Sub
 
теперь буду применять на практике... пока пытаюсь понять что они делают

Всего записей: 132 | Зарегистр. 08-04-2006 | Отправлено: 16:11 08-01-2007
Dixi257



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

Цитата:
For i = 1 To 5001

  Здесь добавляется 5001 запись, а не 5000
 

Цитата:
 rsModels = dbs.OpenRecordset("models", dbOpenSnapshot)

 А, да не нужно открывать первый рекордсет для записи, только для чтения
 

Цитата:
MyValue = Int((rsModels.RecordCount * Rnd) + 0)

  Не надо было каждый раз звать  rsModels.RecordCount, можно было в переменную один раз записать. +0 не очень мне понятно, ну хотя бы +1E-12, но может так и будет работать, надо проверить на досуге...
 

Цитата:
rsModels.AbsolutePosition = MyValue

  Здесь устанавливают случайную текущую позицию в рекордсете. В общем случае, думаю, это несколько медленние, чем прочитать все в динамический массив и оттуда тянуть. Однако здесь есть гарантия от провлем с нехваткой памяти. Массив может быть очень большой, если таблица моделей огромная.
  Работать будет и так и этак.
 

Всего записей: 128 | Зарегистр. 24-08-2005 | Отправлено: 16:35 08-01-2007
filemoto



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
а как сделать чтоб поле было явно привязано к подстановке из другой таблицы? т.е. если поле берёт значение из другой таблицы, то чтоб в это поле нельзя было вставить никакое другое значение, только то, что представлено в той таблице, откуда берутся значения.

Всего записей: 132 | Зарегистр. 08-04-2006 | Отправлено: 17:13 08-01-2007
Dixi257



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

Цитата:
чтоб в это поле нельзя было вставить никакое другое значение, только то, что представлено в той таблице, откуда берутся значения

 
  Это не вопрос программирования как такового. Это вопрос лишь организации интерфейса.
Если ты создаешь форму для ввода данных в таблицу, то этой форме может быть элемент управления "Поле со списком". "Поле со списком" связано с полем заполняемой таблицы. Для "Поля со списком" должно быть указано свойство "Ограничиться списком", а данные в список должны подставляться из индивидуального запроса, который основан на второй таблице из которой беруться значения. Ни строчки кода на VB писать не надо.

Всего записей: 128 | Зарегистр. 24-08-2005 | Отправлено: 09:57 09-01-2007
filemoto



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Dixi257
отлично! именно это я и хотел узнать. всё сделал, всё работает.
слушай, а еще не мог бы помочь в одном вопросе? я нашёл юзерконтрол один, хочу прикрутить его в проект ВБ. но у меня возникает некоторые ошибки. думаю, что это мелочи какие-то, но у меня всё никак не получается. не мог ли бы ты посмотреть сам контрол? вот ссылка http://www.vb.kiev.ua/controls/multiline_treeview_197736.zip ~20кб
Глянь пожалуйста, как использовать ctl и cls в своём проекте.

Всего записей: 132 | Зарегистр. 08-04-2006 | Отправлено: 10:22 09-01-2007
dvison

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

Всего записей: 2 | Зарегистр. 24-01-2007 | Отправлено: 17:23 24-01-2007
Dixi257



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dvison
 
  Неужели Вы до сих пор верите в телепатию? Ну никто Вам ничего не ответит на такой вопрос. Надо многое уточнять. Как смотреть, чем смотреть, какие изображения? Что, куда, откуда копировать? Вы для себя определитесь.
  Вариант: встроенные элемент Image VB,
  вариант: встроенный элемент PictureBox VB,
  вариант: платный OCX-элемент для просмотра изображений,
  вариант: вызывать внешнюю программу просмотра.

Всего записей: 128 | Зарегистр. 24-08-2005 | Отправлено: 09:18 26-01-2007
dvison

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Я попробовал через стандартный FileDialog msOffice. Открывает эксплоер, а там можно и просмотреть и выбрать картинки. Потом с помощью  Public Declare Function SHFileOperation Lib "shell32.dll" Alias "SHFileOperationA" (lpFileOp As Any) As Long
копирую всю выбранную коллекцию в нужную папку.  
Завис теперь на проверке - существует ли папка. При использовании FSO -  выдает Automation error, а другие методы проверки я не могу найти. Не подскажете? Вобще, каким лучше идти путем для работы с файлами (копирование, удаление, переименование, проверка на существование)? В нете можно посмотреть разные, но мне нужен один универсальный и надежный, а главное, чтоб Access поддерживал, ато FileSystemObject - чето глючит (или я чего-то не знаю)

Всего записей: 2 | Зарегистр. 24-01-2007 | Отправлено: 19:26 26-01-2007
Pantera3587

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Кто подскажет? Есть список1, в котором, например, содержаться фамилии, и есть пустой список2. Вопрос: как прописать в VBA код (процедура: двойное нажатие кнопки), чтобы выбрав из первого списка фамилию она скопировалась во второй список.  
 
Private Sub Список1_DblClick(Cancel As Integer)  
Список1. Copy Список2 (???)  
End Sub  

Всего записей: 40 | Зарегистр. 20-10-2006 | Отправлено: 18:54 30-01-2007
Audciz



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Как в VBA узнать количество строк в таблице (форме).
Реально ли такое реализовать:
Есть таблица, в которой одно поле идет по категориям, т.е. есть определенные значения и они повроторяются. Как узнать эти категории.
Вот пример:
id               job
1               Садовод
2               Лесоруб
3               Лесоруб
4               Садовод
5               Танкист
6               Пилот
Хотелось бы достать все виды "job", т.е. "Садовод", "Лесоруб", "Танкист".
Как потом сохранить все эти варианты? Можно в новую таблицу или БД.
Можно было бы сделать это всё вручную, но так как в таблице 94 тыс. записей, хотелось бы это автоматизировать.
Юзал поиск, но ничего толкового не нашел (может не правильно искал?).
Заранее благодарен.
 
Добавлено:
Да, ещё:
Есть ли нормальный способ нахождения строки в массиве строк, помимо стандартного перебора.
 
Добавлено:
Пока сделал поиск через перебор. Чем дольше работает прога, тем медленнее.
Как альтернативу хоетлось бы попробовать делать Query на Query, т.е., чтобы можно было бы последовательно отфильтровывать данные, т.е. чтобы при изменении фильтра не менялся прежний.
Что-то в этом роде. Не знаю, как сказать лучше.
Обращайтесь за разъяснениями.

Всего записей: 649 | Зарегистр. 13-02-2003 | Отправлено: 12:10 16-02-2007 | Исправлено: Audciz, 12:20 16-02-2007
AndVGri

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

Цитата:
Как в VBA узнать количество строк в таблице  

 
Public Sub RecordCount()
    Dim mdb As DAO.Database
    Dim rec As DAO.Recordset
     
    Set mdb = Application.CurrentDb
    Set rec = mdb.OpenRecordset("Select Count(*) As recCount From MyTable;")
     
    Debug.Print rec.Fields("recCount").Value
End Sub
 

Цитата:
Есть таблица, в которой одно поле идет по категориям, т.е. есть определенные значения и они повроторяются. Как узнать эти категории.  

 
Public Sub GetAllJobs()
    Dim mdb As DAO.Database
    Dim rec As DAO.Recordset
     
    Set mdb = Application.CurrentDb
    Set rec = mdb.OpenRecordset("Select job From MyTable Group By job;")
    rec.MoveFirst
    Do Until rec.EOF
        Debug.Print rec.Fields("job").Value
        rec.MoveNext
    Loop
End Sub
 

Цитата:
 Как потом сохранить все эти варианты? Можно в новую таблицу

 
Public Sub CreateJobTable()
    Dim mdb As DAO.Database
     
    Set mdb = Application.CurrentDb
    mdb.Execute "Select job Into MyJobTable From MyTable Group By job;"
End Sub

Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 16:42 16-02-2007 | Исправлено: AndVGri, 17:02 16-02-2007
lmnik



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
На форме есть поле с выпадающим списком и поля для заполнения данных.
Данные разбиты по регионам. Есть выпадающее поле со списком регионов.  Можно ли сделать чтобы при выборе региона форма "переходила" на соответствующую запись т.е. остальные поля обновлялись вместе с полем "регионы"?

Всего записей: 3 | Зарегистр. 16-02-2007 | Отправлено: 20:30 18-02-2007
Audciz



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
AndVGri
Компилятор ругается на

Код:
Dim mdb As DAO.Database
Dim rec As DAO.Recordset

Где и какой модуль надо подключить?

Всего записей: 649 | Зарегистр. 13-02-2003 | Отправлено: 06:21 20-02-2007
   

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

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru