|
|
|
| Как удалить из таблицы записи в которых все поля пустые (Null).
Получается такая крокозябра при импорте данных из Excel.
Как отловить такие записи и удалить? | |
|
| |
|
|
|
| В текущей записи пробежаться по всем полям проверить их на isNULL("твое поле").
если хотя бы одно не IsNULL то пропускаешь его, иначе удаляешь. | |
|
| |
|
|
|
| как по записям бегать я научился...
а как по полям? тут я сдаюсь...
это через Recordset и цикл по записям?
но как по полям....?
к тому же есть нюанс - количество полей не всегда одинаково, т.к. импортируются разные данные. | |
|
| |
|
|
|
| Если я правильно понял , то вот это сгодится?
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 | |
|
| |
|
|
|
| Возможно, что и пригодится )
Но я вот не вижу, где в коде проверка на Null в полях...
Сейчас попробую, короче говоря ) | |
|
| |
|
|
|
| А так не проще?
DELETE Table1.fld1, Table1.fld2, Table1.fld3
FROM Table1
WHERE (((Table1.fld1) Is Null) AND ((Table1.fld2) Is Null) AND ((Table1.fld3) Is Null));
|
| |
|
| |
|
|
|
| помоему так намного лучше будет, т.к. не надо все поля перечислять. Универсально вобщем.
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
|
| |
|
| |
|
|
|
| Спасибо.
Сейчас попробую. ) | |
|
| |
|
|
|
| Отлично работает!
Спасибо!
| |
|
| |
|
|
|
| Не подходит - таблицы разные импортируются, не всегда количество полей одинаково. Может быть 30, а может и 23... а может и 16...
У меня просто импортируются в базу данные со сходным содержимым, но разные по формату (таблицы от разных поставщиков, так сказать).
Поэтому я фоново импортирую, потом проверяю что и как и в основной массив все сую. | |
|
| |
|
|
|
| имхо
не добавлять в таблицу то, что не нужно, чтобы потом не удалять | |
|
| |
|
|
|
| +1
действительно странно почему в таблице появляются строки в которых все поля пустые ? | |
|
| |
|
|
|
| Ну из Excel таблица импортируется.
бывает так, что пустые строки. Я не понимаю как такое получается. Мало того - еще и пустые столбцы вылезают :)
Короче говоря - я идиот, убейте меня кто-нибудь. | |
|
| |
|
|
|
|
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
|
| |
|
| |
|
|
|
|
|
| Угу...
Уже понял.
Но я применил предыдущий вариант )
Возьму этот на заметку.
А есть какие-нибудь варианты, как удалять пустые столбцы? | |
|
| |
|
|
|
|
Не подходит - таблицы разные импортируются, не всегда количество полей одинаково. Может быть 30, а может и 23... а может и 16...
|
а зачем считать поля & записи? выполнил условие - выходи из цикла... | |
|
| |
|
|
|
| Не, Гемлет же предлагал стандартный запрос с проверкой. А там нужно перечислить поля... Или я что-то не так понял... | |
|
| |
|
|
|
| и если таблицы импортируются разношёрстные(?), то всё равно же будете их причёсывать в одну 'свою'...там и посчитаете лишние столбцы.
Например 'INSERT INTO.. SELECT FROM..WHERE..' | |
|
| |
|
|
|
|
| веселуха блин | |
|
| |