Гость
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / VBA Access Строковая переменная в .Rename / 7 сообщений из 7, страница 1 из 1
20.07.2017, 11:21
    #39492175
Ataxy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Access Строковая переменная в .Rename
Доброго времени суток
Пишу процедурку разделения таблицы

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Public Sub SC2(tblname)
Dim tbls()
Dim it As Integer
Dim k As String
Dim dc As Long
Dim j As Long

dc = DCount("*", "Таблица")
it = dc \ 50000
ReDim tbls(0 To it)
   For j = 1 To it
   CurrentDb.Execute "CREATE TABLE [Таблица(" & j & ")] ([cod] INT, [ob] VARCHAR, [ind] FLOAT)"
   CurrentDb.Execute "INSERT INTO [Таблица(" & j & ")] SELECT TOP 50000 * FROM Таблица"
   CurrentDb.Execute "DELETE FROM (SELECT TOP 50000 * FROM Таблица)"
   Next j
   
   If DCount("*", "Таблица") > 0 Then
   k = CStr(it + 1)
   DoCmd.Rename "Таблица(k)", acTable, "Таблица"
   End If
   MsgBox "Парам-парам-ПАМ!"
End Sub


Хочу, чтобы после завершения цикла исходная таблица переименовалась в Имя(колличество итераций + 1), если в ней остаются записи. Возможно ли это сделать командой .Rename (или только создать-вставить-удалить запросами)? Если да, то как прописать переменную k в команде?
...
Рейтинг: 0 / 0
20.07.2017, 11:33
    #39492191
VBA Access Строковая переменная в .Rename
Вероятно так же, как и в запросах:
DoCmd.Rename "Таблица(" & k & ")", acTable, "Таблица"

Может объясните, зачем вам такое разделение?

Кстати, вместо CREATE TABLE и INSERT INTO можно выполнить один запрос SELECT...INTO..., если, конечно, вы не меняете тип полей.
...
Рейтинг: 0 / 0
20.07.2017, 11:47
    #39492201
Ataxy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Access Строковая переменная в .Rename
авторDoCmd.Rename "Таблица(" & k & ")", acTable, "Таблица"
Действительно, сработало. Спасибо.
авторМожет объясните, зачем вам такое разделение?
В дальнейшем экспортируется в xls. Если строк больше чем может вместить лист, то бьётся на 2 части и портается на разные листы.
авторвместо CREATE TABLE и INSERT INTO можно выполнить один запрос SELECT...INTO...
Таблицы создадутся автоматически?
...
Рейтинг: 0 / 0
20.07.2017, 12:40
    #39492265
VBA Access Строковая переменная в .Rename
AtaxyВ дальнейшем экспортируется в xls. Если строк больше чем может вместить лист, то бьётся на 2 части и портается на разные листы. Если грузить в xls методом CopyFromRecordset, то можно обойтись без такого гемора. Этот метод имеет аргумент, где указывается кол-во записей. Если указать 50000, столько будет и загружено. Следующий такой вызов на другом листе загрузит следующие 50000 и т.д.. Если записей только 100, то только они и будут загружены.
Кстати, в xls ограничение строк - 65500 с хвостиком.
...
Рейтинг: 0 / 0
21.07.2017, 14:03
    #39492963
Ataxy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Access Строковая переменная в .Rename
авторЕсли грузить в xls методом CopyFromRecordset, то можно обойтись без такого гемора. Этот метод имеет аргумент, где указывается кол-во записей. Если указать 50000, столько будет и загружено. Следующий такой вызов на другом листе загрузит следующие 50000 и т.д.. Если записей только 100, то только они и будут загружены.
А пример такого зверя, какого вы описали, на этом форуме существует?
авторКстати, в xls ограничение строк - 65500 с хвостиком.
В данном случае не принципиально использовать полный объём листа на максимум
...
Рейтинг: 0 / 0
21.07.2017, 15:03
    #39492998
VBA Access Строковая переменная в .Rename
AtaxyА пример такого зверя, какого вы описали, на этом форуме существует?
Примеров с CopyFromRecordset в избытке, а вот с загрузкой порциями - надо поискать. Я сам когда-то давно выкладывал.
Допустим, есть файл с листами "Лист1","Лист2","Лист3",... На листах в 1-й строке уже есть заголовки столбцов. Файл уже открыт и присвоен переменной WB. DAO Recordset на таблице уже открыт в переменной RS и он не пустой. Далее примерно так (писал на коленке):
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
Dim rng As Variant, i As Long
 RS.MoveLast: RS.MoveFirst
 i = 0 
Do While (RS.AbsulutePosition + 1) < RS.RecordCount
 i = i + 1
 Set rng = WB.WorkSheets("Лист" & i).Range("A2")
 rng.CopyFromRecordset RS, 50000
Loop
...
Рейтинг: 0 / 0
22.07.2017, 00:57
    #39493224
Вакшуль Сергей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Access Строковая переменная в .Rename
Анатолий ( Киев )Примеров с CopyFromRecordset в избытке, а вот с загрузкой порциями - надо поискать. Я сам когда-то давно выкладывал.

Я как-то упражнялся на эту тему - 19069928 .
Case 3 - вставка данных массивом определенными порциями(постранично).

Но CopyFromRecordset по скорости все равно круче. Раза в два быстрее. Безусловный лидер.
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / VBA Access Строковая переменная в .Rename / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]