|
|
|
| доброго времени суток всем!
задача - переписать из екселевского файла строки с 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, что без него - ругается на отсутствие записи.
подскажите, пожалуйста, как лучше быть ? чтоб быстрее и вообще сориентируйте, если это возможно. | |
|
| |
|
|
|
| А не проще подгрузить инфу одним заходом, а потом запросами запросами | |
|
| |
|
|
|
| а как - одним заходом ? я не умею.
или имеется в виду весь этот огромный прямоугольник
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "r2", sfile, , s
где s = ТЗ$A91:BJ150
да ?
а так быстрее будет, чем качать по одной строчечке и заканчивать, когда в столбце ноль появляется ? | |
|
| |
|
|
|
| Может сначала все с нужного диапазона листа загрузить в массив,
а затем нужное (построчно) в табличку через рекордсет? | |
|
| |
|
|
|
| На что ругается
рекордсет хапнул записи
после этого вы в таблу из которой заполняли рекордсет изменяете
рекордсету со старым набором говорите - пшёл на последнюю запись, пшёл
не правильно все - не правильно
ЗЫ Седня уже ни чего не охота - завтра сделаю | |
|
| |
|
|
|
| :)
спасибо
я не знаю, как сделать, чтоб одна строчка вот обновилась. надеялся, что оно "само" обновляется.
попробовал изначально написать rst.update - тоже неправильно. | |
|
| |
|
|
|
| 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
как-то так и без рекордсетов
по уму еще бы проверку на дублирование записей сделать абы два раза инфу не внесли
(но это уже другой вопрос) | |
|
| |
|
|
|
| мда
всё просто, как огурец.
спасибо. не поленился встать , чтоб в 5.30 ответить
подредактирую наверно, чтоб до 150-ой строки писалось тока если галку где поставить
а то таких тз за день штук 10. медленновато будет в сумме, скорее всего.
проверку на дублирование не надо.сами дураки будут ) | |
|
| |
|
|
|
| )))))
это по московскому времени 5.30
а у нас самое-то - 9.30 | |
|
| |
|
|
|
|
подредактирую наверно, чтоб до 150-ой строки писалось тока если галку где поставить
|
Можно - как пошли пустые строки - штук пять - значит точно - дальше записей нет.
И вообще поставить условие
If Len(полученная строка) <> 0 then
Нужная строка - собрабботаем
End if
|
| |
|
| |
|
|
|
| Зачем
там запрос стоит на удаление
ну затянет инфу лишнюю
тут же грохнет и все
галочки, кнопочки - потом юзеру объясняй что к чему
лишнее это
а вот проверку на повторение - это надо, а то потом еще козлом отпущения сделают
вылезет что-то не так и единственная отмазка будет - это не я - это программа так сделала | |
|
| |
|
|
|
| нет
там строки непустые . надо чтоб именно в столбце К было пусто. да и то непонятно, когда в екселе делал мучался - то он думает что там 0, то - что "".кое-как справился.
про повтор - окей, подумаю, спасибо. | |
|
| |
|
|
|
| to snipe - понятно.
Автор - меня не понял.... | |
|
| |