2010-11-02 23 views
0

J'utilise VB6 et en essayant de lire un fichier mdb dans unproblème dans la lecture du fichier sous forme de mdb de données dans VB6

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

mes critères string « id = « SA/-AS 0N » Et PF <> « N » », il y a un enregistrement de la table qui est id mentionnées ci-dessus et sa colonne mp n'est pas N. mais quand le

rs.MoveFirst 

dans la fenêtre de la montre que je peux voir les valeurs de la première colonne. mais quand ci-dessous fonctionne, l'en-tête indique

rs.Filter = sCriteria 

« : Valeur BOF ou EOF est vrai, ou l'enregistrement en cours a été supprimé opération demandée nécessite un enregistrement en cours>:.. » Appréciez l'aide ur.

Répondre

0

ok le problème était 2 fois onedaywhen commentaire utile mais le problème était,

1- la Le fichier mdb avait un type de données usé qui était NUMBER, de sorte que chaque valeur nulle dans la ligne provoquait l'enregistrement à EOF. J'ai donc mis le type de données à TEXT.

2 TROUVER LE NULL DANS LE SET RECORD JE FAIS A

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

Ensuite je vérifie cette colonne si ce n'est pas nulle,

If IsNull(dataSet!col1) Then 

Si trouvé le nul i utilise le 'sCriteria = id =' NW 'sinon j'utilise id =' NW 'Et mp >' N '.

fonctionne très bien. Le Null causait le problème comme indiqué.

0

Garde MoveFirst avec un chèque de santé mentale comme ceci:

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

ce ne fait aucune différence . et il entre dans la condition if, mais l'enregistrement est 0 – PUG

+0

ma chaîne de critères est: "id = 'SA/-AS 0N' Et mp <> 'N'" et pour certaines colonnes dans mdb il n'y a rien d'écrit pour ce champ Je suppose que ce serait nul. – PUG

1

Je suis d'accord aussi, assurez-vous que vous avez des enregistrements en premier. Vous ne devriez pas avoir besoin de rs.MoveFirst dès le départ.

If rs.RecordCount > 0 Then 

rs.Filter = strCriteria 

End If 

Vérifiez également que la colonne que vous filtrez existe réellement dans le jeu d'enregistrements.

Espérons que cela aide.

+0

If Not rs.EOF Ou Not rs.BOF Puis donne -1, mais si elle arrive -1 mais alors comment je peux voir les valeurs comme rs! Id dans la fenêtre de la montre qui viennent correctement – PUG

+0

comment puis-je voir le jeu d'enregistrements? – PUG

+0

Essayez de définir la propriété CursorLocation à adUseClient sur le jeu d'enregistrements avant d'ouvrir le jeu d'enregistrements. – dretzlaff17

1

Si la valeur de la colonne mp est NULL, l'utilisation du critère de filtre mp <> 'N' entraînera la suppression de la ligne du jeu de résultats filtré. SQL utilise le même SQL utilise . L'idée est que mp <> NULL évalué à UNKNOWN et les résultats est la ligne en cours de suppression dans SQL DML (mais conservés dans SQL ... LDD)

Si vous utilisez SQL, vous pouvez alors utiliser le prédicat (mp <>'N' OR mp = NULL). Malheureusement, ADO has a known problem qui empêche l'utilisation de NULL dans les critères de propriété de filtre.

La folie de 3VL et les bogues d'ADO devraient vous mener à la conclusion que la valeur NULL devrait être évitée. Idéalement, vous devez supprimer les colonnes NULL dans la base de données. À court terme, vous pouvez vous assurer que vos vues et procs n'exposent pas la valeur NULL. Vous pouvez utiliser une autre valeur littérale «magique», mais il est peut-être préférable de renvoyer une valeur de domaine par défaut appropriée. Par exemple, il pourrait être le cas que toute valeur pour mp qui ne N doit être Y:

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

il n'y a pas besoin de le faire

rs.MoveFirst 

l'enregistrement est la position automatiquement sur le premier enregistrement si quelque chose se trouve

Suivant Pour ce faire,

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