Страницы: 1
RSS
Данные из UserForm Эксель в Acces, Может пригодится кому
 
Здравствуйте уважаемые жители Планеты! Может есть такие как я, пытающиеся создать Базу данных в Акссес силами Экселя, думаю Вам пригодится.
Всем Удачи и успехов! ))
 
Ronin751, добрый день. Вопрос: а зачем? :)  
Учусь программировать :)
 
Ну к примеру при создании больших и громоздких таблиц. Чем больше строк, тем больше тормозит файл ( по крайней мере в 2003 экселе, у меня, после 500 строки на 18 столбцов уже подтормаживает при вводе данных с формы. Не говорю уж, что происходит после тысячной строки). А таким образом данных в таблице нет. В случае необходимости мы их из базы вытянем (отберем нужное) и делаем с ними уж что захотим. ))
 
Как "кусок кода" вполне можно использовать, но как управление одной таблицей - невозможно. Ввел одно Имя и дату, нажал 3 раза кнопь (полагая, что первые 2 раза не сохранились) - результат 3 одинаковые записи. Навигации по таблице нет, поиска нет. Непонятно как это будет работать с несколькими пользователями.
Так что еще "допиливать"...
Неизлечимых болезней нет, есть неизлечимые люди.
 
TheBestOfTheBest! Вы не поверите, но как раз тут и уперся. Если нужно довнести данные... Допустим, вчера внес № и дату, а сегодня необходимо в строку еще и Имя добавить?!? Как найти то эту нужную строку? Может знает кто?
 
Надо делать буфер между таблицей и формой, на одну записью Т.е. надо сначала извлечь запись из БД по id, потом записать ее в форму.
Неизлечимых болезней нет, есть неизлечимые люди.
 
Цитата
надо сначала извлечь запись из БД по id, потом записать ее в форму.
Если правильно понял то можно через SQL запрос:
Код
sSQL = "SELECT * FROM Моя_таблица  WHERE искомый_столбец_БДА=Искомое условие"
затем в форму. В форме отредактировать, а вот как обратно в туже строку Аксеса вернуть..? Ума не приложу.  :qstn:
Изменено: Ronin751 - 19.08.2015 16:34:59
 
типа да, берем WHERE id=... либо id=1 (первый)
Далее боксы на форме заполняем соответствующими значениями. Сохранение в обратном порядке.
Неизлечимых болезней нет, есть неизлечимые люди.
 
id - это уникальный номер строки в Аксесе?
 
это первичный ключ ваше access таблицы - Код
Изменено: TheBestOfTheBest - 19.08.2015 16:52:45
Неизлечимых болезней нет, есть неизлечимые люди.
 
Спасибо, буду грызть дальше.Авось получится! ))
 
Также потребуется вывести кнопки навигации и поиска, как правило. Сделайте форму в Access и вы увидите как должна работать ваша форма.
Изменено: TheBestOfTheBest - 19.08.2015 16:55:43
Неизлечимых болезней нет, есть неизлечимые люди.
 
Все строки в SQL вводятся с использованием команды модификации INSERT для формирования новой записи в базе.
В самой простой форме, INSERT использует следующий синтаксис:
1. Если нужно заполнить все поля и они соответсвуют порядку записи в базе (пример для вашей базы)
Код
INSERT INTO Моя_таблица
     VALUES (TextBox1.value, TextBox2.value, TextBox3.value)
2. Если нужно заполнить не все поля. Порядок полей  в базе и данных из формы описуется полностью
Код
INSERT INTO Моя_таблица (№, ИМЯ, ДАТА)                       'поля
     VALUES (TextBox1.value, TextBox2.value, TextBox3.value) 'данные в форме

Изменять некоторые или все значения в существующей строке базы данных нужно командой UPDATE
Вам не всегда нужно указывать все строки таблицы для изменения единственного значения, так что UPDATE, может брать предикаты. (пример)
Код
UPDATE Моя_таблица 
  SET ИМЯ = TextBox2.value, ДАТА = TextBox3.value 'обновление данных
  WHERE № = TextBox1.value                        'первичный ключ по которому анализируется строка в базе для изменения
