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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.11.2011, 10:05   #1
alex77755
Форумчанин
 
Аватар для alex77755
 
Регистрация: 14.02.2009
Сообщений: 753
По умолчанию Удаление строк запросом

Продолжаю изучение...
При попытке очистить таблицу полностью:
(работаю из бейсика сбазой)
Код:
strDBName = App.Path & "\TRUB.mdb" ' 
Set WS = DBEngine.Workspaces(0) ' 
Set DB = WS.OpenDatabase(strDBName, False, False) ' 
sSQL = "DELETE * FROM  [naprag];" ' 
Set RS = DB.OpenRecordset(sSQL) '
На последней строке вылетает ошибка.
Открываю базу вручную и пытаюсь очистить полностью.
Так же вылетает ошибка типа с памятью что-то.
Но потом начинает делать и делает долго.
Записей в базе 200000.
Пытаюсь удалять снизу(именно так требуется) большими блоками.
Получается удалить если блок <10000 строк(приблизительно.8600 еще работает) Тогда может можно в цикле допустим по 5000 строк удалять? как записать запрос на удаления последних 5000 строк?
помогу решить контрольные VB6, VBA (недорого)
Alex77755@mail.ru
alex77755 вне форума Ответить с цитированием
Старый 16.11.2011, 10:43   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

типичная ошибка. не надо пытаться получить результаты запроса
(а, как я понимаю, DB.OpenRecordset(sSQL) - именно пытается вернуть выборку данных).
для запросов INSERT/ UPDATE/ DELETE / ALTER ...
нужно запрос ВЫПОЛНЯТЬ

не знаю бейсика, то это что-то вроде
DB.ExecuteSQL или DB.DoCommand и т.д. - смысл метода - выполнить запрос...

прошёлся в поиске..
попробуйте
Код:
  DB.Execute "DELETE * FROM  [naprag];"

Последний раз редактировалось Serge_Bliznykov; 16.11.2011 в 10:45.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 16.11.2011, 15:20   #3
alex77755
Форумчанин
 
Аватар для alex77755
 
Регистрация: 14.02.2009
Сообщений: 753
По умолчанию

Спасибо. Сработало
Причём моментом.
Разобрался и с сокращением до нужного количества сторок.
Цитата:
sSQL = "DELETE * FROM [naprag] WHERE Metr > 400;"
DB.Execute (sSQL)
следующий вопрос: база после этого остайтся прежнего размера - огромной. В ручном режиме называется "Сжать и восстаносить" и база становится маленькой. Как называется эта процедура в VBA&
помогу решить контрольные VB6, VBA (недорого)
Alex77755@mail.ru
alex77755 вне форума Ответить с цитированием
Старый 16.11.2011, 18:15   #4
alex77755
Форумчанин
 
Аватар для alex77755
 
Регистрация: 14.02.2009
Сообщений: 753
По умолчанию

Разобрался сам. Может кому надо:
Option Explicit

Код:
Public Function gflngCompactDatabase( _
CompactingDBPathAndName As String, _
Optional BackupBeforeCompactDB As Boolean = False) As Long
Dim strTempFile As String
On Error GoTo ErrHandler
'Формируем имя для временного ("принимающего") файла'
  strTempFile = Left(CompactingDBPathAndName, (Len(CompactingDBPathAndName) - 4)) & _
  "_Temp" & Right(CompactingDBPathAndName, 4)
'Создаем (если надо) резервную копию файла БД перед сжатием'
  If BackupBeforeCompactDB = True _
  Then FileCopy CompactingDBPathAndName, _
  Left(CompactingDBPathAndName, (Len(CompactingDBPathAndName) - 4)) & _
  "_Backup" & Right(CompactingDBPathAndName, 4)
'Сжимаем файл БД (с перезаписью сжатого файла в новый файл)'
  DBEngine.CompactDatabase CompactingDBPathAndName, strTempFile, dbLangCyrillic
'Перезаписываем сжатый (временный файл) на место несжатого (старого файла)'
  FileCopy strTempFile, CompactingDBPathAndName
'Удаляем временный файл'
  Kill strTempFile
Exit Function
ErrHandler:
'обрабатываем возможные ошибки'
  gflngCompactDatabase = Err.Number
  Err.Clear: Exit Function
End Function
помогу решить контрольные VB6, VBA (недорого)
Alex77755@mail.ru
alex77755 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление записи запросом IBQuery alTor БД в Delphi 3 23.10.2011 13:08
удаление строк alexk Microsoft Office Excel 24 15.02.2011 08:34
Обновление двух строк одним запросом L_M SQL, базы данных 5 03.02.2011 02:01
перенос строк удаление ненужных строк HelperAwM Microsoft Office Excel 5 26.06.2010 18:42
двумерный динамический массив с запросом к пользователю о кол-ве строк и столбцов? vasyapupkin Общие вопросы C/C++ 2 22.11.2009 17:37