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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.01.2013, 11:08   #1
Emmelman
Пользователь
 
Регистрация: 27.11.2012
Сообщений: 84
Стрелка Импорт текстового файла в БД, смена кодировки

Здравствуйте, уважаемые форумчане!

Требуется ваш совет. Есть файл, в которые выгружаются данные из базы, в нем 20 столбцов и ,соответственно, данные, вот скриншот файла( сам файл не могу пока выложить и paint'a нет на работе :\ ) скриншот файла.rar

Я создал БД в Аccess 2007, пару форм, кнопок и на одной из них я сделал код вызова диалога, в котором выбирается нужный файл txt,далее он загружается в пустую таблицу (имена столбцов совпадают с текстовым файлом), все работает отлично, можно было бы пользоваться, но есть несколько НО(!!)
скриншот таблицы в базе.rar - вот скриншот таблицы, после того как я импортировал данные из текстового файла, в 3,7,8 столбце какая-то ересь.
В 3-ем и 8-ом должен быть текст,он либо латиницей либо русскими буквами там, в 7-ом номер счета.

Использую для импорта вот такой код:

Код HTML:
Private Sub Command1_Click()
Dim MyT As ADODB.Recordset
    Set MyT = New ADODB.Recordset
    MyT.Open "Table2", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
    With MyT
Dim Pro2 As Integer

Dim MyD As String
Dim MyG As String
Dim FileName As String
Dim FilePath As String
Dim fDialog As Office.FileDialog
Dim varFile As Variant
   
   Me.Text4.ControlSource = ""
   

   'Set up the File Dialog.
   Set fDialog = Application.FileDialog(msoFileDialogFilePicker)
   With fDialog
      'Allow user to make multiple selections in dialog box.
      .AllowMultiSelect = False
            
      'Set the title of the dialog box.
      .Title = "Please select one or more files"

      'Clear out the current filters, and add our own.
      .Filters.Clear
      .Filters.Add "Text files", "*.txt"
      .Filters.Add "All Files", "*.*"

      'Show the dialog box. If the .Show method returns True, the
      'user picked at least one file. If the .Show method returns
      'False, the user clicked Cancel.
    If .Show = True Then
         'Loop through each file selected and add it to the list box.
         For Each varFile In .SelectedItems
            'Me.List2.AddItem varFile
            MyD = varFile
         Next
         'MyD = Me.Text4
    Dim n As String
    n = InStrRev(MyD, "\")
    FileName = Mid(MyD, n + 1)
    FilePath = Mid(MyD, 1, n)
            MyG = FileName
            MyG = strreplace(MyG)
         
         'Pro = MsgBox(" " & MyD & " ", vbOKCancel + vbCritical)
                
         Pro2 = MsgBox(" " & MyG & " " & FileName & "   " & FilePath & " ", vbOKCancel)
         
   Dim s$, h%
    s = "[" & FileName & "]" & vbCrLf & _
        "ColNameHeader=True" & vbCrLf & _
        "Format=TabDelimited" & vbCrLf & _
        "CharacterSet=866" & vbCrLf & _
        "Col01=OPERATIONDATE Number" & vbCrLf & _
        "Col2=OPERATION_TIME Number" & vbCrLf & _
        "Col3=BRANCH_NAME Memo" & vbCrLf & _
        "Col4=BRANCH_CODE Number" & vbCrLf & _
        "Col5=AMOUNT_OPERATION Number" & vbCrLf & _
        "Col6=CURRENCY String" & vbCrLf & _
        "Col7=DEBIT_ACCOUNT Memo" & vbCrLf & _
        "Col8=DEBIT_ACCOUNT_OWNER_NAME String" & vbCrLf & _
        "Col9=DEBIT_ACCOUNT_OWNER_ID Memo" & vbCrLf & _
        "Col10=DEBIT_ACCOUNT_OWNER_STATUS String" & vbCrLf & _
        "Col11=CREDIT_ACCOUNT String" & vbCrLf & _
        "Col12=CREDIT_ACCOUNT_OWNER_NAME String" & vbCrLf & _
        "Col13=CREDIT_ACCOUNT_OWNER_ID Memo" & vbCrLf & _
        "Col14=CREDIT_ACCOUNT_OWNER_STATUS String" & vbCrLf & _
        "Col15=EXPLANATION String" & vbCrLf & _
        "Col16=BANK String" & vbCrLf & _
        "Col17=ENTER_USER String" & vbCrLf & _
        "Col18=APPROVE_USER String" & vbCrLf & _
        "Col19=PRODUCT_NAME String" & vbCrLf & _
        "Col20=NoName String"
   
    h = FreeFile: Open "C:\Documents and Settings\u1226430\My Documents\Education docs\Áàçû äàííûõ\schema.ini" For Output As h
    Print #h, s
    Close h
    CurrentDb.Execute "INSERT Into Table2 SELECT * FROM " & MyG & " IN '" & FilePath & "' 'text;'"
    MyT.Requery
 
    Else
         MsgBox "You clicked Cancel in the file dialog box."
    End If
   End With
   
End With
MyT.Close
Set MyT = Nothing
    [Forms]![Sum Form]![Table1 subform].Requery

End Sub
Emmelman вне форума Ответить с цитированием
Старый 22.01.2013, 11:48   #2
Emmelman
Пользователь
 
Регистрация: 27.11.2012
Сообщений: 84
По умолчанию

решил часть проблемы, покопался в Excel и выяснил, что Кириллическа кодировка ISO обозначается как 28595. Подставил вот сюда:
"CharacterSet=28595" & vbCrLf & _ и теперь поля с текстом отображаются нормально! Осталось только что-то с восьмым полем сделать, чтобы номер счета корректно отображался, а не через 4,56757е+17
Emmelman вне форума Ответить с цитированием
Старый 22.01.2013, 12:57   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
сделать, чтобы номер счета корректно отображался, а не через 4,56757е+17
сделайте его текстовым. Например, поместите знак ` перед числом...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 22.01.2013, 13:22   #4
Emmelman
Пользователь
 
Регистрация: 27.11.2012
Сообщений: 84
По умолчанию

ща попробую, только,если честно,мне кажется, что строчки Col01.....Col2...Col3 у меня не работают. Меняю форматы столбцов - ничего не происходит, а влияют только параметры таблицы в самом аксессе...

Самое пораженческое это то, что я тестировал выгрузку "по-простому", через функцию импорта\экспорта в аксессе и если поставить тип Memo восьмому полю, то оно отлично отображается, в развернутом виде.

Видимо у меня в коде не происходит преобразование типов данных должным образом, информация из файла просто заносится в таблицу с уже установленными типами данных
Emmelman вне форума Ответить с цитированием
Старый 22.01.2013, 13:47   #5
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Из выбранного текстового файла, имя которого занесено в переменную MyG, Вы импортируете какие-то данные.
Вопрос: причем здесь Dim s$, h% и запись текста в файл schema.ini ? Этот файл каким образом с базой связан? Я вот не понял.

Последний раз редактировалось EUGY; 22.01.2013 в 13:56.
EUGY вне форума Ответить с цитированием
Старый 22.01.2013, 14:54   #6
Emmelman
Пользователь
 
Регистрация: 27.11.2012
Сообщений: 84
По умолчанию

Я искал в интернете как импортировать текстовый файл в базу данных, нашел метод с использованием текстовой спецификации, с примером,подстроил его под себя.
Я импортирую в schema.ini условия будущего импорта файла, который выполняется ниже. По идее этого можно не делать, а просто сразу самому заполнить файл schema.ini и обращаться к нему, но это при условии,что у вас только один файл, к которому вы постоянно обращаетесь. У меня же структура таблицы одинаковая, но имена файлов всегда разные, поэтому я использую переменные в тех местах, где нужно использовать имя файла и путь к нему.

В данной строчке:
CurrentDb.Execute "INSERT Into Table2 SELECT * FROM " & MyG & " IN '" & FilePath & "' 'text;'"
как я понял,фраза 'text;'" отвечает за подключение спецификации schema.ini (она всегда находится в папке с файлом). И это работает, ибо я решил свои проблемы, о которых писал выше!
Оказывается мой аксесс не распознает типы данных Microsoft Jeta, я даже поискал эту библиотеку,подключил ее, но результат был тот же. Поэтому я все типы данных колонок прописал через ODBC data types - написал там char, LongChar, Double и тп. И все заработало! Ура! Таблица нормально загружается и отображается, можно работать дальше)
Emmelman вне форума Ответить с цитированием
Старый 22.01.2013, 17:52   #7
Emmelman
Пользователь
 
Регистрация: 27.11.2012
Сообщений: 84
По умолчанию

Тему можно закрывать)
Emmelman вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
определение кодировки текстового файла+вопрос s500 Общие вопросы Delphi 7 10.04.2012 20:59
Определение кодировки текстового файла Sobaka_ru Помощь студентам 3 23.01.2012 09:41
Импорт данных из текстового файла chobo Microsoft Office Excel 7 28.10.2010 14:29
Смена кодировки названия открываемого файла в адресной строке при переходе на него по ссылки Adamant HTML и CSS 1 08.02.2008 18:51