Для удаления данных из таблиц используется команда Delete (синтаксис)
Код
DELETE FROM таблица [ WHERE условие ]
В целом это самые элементарные примеры. В рабочих базах данных конструкции команд более сложные.

Правило №1
В базе данных вы должны иметь столбец (поле) в вашей таблице, который бы уникально идентифицировал каждую строку - идентификатор строки (первичный ключ).  На основании его выполняются все операции Вставки, Удаления, Модификации строк, также выполняются связи между таблицами одной базы данных.



Изменено: TSN - 19.08.2015 17:05:49
 
На первичном ключе стоит Счетчик, его добавлять/обновлять не надо.
Настоящие проблемы будут, когда вы попытаетесь обрабатывать две связанные таблицы Access. Вот там надо кучу нюансов отследить! Так что ваше детище не вариант, сорри.
Изменено: TheBestOfTheBest - 19.08.2015 17:01:00
Неизлечимых болезней нет, есть неизлечимые люди.
 
TSN! Я Вас правильно понял!? Получается, что в моем файле вместо
Код
With rs
            .AddNew
            .Fields("№") = TextBox1
            .Fields("ИМЯ") = TextBox2
            .Fields("ДАТА") = TextBox3
            .Update
        End With
Достаточно поставить
Код
Update.MeTable
Set ИМЯ = TextBox2.Value, ДАТА = TextBox3.Value
WHERE № = TextBox1.Value

Тут же начинает ругаться на запятую после TextBox2.Value и на UPDATE
Или я не правильно понял?
 
скорее так
Код
Update MeTable Set ИМЯ=TextBox2.Value, ДАТА = TextBox3.Value, №=TextBox1.Value
WHERE Код = TextBoxКоторогоНет.Value
причем, TextBox3.Value должно быть датой, либо надо CDate(TextBox3.Value)

вот нашел такой же "эксперимент"
Изменено: TheBestOfTheBest - 19.08.2015 18:03:07
Неизлечимых болезней нет, есть неизлечимые люди.
 
Цитата
скорее так
Это я видать уж грешное с праведным по-путал. TSN про SQL запрос говорил то. А его так впихнуть пытаюсь. Буду крутить!
 
а разве у recordset-а нет своих методов? наверняка есть, делайте rs на одну запись и уйдете от запросов sql
Неизлечимых болезней нет, есть неизлечимые люди.
 
Цитата
Ronin751 написал:
TSN! Я Вас правильно понял!? Получается, что в моем файле вместо
В целом я описал общую концепцию языка SQL  (язык структурированных запросов»), а именно часть SQL относящуюся к DML (Язык Манипулирования Данными), пропустив только команду SELECT (выполняющую выгрузку данных из таблиц).
Для доступа к базам данных различных типов служит библиотека ADO (Microsoft ActiveX Data Object) которая в свою очередь позволяет использовать SQL.

Команды SQL можно передавать через  объект Command создаётся следующим образом: Set objComm = CreateObject("ADODB.Command")
Обязательно подключившись к базе данных и открыв ее.
После этого вы можете вызывать и использовать методы и свойства этого объекта.
один из них CommandText - Строка, определяющая текст команды, например, оператор SQL. (примерно так)
Код
objComm.CommandText = "INSERT INTO Моя_таблица (№, ИМЯ, ДАТА) VALUES ('" & TextBox1.Value & "','" & TextBox2.Value & "','" & TextBox3.Value & "')"     'данные в форме
objComm.Execute
Синтаксис команды зависит от сервера SQL (mySQL, SQL и т.д.)
Для данных типа string в основном необходимо заключать в одинарную кавычку загружаемые данные
В целом это сложная тема и требует глубокого самостоятельного изучения.
Текущий форум посвящен Excel.
Ronin751 если интересна тема (ADO, SQL, использование в Access) скиньте в личку Ваш email, вышлю несколько файлов.
Изменено: TSN - 19.08.2015 19:38:17
 
