Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» VBA for Access

Автор: svmechtaru
Дата сообщения: 29.01.2009 14:35
Есть две базы Acees в разных городах. Каждый день вечером скриптом упаковываем в rar одну из них и отправляем на FTP в другой город, там скриптом распаковываем и синхронизируемся, затем тоже самое обратно. База 200мб, в упакованном виде 15мб. Передается порядка 20 минут. Нужно повысить скорость передачи, или вообще самого процесса.

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

Посоветуйте как все упростить/ускорить?

PS Решение по увеличению скорости интернета не предлагать.
Автор: KenGa
Дата сообщения: 29.01.2009 21:50
Решение нашел: схранил и затем восстановил настройки офиса через "Восстановление приложений MS"
Автор: Elena3785
Дата сообщения: 30.01.2009 19:25
Кто поможет? Очень нужно перекидывать данные из одной базы в другую. Я не знаю как это сделать. Хотя бы небольшой пример, например, есть База1, в которой Таблица1 (поле1, поле2) и есть База2, в которой Таблица2 (поле1, поле2)

Private Sub Кнопка1_Click()

А вот здесь код, который бы позволял из Базы1 Таблицы1 пререкидывать данные в Базу 2 Таблица2

End Sub

Помогите!
Автор: EZH
Дата сообщения: 30.01.2009 21:42
Elena3785
Ты же SQL запросы умеешь выполнять на VB? Выполняешь для Базы 2:

INSERT INTO Таблица2(поле1, поле2)
SELECT поле1, поле2
FROM [Диск:\Путь\База1.mdb].Таблица1;
Автор: Len4ik1987
Дата сообщения: 31.01.2009 13:19
Mont1

Цитата:
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel97, "TableName", "C:\File.xls"


Класс! ))
А у меня файлов больше, путь к ним C:\Len4ik , а имена файлов указаны в поле "3" таблицы "table2", причем нужно импортировать каждый файл Excel в отдельную таблицу и назвать таблицу также, как называется имя файла Excel.

Подскажите плз, как такое сделать! ))

Автор: Elena3785
Дата сообщения: 03.02.2009 18:38
EZH
Спасибо за подсказку. Запросы умею делать, мне главное понять принцип. Теперь буду экспериментировать.
Автор: Elena3785
Дата сообщения: 12.02.2009 13:55
Кто может мне подсказать или прислать небольшой пример, как создать свою панель, например, с двумя кнопками, при нажатии на которые открывалась бы Форма1 и Форма2. И как создать свою командную строку, где-бы находилось две команды, например, Функция1 и Функция2. При выборе функции1 открывалось меню, где находилась бы команда Форма1.
Автор: Yarapolk
Дата сообщения: 13.02.2009 09:17
Всем привет!
Создал базу в акцесе для ведения кассы организации, поля: "кому\от кого", "подотчетное лицо", "дата", "сумма прихода", "сумма расхода", "статья расхода", "примечание". Сделал SQL запрос: "Итого приход", "Итого расход", "Остаток".
После чего все это переместил в форму, все работает, только один минус: при переходе по строкам в таблице итоговые суммы запроса не меняються, а можно сделать так чтобы итоговые суммы высчитывались до активной строки, если можно то подскажите пожалуйста как.
Автор: MrZeRo
Дата сообщения: 13.02.2009 14:05
Yarapolk
Стандартными средствами - наверное, нет. Можно при помощи программы - обработчика перехода по записям.
Т.е. при переходе с записи на запись прогнать курсор по записям, находящимся "выше", просуммировать и вручную запихнуть эти значения в какие-нибудь визуальные компоненты - поле ввода, например.
Автор: Yarapolk
Дата сообщения: 13.02.2009 14:43
MrZeRo
Спасибо, попробую.
А вообще есть какие нибудь процедуры в VBA которые обрабатывают активную строку таблицы в форме?
Например при удалении строки, мы ее активируем а потом удаляем. Если поменять фунцию удаления на функцию подсчета суммы до активной строки и при нажатии допустим кнопки "ПОДСЧЕТ" выводить результат в "ПолеN".
Мне бы знать где искать (работа с формами, работа с таблицами,...) описание обработки строк, то я бы и сам мог это сделать.
Автор: MrZeRo
Дата сообщения: 13.02.2009 15:33
Yarapolk
А какой смысл менять стандартные функции на что-то еще? Все равно это действие надо будет программировать.
По поводу того, где искать, это все в разделе "Справочник по языку Visual Basic Microsoft Access", там описание объектов, функций и т.д.
Или в разделе "программирование", поскольку задача выходит за рамки набрасывания элементов управления на форму и расстановку свойств.
По поводу вашей задачи по простому можно сделать так:
1. Запомнить текущее положение активной записи (при помощи Bookmark или как угодно по-другому, например, через ключевое поле или комбинацию полей)
2. Стать в начало Recordset (MoveFirst)
3. В цикле двигаться вперед, пока не доберетесь до записи, которую вы запомнили, попутно суммируя нужные поля
4. Вывести полученное значение в поле
Автор: Yarapolk
Дата сообщения: 13.02.2009 17:44
MrZeRo
Спасибо еще раз за помощь, воспользуюсь вашим советом, потом раскажу о результатах.
Автор: kalexom
Дата сообщения: 13.02.2009 21:34
Подскажите плиз кто знает.
В течении загрузки изображения в форму возникает окошко.
Там путь файла, прогресс загрузки, кнопка. Как можно его отключить? Изображений много - мелькание этого окошка уже снится

