» VBA for Access
Создал запрос в конструкторе "Запрос1",
как получить данные из этого запроса из VBA (например для того чтобы их затем засунуть в Excel). Помогите очень надо.
как получить данные из этого запроса из VBA (например для того чтобы их затем засунуть в Excel). Помогите очень надо.
YFred
Цитата:
Надо создать макрос в Екселе, туда запихнуть код запроса и потом уже сделать заполнение табллицы, либо второй вариант из Акцеза вызвать Ексель при помощи ОЛЕ и заполнить данными таблицу. Для первого случая вот примерный код
Цитата:
Цитата:
как получить данные из этого запроса из VBA (например для того чтобы их затем засунуть в Excel). Помогите очень надо
Надо создать макрос в Екселе, туда запихнуть код запроса и потом уже сделать заполнение табллицы, либо второй вариант из Акцеза вызвать Ексель при помощи ОЛЕ и заполнить данными таблицу. Для первого случая вот примерный код
Цитата:
Set SrvMA = CreateObject("sqlole.SQLServer") ' Create a SQL Server Object
SrvMA.Connect "сервер", "имя", "пароль"
SqlMA = _"здесь идет запрос"
Set resMA = SrvMA.ExecuteWithResults(SqlMA)
Sht.Cells(rMA, cMA + 1).Formula = resMA.GetColumnString(i, 1) пример получения значения
ShIvADeSt
Цитата:
Меня интересует этот вариант. Как запустить Excel через OLE я знаю и как данные запихивать тоже. Меня интересует как обратиться к запросу созданному в Access из того же Accessa но из в VBA. Если можно приведите пример.
Цитата:
второй вариант из Акцеза вызвать Ексель при помощи ОЛЕ и заполнить данными таблицу
Меня интересует этот вариант. Как запустить Excel через OLE я знаю и как данные запихивать тоже. Меня интересует как обратиться к запросу созданному в Access из того же Accessa но из в VBA. Если можно приведите пример.
Братцы, подскажите как сделать, что бы VB распознавал русский текст. Я создал БД в Access. Русский из таблицы воспроизводится нормально и все надписи на формах тоже. Но, мне нужно текст присвоить текстбоксу на русском через программный код. Английский текст присваивает нормально, а вот русский VB видит только ???? и поэтому ничего сохранить не может.
У меня главная форма frmCustomers и continuous sub форма Sub_frmCustomers связанная с таблицей. Что бы сохранить место на continuous форме для ввода текста я использую кнопку закрывающую txtNotes поле на continuous форме и использую эту кнопку что бы открыть дополнительную форму frmNotes для ввода текста, который присвоится txtNotes.
frmNotes:
Private Sub Form_Load()
Me.txtNotes.EnterKeyBehavior = True
Me.txtNotes.Requery
Me.txtNotes = Forms![frmCustomers]!Sub_frmCustomers!Notes
End Sub
Private Sub cmdClose_Click()
On Error GoTo Err_cmdClose_Click
Forms![frmCustomers]!Sub_frmCustomers!Notes = Me.txtNotes
'Английский текст здесь присваивается нормально, а русский не распознается
DoCmd.Close acForm, "frmNotes"
Exit_cmdClose_Click:
Exit Sub
Err_cmdClose_Click:
MsgBox Err.Description
Resume Exit_cmdClose_Click
End Sub
Заранее спасибо.
У меня главная форма frmCustomers и continuous sub форма Sub_frmCustomers связанная с таблицей. Что бы сохранить место на continuous форме для ввода текста я использую кнопку закрывающую txtNotes поле на continuous форме и использую эту кнопку что бы открыть дополнительную форму frmNotes для ввода текста, который присвоится txtNotes.
frmNotes:
Private Sub Form_Load()
Me.txtNotes.EnterKeyBehavior = True
Me.txtNotes.Requery
Me.txtNotes = Forms![frmCustomers]!Sub_frmCustomers!Notes
End Sub
Private Sub cmdClose_Click()
On Error GoTo Err_cmdClose_Click
Forms![frmCustomers]!Sub_frmCustomers!Notes = Me.txtNotes
'Английский текст здесь присваивается нормально, а русский не распознается
DoCmd.Close acForm, "frmNotes"
Exit_cmdClose_Click:
Exit Sub
Err_cmdClose_Click:
MsgBox Err.Description
Resume Exit_cmdClose_Click
End Sub
Заранее спасибо.
AlDol
Я уже спрашивал. Определись наконец, VB или VBA! Если работаешь только в Access это VBA. Тогда какая версия Access. Подозреваю, что 97 не поддержит русский. Скорее всего надо будет разбираться с использованием юникода.
PS. Принято писать коментарии перед коментируемой частью, а не после.
Я уже спрашивал. Определись наконец, VB или VBA! Если работаешь только в Access это VBA. Тогда какая версия Access. Подозреваю, что 97 не поддержит русский. Скорее всего надо будет разбираться с использованием юникода.
PS. Принято писать коментарии перед коментируемой частью, а не после.
Dneprcomp
MS VB 6.3
MS Access 2003
Спасибо за помощь. Только что прояснил. В той версии, которая не работала, в следующей строке
Me.txtNotes = Forms![frmCustomers]!Notes
Sub_frmCustomers! было потеряно
В полном варианте Me.txtNotes = Forms![frmCustomers]!Sub_frmCustomers!Notes
вроде работает
MS VB 6.3
MS Access 2003
Спасибо за помощь. Только что прояснил. В той версии, которая не работала, в следующей строке
Me.txtNotes = Forms![frmCustomers]!Notes
Sub_frmCustomers! было потеряно
В полном варианте Me.txtNotes = Forms![frmCustomers]!Sub_frmCustomers!Notes
вроде работает
Ситуация такая:
Есть база, выкладываю в инет экспортом в html.
Проблемы:
- оптимизация кода при экспорте.
- как сформировать линки формата "http://сайт/цифра(1...N).jpg" в экспортируемой ячейке из поля формата "цифра(1...N)"??
Или есть другие пути, отличные от встроенного экспорта?
Есть база, выкладываю в инет экспортом в html.
Проблемы:
- оптимизация кода при экспорте.
- как сформировать линки формата "http://сайт/цифра(1...N).jpg" в экспортируемой ячейке из поля формата "цифра(1...N)"??
Или есть другие пути, отличные от встроенного экспорта?
dneprcomp
продолжим?
вставил:
Код:
<SCRIPT language=vbscript event=onclick for=Кнопка4>
<!--
Private Sub Command2_Click()
On Error GoTo Err_Command2_Click
Dim strSQL As String
продолжим?
вставил:
Код:
<SCRIPT language=vbscript event=onclick for=Кнопка4>
<!--
Private Sub Command2_Click()
On Error GoTo Err_Command2_Click
Dim strSQL As String
В аксессе как можно делать картотека с помощью вба? или в екселе?
ShamaN
А процитировать msg ошибки не требуется? Да и строку не худо было бы поточнее указать. А то получается что ошибка в 'Private Sub Command2_Click()'
А процитировать msg ошибки не требуется? Да и строку не худо было бы поточнее указать. А то получается что ошибка в 'Private Sub Command2_Click()'
У нас в:
две таблице: Контакты и Контакты-2,
две формы: Контакты и Контакты-2 подчиненная форма.
В таблице Контакты(это главная таблица и связанная таблица Контакты-2) имеется 2 поля: КодКонтакта и Фамилия, а в Контакты-2 имеется 4 поля: КодКонтакта, Имя, Отечество, Город, Адрес.
В форме Контакты: Фамилия(поле со списком), Контакты-2 режим табличный.
Как можно сделать в VBA, если в Фамилия "Бондарчук" уже существует, то переход к текущую запису, если Фамилия "Бондаренко" не найден, то создает новый запись?
две таблице: Контакты и Контакты-2,
две формы: Контакты и Контакты-2 подчиненная форма.
В таблице Контакты(это главная таблица и связанная таблица Контакты-2) имеется 2 поля: КодКонтакта и Фамилия, а в Контакты-2 имеется 4 поля: КодКонтакта, Имя, Отечество, Город, Адрес.
В форме Контакты: Фамилия(поле со списком), Контакты-2 режим табличный.
Как можно сделать в VBA, если в Фамилия "Бондарчук" уже существует, то переход к текущую запису, если Фамилия "Бондаренко" не найден, то создает новый запись?
Как програмно изменить описание поля таблицы?
создаю поле с помощью ADOX: [имяТаблицы].Columns.Append [имяПоля], ТипПоля, РазмерПоля
а как описание его добавить - незнаю. Подскажите, пожалуйста.
создаю поле с помощью ADOX: [имяТаблицы].Columns.Append [имяПоля], ТипПоля, РазмерПоля
а как описание его добавить - незнаю. Подскажите, пожалуйста.
Люди помогите, срочно нужно решение такой задачи:
Есть 2 таблицы [main] и [models]
В таблице [main] есть поле "Модели", это поле заполняется значениями из таблицы [models]. А задача такая: нужно организовать 5.000 записей в таблице [main], используя значения из [models] рандомно.
Есть 2 таблицы [main] и [models]
В таблице [main] есть поле "Модели", это поле заполняется значениями из таблицы [models]. А задача такая: нужно организовать 5.000 записей в таблице [main], используя значения из [models] рандомно.
filemoto
Ну, в общем так
Открываешь открываешь рекордсет из таблицы modeles, из него заполняешь массив, заодно, определяешь количество элементов.
Рекордсет закрываешь.
Открываешь рекордсет из таблицы main.
В цикле выбираешь из массива случайные значения, используя функцию Rnd(), и добавляешь их в рекордсет, не забывая обновить после каждого ввода.
Функция Rnd() возвращает случайное число от 0 до 1, это число нужно домножить на количество элементов в массиве плюс 0,5 и взять целую часть, чтобы получить случайный индекс элемента массива. Int(Rnd()*(Nn+0.5))
Рекордсет закрываешь.
Все.
Ну, в общем так
Открываешь открываешь рекордсет из таблицы modeles, из него заполняешь массив, заодно, определяешь количество элементов.
Рекордсет закрываешь.
Открываешь рекордсет из таблицы main.
В цикле выбираешь из массива случайные значения, используя функцию Rnd(), и добавляешь их в рекордсет, не забывая обновить после каждого ввода.
Функция Rnd() возвращает случайное число от 0 до 1, это число нужно домножить на количество элементов в массиве плюс 0,5 и взять целую часть, чтобы получить случайный индекс элемента массива. Int(Rnd()*(Nn+0.5))
Рекордсет закрываешь.
Все.
Dixi257
спасибо. суть ясна
лУчше кодом конечно...
как там разобрать, где нужно обновление для рекордсета и его закрытие...
и кстати, то, что значения закидываются в массив, а потом заполняется поле, будет ли в этом случае раляция? в смысле, будет ли связь между таблицами? или заполнение тут будет как просто новое слово каждый раз?
спасибо. суть ясна
лУчше кодом конечно...
как там разобрать, где нужно обновление для рекордсета и его закрытие...
и кстати, то, что значения закидываются в массив, а потом заполняется поле, будет ли в этом случае раляция? в смысле, будет ли связь между таблицами? или заполнение тут будет как просто новое слово каждый раз?
Цитата:
в смысле, будет ли связь между таблицами?
Нет, но и задачи такой Вы не ставили.
Если связь нужна она легко организуется, просто в основную таблицу нужно вставлять значение ключевого поля из другой таблицы, а в схеме данных указать связь.
Цитата:
или заполнение тут будет как просто новое слово каждый раз?
Да
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
спасибо 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
теперь буду применять на практике... пока пытаюсь понять что они делают
мне еще предложили такой вариант:
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
теперь буду применять на практике... пока пытаюсь понять что они делают
Цитата:
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
Здесь устанавливают случайную текущую позицию в рекордсете. В общем случае, думаю, это несколько медленние, чем прочитать все в динамический массив и оттуда тянуть. Однако здесь есть гарантия от провлем с нехваткой памяти. Массив может быть очень большой, если таблица моделей огромная.
Работать будет и так и этак.
а как сделать чтоб поле было явно привязано к подстановке из другой таблицы? т.е. если поле берёт значение из другой таблицы, то чтоб в это поле нельзя было вставить никакое другое значение, только то, что представлено в той таблице, откуда берутся значения.
Цитата:
чтоб в это поле нельзя было вставить никакое другое значение, только то, что представлено в той таблице, откуда берутся значения
Это не вопрос программирования как такового. Это вопрос лишь организации интерфейса.
Если ты создаешь форму для ввода данных в таблицу, то этой форме может быть элемент управления "Поле со списком". "Поле со списком" связано с полем заполняемой таблицы. Для "Поля со списком" должно быть указано свойство "Ограничиться списком", а данные в список должны подставляться из индивидуального запроса, который основан на второй таблице из которой беруться значения. Ни строчки кода на VB писать не надо.
Dixi257
отлично! именно это я и хотел узнать. всё сделал, всё работает.
слушай, а еще не мог бы помочь в одном вопросе? я нашёл юзерконтрол один, хочу прикрутить его в проект ВБ. но у меня возникает некоторые ошибки. думаю, что это мелочи какие-то, но у меня всё никак не получается. не мог ли бы ты посмотреть сам контрол? вот ссылка http://www.vb.kiev.ua/controls/multiline_treeview_197736.zip ~20кб
Глянь пожалуйста, как использовать ctl и cls в своём проекте.
отлично! именно это я и хотел узнать. всё сделал, всё работает.
слушай, а еще не мог бы помочь в одном вопросе? я нашёл юзерконтрол один, хочу прикрутить его в проект ВБ. но у меня возникает некоторые ошибки. думаю, что это мелочи какие-то, но у меня всё никак не получается. не мог ли бы ты посмотреть сам контрол? вот ссылка http://www.vb.kiev.ua/controls/multiline_treeview_197736.zip ~20кб
Глянь пожалуйста, как использовать ctl и cls в своём проекте.
Народ, подскажите пожалуйста. Хочу в Access включить возможность просмотра изображений, потом выбранные изображения скопировать в нужную папку. Как это сделать?
dvison
Неужели Вы до сих пор верите в телепатию? Ну никто Вам ничего не ответит на такой вопрос. Надо многое уточнять. Как смотреть, чем смотреть, какие изображения? Что, куда, откуда копировать? Вы для себя определитесь.
Вариант: встроенные элемент Image VB,
вариант: встроенный элемент PictureBox VB,
вариант: платный OCX-элемент для просмотра изображений,
вариант: вызывать внешнюю программу просмотра.
Неужели Вы до сих пор верите в телепатию? Ну никто Вам ничего не ответит на такой вопрос. Надо многое уточнять. Как смотреть, чем смотреть, какие изображения? Что, куда, откуда копировать? Вы для себя определитесь.
Вариант: встроенные элемент Image VB,
вариант: встроенный элемент PictureBox VB,
вариант: платный OCX-элемент для просмотра изображений,
вариант: вызывать внешнюю программу просмотра.
Я попробовал через стандартный FileDialog msOffice. Открывает эксплоер, а там можно и просмотреть и выбрать картинки. Потом с помощью Public Declare Function SHFileOperation Lib "shell32.dll" Alias "SHFileOperationA" (lpFileOp As Any) As Long
копирую всю выбранную коллекцию в нужную папку.
Завис теперь на проверке - существует ли папка. При использовании FSO - выдает Automation error, а другие методы проверки я не могу найти. Не подскажете? Вобще, каким лучше идти путем для работы с файлами (копирование, удаление, переименование, проверка на существование)? В нете можно посмотреть разные, но мне нужен один универсальный и надежный, а главное, чтоб Access поддерживал, ато FileSystemObject - чето глючит (или я чего-то не знаю)
копирую всю выбранную коллекцию в нужную папку.
Завис теперь на проверке - существует ли папка. При использовании FSO - выдает Automation error, а другие методы проверки я не могу найти. Не подскажете? Вобще, каким лучше идти путем для работы с файлами (копирование, удаление, переименование, проверка на существование)? В нете можно посмотреть разные, но мне нужен один универсальный и надежный, а главное, чтоб Access поддерживал, ато FileSystemObject - чето глючит (или я чего-то не знаю)
Кто подскажет? Есть список1, в котором, например, содержаться фамилии, и есть пустой список2. Вопрос: как прописать в VBA код (процедура: двойное нажатие кнопки), чтобы выбрав из первого списка фамилию она скопировалась во второй список.
Private Sub Список1_DblClick(Cancel As Integer)
Список1. Copy Список2 (???)
End Sub
Private Sub Список1_DblClick(Cancel As Integer)
Список1. Copy Список2 (???)
End Sub
Как в VBA узнать количество строк в таблице (форме).
Реально ли такое реализовать:
Есть таблица, в которой одно поле идет по категориям, т.е. есть определенные значения и они повроторяются. Как узнать эти категории.
Вот пример:
id job
1 Садовод
2 Лесоруб
3 Лесоруб
4 Садовод
5 Танкист
6 Пилот
Хотелось бы достать все виды "job", т.е. "Садовод", "Лесоруб", "Танкист".
Как потом сохранить все эти варианты? Можно в новую таблицу или БД.
Можно было бы сделать это всё вручную, но так как в таблице 94 тыс. записей, хотелось бы это автоматизировать.
Юзал поиск, но ничего толкового не нашел (может не правильно искал?).
Заранее благодарен.
Добавлено:
Да, ещё:
Есть ли нормальный способ нахождения строки в массиве строк, помимо стандартного перебора.
Добавлено:
Пока сделал поиск через перебор. Чем дольше работает прога, тем медленнее.
Как альтернативу хоетлось бы попробовать делать Query на Query, т.е., чтобы можно было бы последовательно отфильтровывать данные, т.е. чтобы при изменении фильтра не менялся прежний.
Что-то в этом роде. Не знаю, как сказать лучше.
Обращайтесь за разъяснениями.
Реально ли такое реализовать:
Есть таблица, в которой одно поле идет по категориям, т.е. есть определенные значения и они повроторяются. Как узнать эти категории.
Вот пример:
id job
1 Садовод
2 Лесоруб
3 Лесоруб
4 Садовод
5 Танкист
6 Пилот
Хотелось бы достать все виды "job", т.е. "Садовод", "Лесоруб", "Танкист".
Как потом сохранить все эти варианты? Можно в новую таблицу или БД.
Можно было бы сделать это всё вручную, но так как в таблице 94 тыс. записей, хотелось бы это автоматизировать.
Юзал поиск, но ничего толкового не нашел (может не правильно искал?).
Заранее благодарен.
Добавлено:
Да, ещё:
Есть ли нормальный способ нахождения строки в массиве строк, помимо стандартного перебора.
Добавлено:
Пока сделал поиск через перебор. Чем дольше работает прога, тем медленнее.
Как альтернативу хоетлось бы попробовать делать Query на Query, т.е., чтобы можно было бы последовательно отфильтровывать данные, т.е. чтобы при изменении фильтра не менялся прежний.
Что-то в этом роде. Не знаю, как сказать лучше.
Обращайтесь за разъяснениями.
Audciz
Цитата:
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
Цитата:
Как в 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
На форме есть поле с выпадающим списком и поля для заполнения данных.
Данные разбиты по регионам. Есть выпадающее поле со списком регионов. Можно ли сделать чтобы при выборе региона форма "переходила" на соответствующую запись т.е. остальные поля обновлялись вместе с полем "регионы"?
Данные разбиты по регионам. Есть выпадающее поле со списком регионов. Можно ли сделать чтобы при выборе региона форма "переходила" на соответствующую запись т.е. остальные поля обновлялись вместе с полем "регионы"?
AndVGri
Компилятор ругается на
Код: Dim mdb As DAO.Database
Dim rec As DAO.Recordset
Компилятор ругается на
Код: Dim mdb As DAO.Database
Dim rec As DAO.Recordset
Страницы: 1234567891011121314151617
Предыдущая тема: Delphi+ADO
Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.