Мне тоже это будет интересно.
Неизлечимых болезней нет, есть неизлечимые люди.
 
Всем снова здравствуйте!
Вот вроде бы допилил. Теперь можно и данные в Аксес вносить и изменять в аксесе, и отображать.
Может что не так, надеюсь на подсказки и советы. Всем удачи и успехов!
 
А кнопка удалить будет?  
Неизлечимых болезней нет, есть неизлечимые люди.
 
Гы-гы. )) Не знаю! Но, Excel же всё может! Надо подумать, если бы еще работа не отвлекала...
 
еще, проверку на вводимые значения надо, дату могут внести неверно. надо кнопки перелистывания страниц и фильтр/поиск нужен, когда записей будет достаточно много.

как раньше шутили: Если работа мешает пьянству- ну на её на фиг такую работу!
Изменено: TheBestOfTheBest - 20.08.2015 16:43:51
Неизлечимых болезней нет, есть неизлечимые люди.
 
Это тогда в раздел "Работа" надо. )))
Буду пробовать. Я тоже об этом думал.
TheBestOfTheBest! Не могли бы Вы проверить следующее
в стандартном модуле убрать апостроф   перед .Column = Application.Transpose(rst.GetRows) и переставить его на .Column = rst.GetRows после этого пару раз запустить с кнопки ЮФорм2. Как у вас после этого данные отображаются? У меня почему то не построчно.  :qstn:  
Код
'Заполняем Listbox
    With UserForm2.ListBox1
        .Clear
        .ColumnCount = 4
        '.Column = Application.Transpose(rst.GetRows)
        .Column = rst.GetRows
        .ListIndex = -1
    End With
Заранее спасибо!
 
Ronin751 есть такой нюанс (пример здесь видела)
Код
        ' Заполняем массив данными из рекордсета:
        arr = rst.GetRows
         
        h = UBound(arr, 1) ' Определяем сколько колонок*
        v = UBound(arr, 2) ' Определяем сколько строк*
- т.е. из rs.GetRows 1-я размерность - колонки, 2-я размерность - строки -- в противовес обычному массиву (с точностью до наоборот)... корни, похоже, отсюда - но не вчитывалась в весь ваш код... всё равно, спасибо за него, и за линк в теме Excel и Access  :) (спасибо, что держите в курсе)
p.s. тоже проверила код по вашему вопросу#25 и получила вывод в листбокс столбцы строками... Transpose, наверно, излишне использовать - RecordSet, видимо, по факту, по природе своей уже такой транспонированный...
Изменено: JeyCi - 20.08.2015 17:51:54
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Цитата
Ronin751 написал: Вот вроде бы допилил
Спасибо за Ваши старания. Небольшая просьба или пожелание, пожалуйста, обновлённый файл заменяйте в первом сообщении. (я из соображений экономии места и чтобы не оставались старые, с ошибками версии проекта) Прошу прощения, если был не прав. :)

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Цитата
p.s. тоже проверила код по вашему вопросу#25 и получила вывод в листбокс столбцы строками...
У меня в этом случае (#25),строки аксесса, в ЛистБоксе отображаются столбцами.
Вместо
1, 1,   Вася,   2/12/2015
2, 23, Семён, 2/23/2015

Я получаю
1                                      2
1                                      23
вася                                 Семён
2/12/2015                          2/23/2015
К слову, может кто подскажет почему при дата отображается  в формате 2/12/2015 если в модуле стоит .Column = rst.GetRows?
 
Цитата
Ronin751 написал:  в формате 2/12/2015
это формат Даты Access - это факт!.. не говорю о формате отображения в базе... вы берёте значения (а не форматы отображения), когда берёте данные в RS... поэтому Access отдаёт вам их так (в привычном для себя формате)... имхо
p.s.
строки столбцами или столбцы строками - одно и то же по смыслу
Изменено: JeyCi - 20.08.2015 18:12:59
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Цитата
строки столбцами или столбцы строками - одно и то же по смыслу
)))
Изменено: Ronin751 - 20.08.2015 18:30:11
Страницы: 1
Читают тему
Наверх