Уважаемые знатоки! Вопрос следующий: Есть база данных Access. Необходимо заменить в ней часть данных и добавить еще. В Access для меня -"великого спеца" долго и нужно. Но могу довольно просто это сделать в Excell. А вот как все это вернуть в Access?? Нашел, что это можно сделать через AccessLinks. Не могу найти эту надстройку. Использую офис 2007. Кто подскажет, где это чудо сыскать? Спасибо
Access - Excell-Access
15.04.2010 13:04:41
|
|
|
|
15.04.2010 13:09:27
В Access меню файл - внешние данные - импорт
Я сам - дурнее всякого примера! ...
|
|
|
|
15.04.2010 13:11:11
Пардон, не заметил, что речь о 2007.
Я сам - дурнее всякого примера! ...
|
|
|
|
15.04.2010 18:12:13
Оф.сайт -
|
|
|
|
15.04.2010 19:34:23
А в аксессе поиск и замена не пробовали?
|
|
|
|
16.04.2010 09:56:21
{quote}{login=csn2004}{date=15.04.2010 10:48}{thema=}{post}Пытался конечно, но видно ручки шаловливые заточены "для стрельбы из-за угла". Ну а без шуток access рисует, что не удалось выполнить добавление в таблицу данных из-за нарушения уникальности ключа?? Просто не знаю о чем идет речь{/post}{/quote}
наверное у вас вся проблема в том как изменить данные в аксесе алгоритм наверное будет такой 1.сделать подключение к аксес (предлагаю через ODBC ) 2.вывести нужный диапазон БД в екселе обязательно с (ключом поля для того чтобы затем легче найти строку в аксесе при экспорте) 3. фильтром или макросом отобрать нужные значения (для правки) 4.собственно сама правка 5.экспорт в аксес (макрос) первые четыре пункта без проблем а вот пятый в нете нашел gimmy 17.04.2007, 12:58 Стоит задача, при изменении значения в ячейки смотреть есть ли такая запись в базе Access, и если нет, то добавлять, а если есть то обновлять. Таблица в Access состоит из двух полей Код и Значение. Как передать в запрос на SQL переменные объявленные в эксель. Private Sub Worksheet_Change(ByVal Target As Range) ..... Dim objName As Name Set objName = Target.Name NameCell = Trim(objName) ValueCell = Target ............... dbData.Execute "INSERT INTO zakaz (kod1C,kol) VALUES (NameCell, ValueCell )" mikle 17.04.2007, 14:48 Вот так можно: dbData.Execute "INSERT INTO zakaz (kod1C,kol) VALUES ('" & NameCell & "', '" & ValueCell & "')" Вообще, есть несколько способов организовать передачу данных: ADO, DAO, использование COM-сервера Access, etc. Наиболее подходящий из них, на мой взгляд, ADO. Смотрите встроенную справку VBA на предмет ADODB.Connection, ADODB.Recordset, ADODB.Command Учтите, что задача кажется плохо поставленной. ИМХО не существует ситуации, в которой бы оправдано было загружать изменения в базу данных после каждого изменения ячейки. Это весьма накладная процедура. Скорее всего, оптимальным будет загрузка изменений, например, при выполнении команды "Сохранить" Excel'я (логично, правда? ;) ) В таком случае можно вообще обойтись почти без программирования, если есть возможность присоединить данную таблицу екселя как внешнюю к базе аксеса . Или же использовать все-таки ADO. Вот текст достаточно универсальной функции для Access, которая загружает данные из таблицы Excel. Работает довольно медленно в силу поячеечного обращения к экселю. 'Процедура ЗагрузкаИзExcel 'Загрузка данных с листа Excel в соответствующую по структуре таблицу с указанием 'номера первой строки, содержащей данные. Загрузка ведется до конца диапозона 'параметры: 'Таблица - имя таблицы в которую будут загружаться данные 'Файл - полное имя файла (с путем) рабочей книги Excel 'Лист - имя листа Excel 'ПервСтрока - номер первой строки, содержащей данные Function ЗагрузкаИзExcel(Таблица As String, Файл As String, Лист, ПервСтрока As Long) Dim app, wb, rst As New ADODB.Recordset, i As Long, j As Integer On Error GoTo ErrorHandler Set app = CreateObject("Excel.Application") Set wb = app.workbooks.Open(Файл) rst.Open Таблица, CurrentProject.Connection, adOpenStatic, adLockOptimistic With wb.Worksheets(Лист) For i = ПервСтрока To .UsedRange.Rows.Count rst.AddNew For j = 1 To rst.Fields.Count 'Форматы таблиц должны совпадать! rst.Fields(j - 1) = .Cells(i, j) Next j Next i End With rst.Update rst.Close wb.Close GoTo Done ErrorHandler: MsgBox "Ошибка при загрузке. Ряд " & i & " Столбец " & j Done: Set rst = Nothing Set wb = Nothing Set app = Nothing End Function mastadon 17.04.2007, 16:05 можно с помощью функции если определить значения, а потом копировать и вставить (как значения) на старое место AlexeyVik 18.04.2007, 13:09 mikle, задача была с точностью наоборот, из Excel'я передать в Access. Вот основная часть кода "Private Sub Worksheet_Change(ByVal Target As Range)" ................. Dim Baza As Database, rs As Recordset, rs1 As Recordset Set Baza = OpenDatabase(ThisWorkbook.Path & "\имя.mdb", False)' можно указать в кавычках полный путь к базе' Set rs = Baza.OpenRecordset("Имя_таблицы", dbOpenDynaset) Kod=Sheets("имя_листа_книги").Range("ячейка_содержащая _код") QryStr = "SELECT * FROM Имя_таблицы WHERE Имя_таблицы.поле =Kod" Set QRY1 = Baza.CreateQueryDef("") QRY1.Sql = QryStr Set rs1 = QRY1.OpenRecordset(dbOpenDynaset) Здесь добавить обработку ошибки возникающую при отсутствии такого кода. Если такой код есть rs1.Edit rs1.Fields("поле") = Target rs1.Update Если - нет rs.AddNew rs.Fields("имя_поля_таблицы") = Sheets("имя_листа_книги").Range("ячейка_содержащая_код") rs.Fields("имя_поля_таблицы") = Sheets("имя_листа_книги").Range("ячейка_содержащая_значение") rs.Update конец если Baza.Close Set rs = Nothing Set rs1 = Nothing ................... mikle 18.04.2007, 23:55 задача была с точностью наоборот, из Excel'я передать в Access.Что от чего наоборот? ^_^ makody 20.04.2007, 15:06 Делаем в проекте ссылку на MS ADO 2.5. после чего можно использовать следующий код: Private Sub Worksheet_Change(ByVal Target As Range) Dim CN As ADODB.Connection Dim RS As ADODB.Recordset Dim sPath As String sPath = "C:\test.mdb" Set CN = New ADODB.Connection CN.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & sPath & ";Persist Security Info=False" CN.Open RS = New ADODB.Recordset RS.Open "SELECT * FROM Table1 Where NameCell=" & Trim(Target.Name), CN, adOpenStatic, adLockOptimistic If RS.EOF Then RS.AddNew RS.Fields("NameCell").Value = Trim(Target.Name) End If RS.Fields("ValueCell").Value = Target.Value RS.Update RS.Close CN.Close End Sub и еще одна ссылка
|
|||
|
|
16.04.2010 11:59:33
Спасибо откликнувшимся. Научился (стандартными средствами Access) вставлять одну таблицу в другую. Пока неясно как выделить и удалить сразу N строк из базы.
|
|
|
|
17.04.2010 18:01:41
На вкладке Конструктор в группе Тип запроса выберите команду Удаление.
Те записи что выводятся при простом запросе Выбрать. Они удалятся. |
|
|
|
18.04.2010 10:27:50
БОЛЬШУУУУЩЕЕ СПАСИБО!!!
|
||||
|
|
|||
Читают тему