Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Access
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.02.2011, 15:18   #1
mortal2010
Пользователь
 
Регистрация: 20.01.2011
Сообщений: 18
По умолчанию Импорт из Excel в Access

Привет, уважаемые форумчане.
Как обычно надеюсь на Вашу помощь.
Вопрос такой: есть в базе Access(db_DAO) таблицы, полученные путем импорта из файлов Excel(ТАБЕЛЬ_2011_январь,ТАБЕЛЬ_201 1_февраль...). В каждую из них добавлено поле ID(счетчик) для классификации записей.
Нужно выбрать из таблиц записи с определенным ID: начиная с ID=11 и до конца таблицы через одну запись т.е. 11,13,15,17,19 ...n и записать в таблицу Temp в поля fio, dolg,1,2,3,4,5,6,7,8,9,10,11,12,13, 14,15. Потом выбрать из импортированной таблицы (ТАБЕЛЬ_2011_январь, и т.д.) записи с ID = 12,14,16,18,20...n и записать(пришить) их в ту же таблицу Temp в поля 16,17,18,19,20,21,22,23,24,25,26,27 ,28,29,30,31, чтобы было соответствие:
строка с ID=11 + строка с ID=12 - это одна запись в таблице Temp
строка с ID=13 + строка с ID=14 - след. запись
строка с ID=15 + строка с ID=16 - след. запись
строка с ID=17 + строка с ID=18 - след. запись
................................... .....
т.е. нужно слепить в одну запись в Temp строки с четн. и нечетн. ID
Начал писать скрипт:


Код:
Sub ImportFile()
    Dim db As Database
    Dim rs As DAO.Recordset
    Dim FolderName As String
            FolderName = CurrentProject.Path & "\Импорт\"
                nm = InputBox("Введите имя импортируемого файла в формате ТАБЕЛЬ_2011_январь", "ИМПОРТ из Excel")
    'DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12, "Temp_" & nm_t & "", "C:\my_Project\Импорт\" & nm_t & ".xls"
    On Error GoTo ImpErr:

    DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12, "Temp_" & nm & "", FolderName & nm & ".xls"
         DropTheTable ("Шаблон$_ОшибкиИмпорта")
         'DropTheTable ("Шаблон$_ОшибкиИмпорта1")
         'DropTheTable ("Шаблон$_ОшибкиИмпорта2")
    DoCmd.RunSQL "ALTER TABLE Temp_" & nm & " ADD COLUMN ID counter IDENTITY"
    'DoCmd.RunSQL "ALTER TABLE Temp_" & nm & " ALTER COLUMN ID VARCHAR(50) "

ImpErr: MsgBox Error$
End Sub
'===================================================================
'Sub Drop_Table()
'Dim db As Database
'Set db = OpenDatabase("C:\my_Project\db_DAO.mdb")
'db.Execute " Drop Table Шаблон$_ОшибкиИмпорта; "
'End Sub
'Sub DelTable()
'    Dim dbs As Object, strSQL As String
'        Set dbs = CurrentDb
'        'strSQL = "DROP TABLE [" & Шаблон$_ОшибкиИмпорта1 & "]"
'    dbs.Execute strSQL
'End Sub
'====================================================================
Function DropTheTable(strTableName As String) As Boolean
    Dim myDB As DAO.Database
        Set myDB = CurrentDb
        On Error Resume Next
        myDB.Execute "DROP TABLE [" & strTableName & "]", dbFailOnError
            If Err.Number < 0 Then
                If bolShowErrors = True Then MsgBox (Err.Description)
                    DropTheTable = False
                Else
                    DropTheTable = True
                    myDB.TableDefs.Refresh
            End If
Set myDB = Nothing
End Function
Sub tConv()
    nm = InputBox("Введите имя импортируемого файла в формате ТАБЕЛЬ_2011_январь", "ИМПОРТ из Excel")
    'Dim i As Integer
    Dim cnt As String
    Dim rs As DAO.Recordset
    Set rs = CurrentDb.OpenRecordset("Temp_" & nm & "")
    t = rs.RecordCount - 5
    cnt = ""
    'MsgBox (t)
For i = 10 To t
    i = i + 1
        cnt = cnt & i & " or "
Next i
    cnt = Left(cnt, Len(cnt) - 3)
    'DoCmd.RunSQL "ALTER TABLE Temp_" & nm & " ALTER COLUMN ID VARCHAR(50) "
        DoCmd.RunSQL "INSERT INTO tabel(fio,dolg,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15) SELECT Temp_" & nm & ".[F3],Temp_" & nm & ".[F4],Temp_" & nm & ".[F5],Temp_" & nm & ".[F6],Temp_" & nm & ".[F7],Temp_" & nm & ".[F8],Temp_" & nm & ".[F9],Temp_" & nm & ".[F10],Temp_" & nm & ".[F11],Temp_" & nm & ".[F12],Temp_" & nm & ".[F13],Temp_" & nm & ".[F14],Temp_" & nm & ".[F15],Temp_" & nm & ".[F16],Temp_" & nm & ".[F17],Temp_" & nm & ".[F18],Temp_" & nm & ".[F19] FROM Temp_" & nm & " WHERE Temp_" & nm & ".[ID]=" & cnt
        'DoCmd.RunSQL "INSERT INTO tabel(fio,dolg,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15) SELECT Temp_" & nm & ".[F3],Temp_" & nm & ".[F4],Temp_" & nm & ".[F5],Temp_" & nm & ".[F6],Temp_" & nm & ".[F7],Temp_" & nm & ".[F8],Temp_" & nm & ".[F9],Temp_" & nm & ".[F10],Temp_" & nm & ".[F11],Temp_" & nm & ".[F12],Temp_" & nm & ".[F13],Temp_" & nm & ".[F14],Temp_" & nm & ".[F15],Temp_" & nm & ".[F16],Temp_" & nm & ".[F17],Temp_" & nm & ".[F18],Temp_" & nm & ".[F19] FROM Temp_" & nm & " WHERE Temp_" & nm & ".[ID]=" & CVar(cnt)
        'rs.MoveNext
End Sub
Смысл в том, что из нужных значений ID формируется строка cnt. Потом я использую ее в запросе, получаю ошибку: несоответствие типов.
Думаю дело все в строке с DoCmd, но не могу устранить. Да, действия по импорту должны осуществляться по нажатию 1 кнопки.
Помогите состряпать правильный запрос.
Вложения
Тип файла: rar Import.rar (226.9 Кб, 29 просмотров)
mortal2010 вне форума Ответить с цитированием
Старый 11.02.2011, 16:38   #2
mortal2010
Пользователь
 
Регистрация: 20.01.2011
Сообщений: 18
По умолчанию

Нашел ляпсус:
Код:
For i = 10 To t
    i = i + 1
        cnt = cnt & "Temp_" & nm & ".[ID]=" & i & " or "
Next i
Запрос работает.
Как теперь слепить записи с четным и нечетным ID в одну строку в таблице Temp?????
mortal2010 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Импорт-экспорт данных Excel-Access, и из Access-Excel Людвиг Microsoft Office Access 3 27.10.2011 14:38
Импорт телефонных номеров из excel в access jen9tko Microsoft Office Access 0 08.11.2010 15:34
Импорт таблиц Access в Excel Danara Microsoft Office Excel 5 24.05.2010 23:08
импорт данных из access в excel. romale_80 Microsoft Office Access 8 25.03.2010 01:26
Импорт из Excel в Access AD_min БД в Delphi 0 28.10.2008 09:29