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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.02.2013, 09:20   #1
Emmelman
Пользователь
 
Регистрация: 27.11.2012
Сообщений: 84
Вопрос Приведение данных в определенный вид

Всем доброе утро!

Появилась задачка, прошу помочь в решении) Есть у меня текстовый файл с большой таблицей внутри(20 столбцов), я делаю импорт данного файла в свою базу данных, все хорошо. Соответственно в таблице есть столбец с названием OPERATIONDATE, который содержит дату проведенной операции в таком вот формате - 20121223, т.е. год-месяц-день. Задача состоит в том, что данный вид мне желательно привести в 23.12.2012, но для начала подошло бы 2012.12.23. Честно, пока слабо представляю как это сделать, может через текстовые функции,такие как Left, Right?

Буду рад любой помощи!
Emmelman вне форума Ответить с цитированием
Старый 05.02.2013, 09:44   #2
shanemac51
Участник клуба
 
Аватар для shanemac51
 
Регистрация: 12.08.2010
Сообщений: 1,077
По умолчанию

Код:
 
'примерно так

Sub ww130205_0939()
Dim s, sg, sm, sd
Dim sdate As Date
s = "20121223"
sg = Val(Mid(s, 1, 4))
sm = Val(Mid(s, 5, 2))
sd = Val(Mid(s, 7, 2))
sdate = DateSerial(sg, sm, sd)
Debug.Print sdate

End Sub
Имя-Галина== почта shanemac51@yandex.ru скайп shanemac51 c 8-15мск будни
Сфера интересов--word-excel-access-распознавание
shanemac51 вне форума Ответить с цитированием
Старый 05.02.2013, 10:15   #3
Emmelman
Пользователь
 
Регистрация: 27.11.2012
Сообщений: 84
По умолчанию

Спасибо,работает!
Теперь бы разобраться еще как все строки в столбце OPERATIONDATE заменить на новую дату) Может через цикл считывать из столбца,записывать в переменную, эту переменную подставить в s ="переменная", а потом заменить существующую запись?

edit: осознал,что если получится переделать существующие данные в таблице, то как реализовать,чтобы при добавлении новых строк в таблицу,старые данные не изменялись, а обрабатывались бы только новые строчки

Последний раз редактировалось Emmelman; 05.02.2013 в 11:02.
Emmelman вне форума Ответить с цитированием
Старый 05.02.2013, 11:09   #4
Андрэич
Форумчанин
 
Аватар для Андрэич
 
Регистрация: 20.05.2012
Сообщений: 311
По умолчанию

Или так:
Код:
datevalue(format("20121223","0000\.00\.00"))
Андрэич вне форума Ответить с цитированием
Старый 05.02.2013, 11:15   #5
Андрэич
Форумчанин
 
Аватар для Андрэич
 
Регистрация: 20.05.2012
Сообщений: 311
По умолчанию

Цитата:
Сообщение от Emmelman Посмотреть сообщение
еще как все строки в столбце OPERATIONDATE заменить на новую дату)
Код:
update Таблица set OPERATIONDATE = datevalue(format(OPERATIONDATE,"0000\.00\.00"))
Андрэич вне форума Ответить с цитированием
Старый 05.02.2013, 11:46   #6
Emmelman
Пользователь
 
Регистрация: 27.11.2012
Сообщений: 84
По умолчанию

не могли бы вы подсказать как правильно вставить данную строку в код? через CurrentDb.Execute?
Emmelman вне форума Ответить с цитированием
Старый 05.02.2013, 11:47   #7
Андрэич
Форумчанин
 
Аватар для Андрэич
 
Регистрация: 20.05.2012
Сообщений: 311
По умолчанию

Цитата:
Сообщение от Emmelman Посмотреть сообщение
Есть у меня текстовый файл с большой таблицей внутри(20 столбцов), я делаю импорт данного файла в свою базу данных
........
как реализовать,чтобы при добавлении новых строк в таблицу,старые данные не изменялись, а обрабатывались бы только новые строчки
Код:
insert into ЦелеваяТаблица  in 'ПолныйПутьКБазе.mdb'
       (Поле1,Поле2,OPERATIONDATE,Поле4 ... Поле20)
select (Поле1,Поле2,datevalue(format(НазваниеПоля,"0000\.00\.00")),Поле4 ... Поле20)
from Исходная in [text;HDR=no;format=Delimited(в этих скобках разделитель);CharacterSet=здесь кодировка,напр,OEM;]

Последний раз редактировалось Андрэич; 05.02.2013 в 11:50.
Андрэич вне форума Ответить с цитированием
Старый 05.02.2013, 13:16   #8
Андрэич
Форумчанин
 
Аватар для Андрэич
 
Регистрация: 20.05.2012
Сообщений: 311
По умолчанию

Извиняюсь, неправильно написал.
Код:
insert into ЦелеваяТаблица
<< если целевая таблица во внешней базе, а не в той, где исполняется код, - то после строки кода выше вставить стринг:
Код:
                                in 'ПолныйПутьКБазе.mdb'
Код:
        (Поле1,Поле2,OPERATIONDATE,Поле4 ... Поле20)