Заранее, спасибо.
Автор: skaboy27
Дата сообщения: 17.02.2009 00:16
Здравствуйте.У меня БД Чемпионат России по футболу.Нужно чтобы Таблица Чемпионата автоматически заполнялась по результатам матчей.Подскажите пожалуйста как это реализовать.Очень надо!!!
Автор: MrZeRo
Дата сообщения: 17.02.2009 08:53
skaboy27
Более конкретно формулируйте задачу.
Вот что пришло с голову в качестве идеи.
Надо найти сайт, где публикуют результаты матчей. Потом из Access вытягивать страницу, например, при помощи следующего куска кода

Цитата:

Set objHTTP = CreateObject("MSXML2.XMLHTTP")
objHTTP.Open "GET", sURL, False
objHTTP.Send
str = objHTTP.responseText

При этом в переменной str будет содержаться страница, адрес страницы sURL.
На компьютере должен быть установлен компонент MSXML и настроен Internet Explorer.
Получив страницу, ее надо разобрать и вытянуть нужные данные, которые потом запихнуть в нужные таблицы, например, при помощи запросов

Цитата:

DoCmd.RunSQL "INSERT INTO mytable ... "

Автор: skaboy27
Дата сообщения: 17.02.2009 11:53
MrZeRo
Всё гораздо проще.Я сам ввожу результаты матчей в форму Матчи.Так вот мне надо чтобы после обновления записей в форме Матчи форма Таблица Чемпионата автоматически заполнялась этими данными.Например чтобы считалось количество матчей каждой команды,количество побед,поражений,ничей и самое главное подчсчёт очков и ещё чтобы в зависимости от количества очков команды выстраивались в нужном порядке.В таблице Матчи основные поля :Команда хозяин,Команда Гость,Голы команды хозяина,Голы команды гостя.А в Таблице Чемпионата : №/место,Команда,количество матчей , ,количество побед,поражений,ничей,количество забитых и пропущенных мячей и кол-во очков.
Автор: MrZeRo
Дата сообщения: 18.02.2009 14:19
skaboy27
Это все реализуется при помощи запросов.
Автор: Elena3785
Дата сообщения: 18.02.2009 18:51

Цитата:
как создать свою панель

Народ, неужели никто не умеет создавать панели в Access? Я умею их создавать только в Exсel.
Автор: ScherbakovaAN
Дата сообщения: 02.03.2009 11:23
Привет! Подскажите, пожалуйста, как при нажатии на кнопку на форме вывести отчет с данными из запроса, только чтобы там были не все записи, а соответствующие записи открытой формы?
Автор: just86
Дата сообщения: 09.03.2009 04:25
Здравствуйте.
люди, подскажите пожалуйста. необходимо сделать форму с 4 картинками. соответственно будет 4 кнопки на добавление и удаление отдельной картинки.
это я решил. вот код:


Код: Option Compare Database
Option Explicit
Dim path As String

