![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 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 |
![]() |
![]() |
![]() |
#2 |
Пользователь
Регистрация: 27.11.2012
Сообщений: 84
|
![]()
решил часть проблемы, покопался в Excel и выяснил, что Кириллическа кодировка ISO обозначается как 28595. Подставил вот сюда:
"CharacterSet=28595" & vbCrLf & _ и теперь поля с текстом отображаются нормально! Осталось только что-то с восьмым полем сделать, чтобы номер счета корректно отображался, а не через 4,56757е+17 |
![]() |
![]() |
![]() |
#3 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]() Цитата:
|
|
![]() |
![]() |
![]() |
#4 |
Пользователь
Регистрация: 27.11.2012
Сообщений: 84
|
![]()
ща попробую, только,если честно,мне кажется, что строчки Col01.....Col2...Col3 у меня не работают. Меняю форматы столбцов - ничего не происходит, а влияют только параметры таблицы в самом аксессе...
Самое пораженческое это то, что я тестировал выгрузку "по-простому", через функцию импорта\экспорта в аксессе и если поставить тип Memo восьмому полю, то оно отлично отображается, в развернутом виде. Видимо у меня в коде не происходит преобразование типов данных должным образом, информация из файла просто заносится в таблицу с уже установленными типами данных |
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 11.07.2010
Сообщений: 914
|
![]()
Из выбранного текстового файла, имя которого занесено в переменную MyG, Вы импортируете какие-то данные.
Вопрос: причем здесь Dim s$, h% и запись текста в файл schema.ini ? Этот файл каким образом с базой связан? Я вот не понял. Последний раз редактировалось EUGY; 22.01.2013 в 13:56. |
![]() |
![]() |
![]() |
#6 |
Пользователь
Регистрация: 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 и тп. И все заработало! Ура! Таблица нормально загружается и отображается, можно работать дальше) |
![]() |
![]() |
![]() |
#7 |
Пользователь
Регистрация: 27.11.2012
Сообщений: 84
|
![]()
Тему можно закрывать)
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
определение кодировки текстового файла+вопрос | 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 |