select (Поле1,Поле2,datevalue(format(OPERATIONDATE,"0000\.00\.00")),Поле4 ... Поле20)
from [ИмяФайла#txt] in 'Путь папке'[text; HDR=no; format=Delimited(здесь в скобках разделитель); CharacterSet=здесь кодировка,например,OEM;]
Если же создана спецификация экспорта, то

Код:
insert into ЦелеваяТаблица Таблица   
        (Поле1,Поле2,OPERATIONDATE,Поле4 ... Поле20)
select (Поле1,Поле2,datevalue(format(OPERATIONDATE,"0000\.00\.00")),Поле4 ... Поле20)
from [ИмяФайла#txt] in 'Путь папке'[Text;DSN=имя спецификации;IMEX=2;HDR=Yes]
Вообще, как говорят, лучше в подобных случаях себя ведёт метод TransferText (DoCmd.TransferText acImportDelim...), но я не знаю, позволит ли он такие операции с полями (можете справиться в справке). (Хотя, если что, можно, наверно, и внешнюю функцию использовать...)

Цитата:
Сообщение от Emmelman Посмотреть сообщение
как правильно вставить данную строку в код? через CurrentDb.Execute?
Это текст запроса SQL, можно уже пробовать через конструктор запросов. Если вы запускаете из VBA - то по тем же правилам запуска запроса из кода, с увдвоением кавычек и проч. Или выложите текст процедуры
Андрэич вне форума Ответить с цитированием
Старый 05.02.2013, 13:37   #9
Андрэич
Форумчанин
 
Аватар для Андрэич
 
Регистрация: 20.05.2012
Сообщений: 311
По умолчанию

Да, вот нашёл источник:
Работаем с текстовыми файлами
Внчале топика собственно заветная ваша статья. Штудируйте, вникайте, экспериментируйте; дорогу осилит идущий )
(а то, если не ошибаюсь, скоро уж как год, что вы над этим текстовиком колдуете :-) )
Андрэич вне форума Ответить с цитированием
Старый 05.02.2013, 13:39   #10
Emmelman
Пользователь
 
Регистрация: 27.11.2012
Сообщений: 84
По умолчанию

у меня производится выгрузка из файла с помощью спецификации, вот процедура на кнопке ( я вырезал код,где вызывается файловый диалог, чтобы поменьше было)

Код:
Private Sub Command5_Click()
Dim MyG As String
Dim FileName As String
Dim FilePath As String
Dim s$, h%
    s = "[" & FileName & "]" & vbCrLf & _
        "ColNameHeader=True" & vbCrLf & _
        "Format=TabDelimited" & vbCrLf & _
        "Col1=OPERATIONDATE Char" & vbCrLf & _
        "Col2=OPERATION_TIME Char" & vbCrLf & _
        "Col3=BRANCH_NAME Char" & vbCrLf & _
        "Col4=BRANCH_CODE LongChar" & vbCrLf & _
        "Col5=AMOUNT_OPERATION Double" & vbCrLf & _
        "Col6=CURRENCY char" & vbCrLf & _
        "Col7=DEBIT_ACCOUNT LongChar" & vbCrLf & _
        "Col8=DEBIT_ACCOUNT_OWNER_NAME LongChar" & vbCrLf & _
        "Col9=DEBIT_ACCOUNT_OWNER_ID LongChar" & vbCrLf & _
        "Col10=DEBIT_ACCOUNT_OWNER_STATUS Char" & vbCrLf & _
        "Col11=CREDIT_ACCOUNT Char" & vbCrLf & _
        "Col12=CREDIT_ACCOUNT_OWNER_NAME Char" & vbCrLf & _
        "Col13=CREDIT_ACCOUNT_OWNER_ID LongChar" & vbCrLf & _
        "Col14=CREDIT_ACCOUNT_OWNER_STATUS Char" & vbCrLf & _
        "Col15=EXPLANATION Char" & vbCrLf & _
        "Col16=BANK Char" & vbCrLf & _
        "Col17=ENTER_USER Char" & vbCrLf & _
        "Col18=APPROVE_USER Char" & vbCrLf & _
        "Col19=PRODUCT_NAME Char" & vbCrLf & _
        "Col20=NoName Char" & vbCrLf & _
        "CharacterSet=28595"
    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 Operations SELECT * FROM " & MyG & " IN '" & FilePath & "' 'text;'"

End Sub
поясню - MyG - переменная, в которую записывается название файла( в названии "." заменяется на "#" - эту функцию я тоже вырезал, чтоб не мешала),FileName - переменная с названием файла, но внутри названия есть ".", FilePath - путь к текстовому файлу
Emmelman вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Приведение к 3 н.ф. базы данных leha_leha Помощь студентам 2 26.11.2012 22:50
приведение числовых данных к единому виду сантехник Microsoft Office Excel 42 20.09.2011 11:27
Приведение типов в Qt mike_tihomirov Qt и кроссплатформенное программирование С/С++ 1 19.06.2010 13:14
Необхоима подборка данных за определенный срок koma Общие вопросы Delphi 3 01.10.2009 14:08
Приведение к типу __Demon__ Общие вопросы C/C++ 1 27.09.2009 17:40