Private Sub butPathPic1_Click()
Dim s As String
s = fOpenFileDialog("Выберите фото занятия", CurrentProject.path & "\Фотографии", "Фото (*.jpg)")
s = Replace(s, CurrentProject.path & "\Фотографии\", "")
If s <> "" Then
Me.Снимок1 = s
Pic1.Picture = CurrentProject.path & "\Фотографии\" & s
End If
End Sub

Private Sub butPathPic2_Click()
Dim s As String
s = fOpenFileDialog("Выберите фото занятия", CurrentProject.path & "\Фотографии", "Фото (*.jpg)")
s = Replace(s, CurrentProject.path & "\Фотографии\", "")
If s <> "" Then
Me.Снимок2 = s
Pic2.Picture = CurrentProject.path & "\Фотографии\" & s
End If
End Sub

Private Sub butPathPic3_Click()
Dim s As String
s = fOpenFileDialog("Выберите фото занятия", CurrentProject.path & "\Фотографии", "Фото (*.jpg)")
s = Replace(s, CurrentProject.path & "\Фотографии\", "")
If s <> "" Then
Me.Снимок3 = s
Pic3.Picture = CurrentProject.path & "\Фотографии\" & s
End If
End Sub

Private Sub butPathPic4_Click()
Dim s As String
s = fOpenFileDialog("Выберите фото занятия", CurrentProject.path & "\Фотографии", "Фото (*.jpg)")
s = Replace(s, CurrentProject.path & "\Фотографии\", "")
If s <> "" Then
Me.Снимок4 = s
Pic4.Picture = CurrentProject.path & "\Фотографии\" & s
End If
End Sub
Private Sub butRezet1_Click()
Me.Снимок1 = Null
Pic1.Picture = ""
End Sub
Private Sub butRezet2_Click()
Me.Снимок2 = Null
Pic2.Picture = ""
End Sub

Private Sub butRezet3_Click()
Me.Снимок3 = Null
Pic3.Picture = ""
End Sub

Private Sub butRezet4_Click()
Me.Снимок4 = Null
Pic4.Picture = ""
End Sub

Private Sub Form_Current()
If Not IsNull(Me.Снимок1) Then Pic1.Picture = CurrentProject.path & "\Фотографии\" & Me.Снимок1 Else Pic1.Picture = ""
If Not IsNull(Me.Снимок2) Then Pic2.Picture = CurrentProject.path & "\Фотографии\" & Me.Снимок2 Else Pic2.Picture = ""
If Not IsNull(Me.Снимок3) Then Pic3.Picture = CurrentProject.path & "\Фотографии\" & Me.Снимок3 Else Pic3.Picture = ""
If Not IsNull(Me.Снимок4) Then Pic4.Picture = CurrentProject.path & "\Фотографии\" & Me.Снимок4 Else Pic4.Picture = ""
End Sub
Автор: TONADOOM
Дата сообщения: 09.03.2009 19:19
MrZeRo

Цитата:
При этом в переменной str будет содержаться страница, адрес страницы sURL.
На компьютере должен быть установлен компонент MSXML и настроен Internet Explorer.
Получив страницу, ее надо разобрать и вытянуть нужные данные, которые потом запихнуть в нужные таблицы, например, при помощи запросов

если не трудно, можно с этого места чуть подробнее, например на странице есть таблицы "ctl00_ContentPlaceHolder__gvResultTable" и "ctl00_ContentPlaceHolder__gvFirmList" и надо чтоб из переменной str, в которой по Вашему примеру содержится код страницы, данные попадали и соотв. обновлялись в соответствующих таблицах в БД.
В Excel я это делал при помощи QueryTables, а вот решил перенести решение в Access и застрял на этом моменте.
Заранее благодарен за совет.
Автор: MaximuS G
Дата сообщения: 13.03.2009 16:39
Привет всем!
Кто подскажет, как обращатся к записям ?
Автор: MrZeRo
Дата сообщения: 17.03.2009 15:34
MaximuS G
Почитать в справке про RecordSet
Автор: Kaplona
Дата сообщения: 04.05.2009 12:26
Ребят, помогите пожалуйста:

Мне нужно что бы в поле со списком попадали названия полей определенной таблицы. Как это можно сделать или где почитать?
Автор: Slatsik
Дата сообщения: 05.05.2009 23:03
Подскажите плз как на VBA изобразить клик (дабл клик) мышью по какому-то элементу в форме. Просто вызов подпрограммы 'имя_элемента_Click' не прокатывает, потому как вызывает не все события, по крайней мере (не вызывает) setFocus и т.д.
А вообще мне хотелось бы узнать, как обойти след. момент. Есть форма и подформа. в подформе может выводиться список значений, в том числе и из нулевого кол-ва элементов. при наличии хотя бы одного элемента - никаких проблем при обработке нажатия кнопок в подформе не возникает. если же нет никаких элементов, то нажатие кнопок и других управляющих элементов приводит к выводу access'ом предупреждающих сообщений, типа, не удается открыть такую-то запись (которой нет). Очень хочется не выводить это сообщение! При этом если предварительно перевести фокус на подвал, либо шапку, то это собщение не выводится! В шапке, никаких управляющих элементов нет, только надписи. В подвале почему-то срабатывает такое через раз т.е. если выбрал в основной форме элемент, по которому нет записей в подформе, а потом другой элемент, по которому тоже нет записей, то сообщение снова выдается

про команду doCmd.setwarnings false я в курсе - не помогает
Автор: MrZeRo
Дата сообщения: 06.05.2009 15:32
Kaplona
Зачитать в цикле из соответствующих коллекций.
Например,

Цитата:

CurrentDB.TableDefs(9).Fields(2).Name

дает название 2-го поля в 9-ой таблице. Дальше-дело техники...
Slatsik
Может, имеет смысл как-то по-другому выкрутиться, например, проверять на наличие записей ...
Автор: Slatsik
Дата сообщения: 06.05.2009 19:37
MrZeRo

Цитата:
Может, имеет смысл как-то по-другому выкрутиться, например, проверять на наличие записей ...

я проверяю, только это не влияет на выводимое предупреждение оно как бы и некритичное, просто, типа, месседж, только очень не хочется чтобы оно выскакивало перед конечными пользователями, потому как многие могут просто в ступор впасть...
Автор: dneprcomp
Дата сообщения: 06.05.2009 22:39
Slatsik
setFocus не вызывается, потому как это не событие, а как бы свойство. Поставь обработку(код) на событие GotFocus
Цитата:
если же нет никаких элементов, то нажатие кнопок и других управляющих элементов приводит к выводу access'ом предупреждающих сообщений
На клик проверяй Count елементов. Если = 0, то Exit Sub. А уже после данной прверки код открытия

Цитата:
Может, имеет смысл как-то по-другому выкрутиться, например, проверять на наличие записей ...

я проверяю, только это не влияет на выводимое предупреждение
Kак проверку делаешь?
Автор: Slatsik
Дата сообщения: 10.05.2009 09:13
dneprcomp
Правильно! я и имел в виду, что установка свойства SetFocus в VBA приводит к вызову события GotFocus. Собственно, мне и нужно инициировать событие GotFocus! (на самом деле DblClick, о чем говорится в самом начале моего поста) прямо из VBA. Вопрос: как это сделать из VBA?

проверка такая (не нашел клавиш с форматированием, потому привожу plaintext )
msFormName = "fClntMain"

If IsNull(Me.idClnt) Then Exit Sub
DoCmd.openform msFormName, , , , acFormEdit, , str(Me.idClnt)


Добавлено:
Ура! Все разрешилось!!!
у меня изначально была правильная идея, только в одном месте ступил (неправильно организовал переход в субформу)...
зато нет худа без добра - нашел способ вызывать любую обработку событий из любых открытых форм. На всякий случай приведу его здесь - мало ли кому пригодится...
Если событие навешано на элемент, у которого нет метода SetFocus (типа, заголовки, надписи и т.д.), то создается отдельная кнопка (как бы псевдокнопка, пусть будет dummy), которую можно сделать невидимой/прозрачной и на событие click по ней навесить нужную обработку события. а потом в нужном месте обозначать след. код:

форма![dummy].SetFocus
SendKeys "{ENTER}", True

будет выполнено нужное событие.
Автор: Nubiko
Дата сообщения: 14.05.2009 21:23
Здравствуйте. Помогите пожалуйста!!! Мне нужно при нажатии кнопки выбрать изображение и чтобы потом оно сохранилось на форме. Я только учусь)) Заранее спасибо.

Страницы: 1234567891011121314151617

Предыдущая тема: Delphi+ADO


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.