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

Форум: MS ACCESS

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

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

 
 

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

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

тема: access не знаю, как надо и как лучше.
 
 автор: puzo   (20.11.2011 в 15:22)   личное сообщение
 
 

доброго времени суток всем!
задача - переписать из екселевского файла строки с 91 по 150 ( столбцы с 1 по 63 ) в таблицу аксессовскую такие, в которых столбец К непуст.
обычно бывает таких строк 1-2, редко 6. редчайше - 30-40. поэтому неохота перебирать каждый раз всё.
пробую так :
Set rst = CurrentDb.OpenRecordset("r2", dbOpenDynaset)
spath = CurrentProject.Path & "\TZ\"

sfile = Dir(spath & Trim(Str(iTZ)) & "*.xls")
sfile = spath + sfile

For i = 91 To 150
s = "ТЗ$A" + Trim(Str(i)) + ":BJ" + Trim(Str(i))
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "r2", sfile, , s
rst.MoveLast
If (rst.Fields(10).Value) = "" Then Exit Sub
Next i
rst.Close
что с movelast, что без него - ругается на отсутствие записи.
подскажите, пожалуйста, как лучше быть ? чтоб быстрее и вообще сориентируйте, если это возможно.

  Ответить  
 
 автор: snipe   (20.11.2011 в 15:26)   личное сообщение
 
 

А не проще подгрузить инфу одним заходом, а потом запросами запросами

  Ответить  
 
 автор: puzo   (20.11.2011 в 15:39)   личное сообщение
 
 

а как - одним заходом ? я не умею.
или имеется в виду весь этот огромный прямоугольник
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "r2", sfile, , s
где s = ТЗ$A91:BJ150
да ?
а так быстрее будет, чем качать по одной строчечке и заканчивать, когда в столбце ноль появляется ?

  Ответить  
 
 автор: Lukas   (20.11.2011 в 15:56)   личное сообщение
 
 

Может сначала все с нужного диапазона листа загрузить в массив,
а затем нужное (построчно) в табличку через рекордсет?

  Ответить  
 
 автор: snipe   (20.11.2011 в 17:26)   личное сообщение
 
 

На что ругается
рекордсет хапнул записи
после этого вы в таблу из которой заполняли рекордсет изменяете
рекордсету со старым набором говорите - пшёл на последнюю запись, пшёл

не правильно все - не правильно

ЗЫ Седня уже ни чего не охота - завтра сделаю

  Ответить  
 
 автор: puzo   (20.11.2011 в 18:09)   личное сообщение
 
 

:)
спасибо
я не знаю, как сделать, чтоб одна строчка вот обновилась. надеялся, что оно "само" обновляется.
попробовал изначально написать rst.update - тоже неправильно.

  Ответить  
 
 автор: snipe   (21.11.2011 в 05:30)   личное сообщение
 
 

DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "r2", CurrentProject.Path & "\TZ\" & Trim(Str(iTZ)) & "*.xls", false, "ТЗ$A91:BJ150"
DoCmd.SetWarnings False
CurrentDb.Execute "DELETE r2.* FROM r2 WHERE (((r2.F11) Is Null));"
DoCmd.SetWarnings True

как-то так и без рекордсетов
по уму еще бы проверку на дублирование записей сделать абы два раза инфу не внесли
(но это уже другой вопрос)

  Ответить  
 
 автор: puzo   (21.11.2011 в 09:45)   личное сообщение
 
 

мда
всё просто, как огурец.
спасибо. не поленился встать , чтоб в 5.30 ответить
подредактирую наверно, чтоб до 150-ой строки писалось тока если галку где поставить
а то таких тз за день штук 10. медленновато будет в сумме, скорее всего.
проверку на дублирование не надо.сами дураки будут )

  Ответить  
 
 автор: snipe   (21.11.2011 в 09:57)   личное сообщение
 
 

)))))
это по московскому времени 5.30
а у нас самое-то - 9.30

  Ответить  
 
 автор: час   (21.11.2011 в 10:08)   личное сообщение
 
 


подредактирую наверно, чтоб до 150-ой строки писалось тока если галку где поставить

Можно - как пошли пустые строки - штук пять - значит точно - дальше записей нет.
И вообще поставить условие

 If Len(полученная строка) <> 0 then
Нужная строка - собрабботаем
End if

  Ответить  
 
 автор: snipe   (21.11.2011 в 10:16)   личное сообщение
 
 

Зачем
там запрос стоит на удаление
ну затянет инфу лишнюю
тут же грохнет и все
галочки, кнопочки - потом юзеру объясняй что к чему
лишнее это

а вот проверку на повторение - это надо, а то потом еще козлом отпущения сделают
вылезет что-то не так и единственная отмазка будет - это не я - это программа так сделала

  Ответить  
 
 автор: puzo   (21.11.2011 в 10:51)   личное сообщение
 
 

нет
там строки непустые . надо чтоб именно в столбце К было пусто. да и то непонятно, когда в екселе делал мучался - то он думает что там 0, то - что "".кое-как справился.
про повтор - окей, подумаю, спасибо.

  Ответить  
 
 автор: час   (21.11.2011 в 11:50)   личное сообщение
 
 

to snipe - понятно.
Автор - меня не понял....

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