2010-11-02 1 views
0

Я использую VB6 и пытается прочитать файл MDB вПроблема в чтении формы данных файла MDB в VB6

Set rs = New ADODB.Recordset 
rs.Open SqlStr, mvarDB 

этой моей критерии строки «ID = 'SA/-AS 0N И т.пл. <> «N»», есть запись в таблице, в которой идентификатор упомянутого выше, и его т.пли столбец не Н., но когда

rs.MoveFirst 

в окне просмотра я могу увидеть значение первого столбца. но когда ниже пробегов, заголовок говорит

rs.Filter = sCriteria 

«: Значение Либо BOF или EOF имеет значение ИСТИНА или текущая запись была удалена Запрошенная операция требует текущей записи>:..» Цените ур помощь.

ответ

0

ОК проблема была 2 раза onedaywhen комментарий был полезным, но проблема была,

1- Файл mdb имел worng datatype, который был NUMBER, поэтому каждый нуль в строке заставлял запись достигать EOF. Поэтому я устанавливаю тип данных в TEXT.

2-НАЙТИ NULL в записи SET Делаю

dataSet.Find sCriteria, adSearchForward 'sCriteria = id = 'NW' 

Затем я проверить эту колонку, если это не является нулевым,

If IsNull(dataSet!col1) Then 

Если будет установлено нулевое я использую 'sCriteria = id =' NW 'else i use id =' NW 'И mp <>' N '.

работает отлично. Нуль вызывал проблему, как указывалось.

0

MoveFirst Guard с проверкой здравомыслия, как это:

If Not rs.EOF Or Not rs.BOF Then 
    rs.MoveFirst 
End If 
+0

это не делает никакой разницы , и он вводит условие if, но показатель записи равен 0 – PUG

+0

. Моя строка критериев: «id =« SA/-AS 0N »и mp <> 'N'", а для некоторых столбцов в mdb ничего не написано для этого поля Я предполагаю, что это будет null. – PUG

1

Я также согласен, Убедитесь, что у вас есть записи первого. Вам не нужно будет rs.MoveFirst сразу с места в карьер.

If rs.RecordCount > 0 Then 

rs.Filter = strCriteria 

End If 

Также убедитесь, что столбец, который вы фильтруете, действительно существует в наборе записей.

Надеюсь, это поможет.

+0

Если не rs.EOF или не rs.BOF Затем дает -1, но если он приближается -1, но тогда, как я могу видеть значения, такие как rs! Id в окне просмотра, которые поступают правильно – PUG

+0

, как я могу видеть набор записей? – PUG

+0

Попробуйте настроить свойство CursorLocation на adUseClient в наборе записей перед тем, как открыть набор записей. – dretzlaff17

1

Если значение столбца mp равно NULL, то использование критерия фильтра mp <> 'N' приведет к удалению строки из отфильтрованного набора результатов.

В SQL используется тот же самый three-valued logic. Идея заключается в том, что mp <> NULL оценивается в UNKNOWN и результатов строка удаляется в SQL DML (но сохраняется в SQL DDL ...)

Если вы используете SQL, то вы могли бы использоваться предикат (mp <>'N' OR mp = NULL). К сожалению, ADO has a known problem, который предотвращает использование NULL в критериях свойств фильтра.

Ошибки с безумием 3VL и ошибки ADO должны привести вас к выводу, что значение NULL следует избегать. В идеале вы должны удалить NULL доступных столбцов в базе данных. В краткосрочной перспективе вы можете обеспечить, чтобы ваши представления и procs не отображали значение NULL. Вы можете использовать другое «магическое» значение, но, возможно, лучше вернуть подходящее значение домена по умолчанию. Например, это может быть так, что какое-либо значение для mp, что не N должен быть Y:

SELECT id, IIF(mp = 'N', 'N', 'Y') 
    FROM YourTable; 
0

нет необходимости делать это

rs.MoveFirst 

запись автоматически позиционируется на первой записи, если что-то найдено

Далее сделайте это

If rs.EOF=false Or rs.BOF=false Then 
' manipulate recordset here 
End If