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

Форум: MS ACCESS

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

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

 
 

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

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

тема: Удаление записей из таблицы
 
 автор: shaucha   (29.10.2008 в 18:57)   личное сообщение
 
 

Как удалить из таблицы записи в которых все поля пустые (Null).

Получается такая крокозябра при импорте данных из Excel.
Как отловить такие записи и удалить?

  Ответить  
 
 автор: myth   (29.10.2008 в 19:02)   личное сообщение
 
 

В текущей записи пробежаться по всем полям проверить их на isNULL("твое поле").
если хотя бы одно не IsNULL то пропускаешь его, иначе удаляешь.

  Ответить  
 
 автор: shaucha   (29.10.2008 в 19:04)   личное сообщение
 
 

как по записям бегать я научился...
а как по полям? тут я сдаюсь...
это через Recordset и цикл по записям?
но как по полям....?

к тому же есть нюанс - количество полей не всегда одинаково, т.к. импортируются разные данные.

  Ответить  
 
 автор: k@s   (29.10.2008 в 19:22)   личное сообщение
 
 

Если я правильно понял , то вот это сгодится?
Public Sub ClearTable(strTableName As String)
Dim strSQL As String
On Error GoTo m1
SysCmd acSysCmdSetStatus, "Очищаю таблицу - " & strTableName
strSQL = "DELETE FROM " & strTableName
CurrentDb.Execute strSQL
SysCmd acSysCmdClearStatus
Exit Sub
m1:
MsgBox "Произошла ошибка №" & Err.Number & " при очистке таблицы " & strTableName, vbCritical
Err.Clear
End Sub

  Ответить  
 
 автор: shaucha   (29.10.2008 в 19:27)   личное сообщение
 
 

Возможно, что и пригодится )
Но я вот не вижу, где в коде проверка на Null в полях...
Сейчас попробую, короче говоря )

  Ответить  
 
 автор: Гамлет   (29.10.2008 в 20:06)   личное сообщение
 
 

А так не проще?
DELETE Table1.fld1, Table1.fld2, Table1.fld3
FROM Table1
WHERE (((Table1.fld1) Is Null) AND ((Table1.fld2) Is Null) AND ((Table1.fld3) Is Null));

  Ответить  
 
 автор: myth   (29.10.2008 в 20:19)   личное сообщение
 
 

помоему так намного лучше будет, т.к. не надо все поля перечислять. Универсально вобщем.

dim rst as RecordSet
set rst = CurrentDb.OpenRecordSet("TABLE1")
For I = 0 To rst.RecordCount-1
       flag = false       
       For j = 0 To rst.Fields.Count - 1
           If (Not IsNull(rst.Fields(j).Value)) Then   flag = true
       Next j
       if(flag = false)  then rst.DELETE......
       rst.MoveNext
  Next I
    

  Ответить  
 
 автор: shaucha   (30.10.2008 в 10:38)   личное сообщение
 
 

Спасибо.
Сейчас попробую. )

  Ответить  
 
 автор: shaucha   (30.10.2008 в 11:17)   личное сообщение
 
 

Отлично работает!
Спасибо!

  Ответить  
 
 автор: shaucha   (30.10.2008 в 10:45)   личное сообщение
 
 

Не подходит - таблицы разные импортируются, не всегда количество полей одинаково. Может быть 30, а может и 23... а может и 16...
У меня просто импортируются в базу данные со сходным содержимым, но разные по формату (таблицы от разных поставщиков, так сказать).
Поэтому я фоново импортирую, потом проверяю что и как и в основной массив все сую.

  Ответить  
 
 автор: Дрюня   (29.10.2008 в 20:28)   личное сообщение
 
 

имхо
не добавлять в таблицу то, что не нужно, чтобы потом не удалять

  Ответить  
 
 автор: Гамлет   (29.10.2008 в 20:31)   личное сообщение
 
 

+1
действительно странно почему в таблице появляются строки в которых все поля пустые ?

  Ответить  
 
 автор: shaucha   (30.10.2008 в 10:38)   личное сообщение
 
 

Ну из Excel таблица импортируется.
бывает так, что пустые строки. Я не понимаю как такое получается. Мало того - еще и пустые столбцы вылезают :)
Короче говоря - я идиот, убейте меня кто-нибудь.

  Ответить  
 
 автор: alecks_lp   (30.10.2008 в 14:32)   личное сообщение
 
 


Dim rst As DAO.Recordset
Dim fld As DAO.Field
Dim blnFlag As Boolean
Set rst = CurrentDb.OpenRecordset("tblTable1")
Do Until rst.EOF
    blnFlag = True
    For Each fld In rst.Fields
        If IsNull(fld.Value) Then
        Else
            blnFlag = False
            Exit For
        End If
    Next fld
    If blnFlag Then rst.Delete
    rst.MoveNext
Loop

  Ответить  
 
 автор: shaucha   (30.10.2008 в 14:43)   личное сообщение
 
 

Это столбцы удаляет?

  Ответить  
 
 автор: Lukas   (30.10.2008 в 14:59)   личное сообщение
 
 

Записи.

  Ответить  
 
 автор: shaucha   (30.10.2008 в 15:53)   личное сообщение
 
 

Угу...
Уже понял.
Но я применил предыдущий вариант )
Возьму этот на заметку.

А есть какие-нибудь варианты, как удалять пустые столбцы?

  Ответить  
 
 автор: alecks_lp   (30.10.2008 в 16:24)   личное сообщение
 
 


Не подходит - таблицы разные импортируются, не всегда количество полей одинаково. Может быть 30, а может и 23... а может и 16...

а зачем считать поля & записи? выполнил условие - выходи из цикла...

  Ответить  
 
 автор: shaucha   (30.10.2008 в 16:30)   личное сообщение
 
 

Не, Гемлет же предлагал стандартный запрос с проверкой. А там нужно перечислить поля... Или я что-то не так понял...

  Ответить  
 
 автор: alecks_lp   (30.10.2008 в 16:31)   личное сообщение
 
 

и если таблицы импортируются разношёрстные(?), то всё равно же будете их причёсывать в одну 'свою'...там и посчитаете лишние столбцы.
Например 'INSERT INTO.. SELECT FROM..WHERE..'

  Ответить  
 
 автор: shaucha   (30.10.2008 в 16:45)   личное сообщение
 
 

Куда деваться... :)

  Ответить  
 
 автор: myth   (29.10.2008 в 20:32)   личное сообщение
 
 

веселуха блин

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