Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Импорт из ТХТ, help !!!
 
 автор: ars_bs   (02.07.2010 в 03:57)   личное сообщение
 
 

помогите импортировать данные из txt файлов, ситуевина такая, есть куча текстовых файлов и каждое утро надо их импортировать в базу, примерно по 200 файлов каждых из которых до 100 кБ и примерно по 80 полей в каждом файле (точное кол полей просто не помню), пробывал TransferText но блин он очень долго работает и тупит комп, нужно что-нибуть быстрое

  Ответить  
 
 автор: Анатолий (Киев)   (02.07.2010 в 10:44)   личное сообщение
 
 

TransferText (а тпкже запросы) - самый быстрый метод импорта текстовых файлов. Что значит "он очень долго работает" и что значит "тупит комп"?
У вас файлы одинаковые по структуре? Спецификацию импорта создали? Все файлы сливаются в одну таблицу или каждый в свою?
Может у вас данные качаются по сети и проблема в этом?

  Ответить  
 
 автор: ars_bs   (02.07.2010 в 11:30)   личное сообщение
 
 

Sub nameFiles() 'импорт донных из ТХТ
Dim namefile As String 'имя файла
Dim mypath As String 'путь
Dim sq As String ' запрос на выборку
Dim rs As Recordset ' для занесения имени файла в таблицу файлов
Dim rs1 As Recordset ' для выборки по имени файла
Set rs = CurrentDb.OpenRecordset("DataFiles") 'открытие таблицы
mypath = "c:\602\txt\*.txt" ' путь к импортируемым файлам
namefile = Dir(mypath) ' берем имя файла
i = 0
Do While namefile <> "" 'проверяем чтоб имя файла соответствовало условию
sq = "select [DataFiles].filesName from [DataFiles] where ([DataFiles].filesName) = '" & namefile & "';"
Set rs1 = CurrentDb.OpenRecordset(sq) ' проверка занесен файл или нет
If rs1.RecordCount = o Then ' если нет то импортируем
DoCmd.TransferText acImportDelim, "спецификация импорта2", "Ф02-09-0001009_1", "C:\602\TXT\" & namefile, False, "", 866
rs.AddNew ' добавляем имя файла в таблицу файла
rs!filesName = namefile
rs.Update
i = i + 1
'Forms![work]![Поле10] = namefile
Debug.Print namefile, i
Else ' если файл есть то ничего не делаем
Debug.Print "файл есть"
Debug.Print rs1!filesName
End If
namefile = Dir 'берём имя следующего файла
Loop
Debug.Print "Итого скопировано файлов" & i
rs.Close
rs1.Close
End Sub
подскажите может можно упростить, когда работает данный код температуры проца поднимается с 49 градусов до 64 и комп просто тупит -при переключении окон он задумывается приблизительно секунд 30 а то и более , и вообще процесс импорта занимает много времени

  Ответить  
 
 автор: snipe   (02.07.2010 в 12:41)   личное сообщение
 
 

Так - мысль
а если файлы объединить в один и потом одним движением затянуть в базу

как объединить
http://www.vbnet.ru/forum/show.aspx?id=144502

  Ответить  
 
 автор: ars_bs   (02.07.2010 в 12:49)   личное сообщение
 
 

завтра попробую сегодня уже нет времени, но мне кажеться то же будет гемор т.к. дополняется еще одно действие - объединение файлов, а их в день порядка 80, но попытка не пытка

  Ответить  
 
 автор: snipe   (02.07.2010 в 12:53)   личное сообщение
 
 

объединение всего одной командой и та не в цикле
т.е. сначала собрать переменную состоящую из имен файлов которые надо объединить
а потом эту переменную подсунуть командной строке через Shell
далее импортировать данные

  Ответить  
 
 автор: Explorer   (02.07.2010 в 15:08)   личное сообщение
 
 

почему бы не прилинковать тхт файл и дернуть из него данные запросом?

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

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

  Ответить  
 
 автор: Анатолий (Киев)   (02.07.2010 в 13:23)   личное сообщение
 
 

1. Вставьте DoEvents в цикл и комп не будет тупить.
2. Откажитесь от rs1 и многократного выполнения запроса. Выполняйте поиск в rs.
3. Объединение файлов возможно и ускорит, но при условии, что в 1-й строке файлов нет имен полей. К тому-же полученный файл может иметь такой размер, что драйвер его не схавает. Я бы так не делал.

  Ответить  
 
 автор: ars_bs   (04.07.2010 в 04:14)   личное сообщение
 
 

поставил в цикл DoEvents чуток помогло хоть переключаться меж окнами стало возможно, а долго все происходит потому что я тупанул там не по 200 файлов а минимум 600

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList