2009-06-16 4 views
1

Original-:So finden Sie Record Set Wert ist Nummer oder String?

VB6

Wenn rsCardEvent (4) .Value = Str Dann timout = rsCardEvent (4) Else TimeOut = Left (timout, 2) & ":" & Mid (timout, 3, 2) & ":" & Right (timout, 2) End If

Type Mismatch Fehler. Wie Record Set-Wert zu finden ist String oder Nummer

genau muss ich

Wenn Anzahl Druckzahl wie Time Format bedeutet (HH: MM: SS) sonst Druckzeichenfolge Wert

Coding-Hilfe die obige Bedingung


Edited Version:

Ich arbeite mit einem ADO.Recordset Objekt und versuche, den Datentyp einer Spalte zur Laufzeit zu bestimmen. Ich muss den Spaltenwert in meinem Code abhängig vom zugrunde liegenden Datentyp unterschiedlich behandeln. Wenn der Spaltenwert eine Zeichenfolge ist, möchte ich mit dem Wert arbeiten, wie er ist. Wenn es sich um eine Zahl handelt, möchte ich die Zahl als gepackte Zeit behandeln und in das Format HH:MM:SS konvertieren (d. H., Die Zahl 120537 würde in die Zeichenfolge "12:05:37" umgewandelt).

Unten ist ein Beispielcode, der zeigt, was ich erreichen möchte. Allerdings, wenn ich diesen Code ausführen bekomme ich einen "Type Mismatch" Fehler:

If rsCardEvent(4).Value = Str Then 
    TimOut = rsCardEvent(4) 
Else 
    TimeOut = Left(TimOut, 2) & ":" & Mid(TimOut, 3, 2) & ":" & Right(TimOut, 2) 
End If 
+0

Es wäre interessant, den Typ von TimOut (Zeichenfolge?) Und den Typ der Spalte in Ihrer Abfrage zu kennen. Können Sie den SQL und auch den zugrunde liegenden Typ in die Datenbank des Feldes eintragen, das Sie gerade lesen?(Wenn es nur ein Feld ist) – MarkJ

+0

Ich fügte eine umformulierte Version der Frage hinzu, behielt aber das Original für den Fall, dass meine bearbeitete Version nicht der ursprünglichen Absicht des Autors entspricht. @Jash, wenn du zustimmst, dass die bearbeitete Version Übereinstimmungen haben möchtest, die du sagen möchtest und nichts dagegen hat, dass ich diese Änderung mache, kann ich das Original entfernen und die bearbeitete Version behalten. –

+0

Ich bin ein wenig verwirrt, wie Sie wirklich verschiedene Datentypen in rsCardEvent (4) bekommen können. Führen Sie manchmal eine andere Abfrage aus? Oder ist das zugrunde liegende Feld ein Variantenfeld? Auch der Else-Zweig von If ignoriert rsCardEvent komplett, was komisch aussieht. – MarkJ

Antwort

0

Wie wäre:

If TypeName(rsCardEvent(4).Value) = "String" then 

http://msdn.microsoft.com/en-us/library/5422sfdf.aspx

+0

Wenn TypeOf rsCardEvent (4) .Value ist String dann - akzeptiert nicht Showing Error in "TypeOf" und "is String" –

+0

Ja, TypeOf funktioniert nur mit Objekten, aber haben Sie versucht TypeName wie Jack vorgeschlagen? – MarkJ

1

Basierend auf this article, wenn rsCardEvent ein ADO-Cord, können Sie überprüfen die Type Eigenschaft . So etwas wie dieses:

Select Case rsCardEvent(4).Type 
     Case adBSTR, adChar, adVarChar, adWChar, _ 
      adVarWChar, adLongVarChar, adLongVarWChar 
      ' It is a string ' 
     Case Else 
      ' It is not a string ' 
    End Select