Recordset Type beim Einspeichern überprüfen

Code:
Dim rest(0 To 10) As String
rest(0) = "bli"
rest(1) = "bla"
rest(2) = "blubb"
rest(3) = 122
If rs.Fields(0).Type = VarType(rest(3)) Then MsgBox "Geht!"

Habe ich hier bei mir gerade getestet und es geht ohne Fehler. Vielleicht hast du an einer anderen Stelle den Bug drin und es hat damit gar nichts zu tun!!

Deinen Fehler erhalte ich wenn ich folgendes mache:

Code:
If "aaa" = VarType(rest(3)) Then MsgBox "Geht!"
 
Zuletzt bearbeitet:
Öhm okay war mein Fehler...muss rest naturlich im selben Sub füllen...

nur hab ich das Problem das ich bei rest(1) zb ein "B" habe..welches dann Typ 8200 ist, aber das rs.field ist es 200..
 
Stimmt ja auch. Man muß nur darauf kommen warum es so ist:
vbArray = 8192
vbInteger = 2
VbString = 8

Nur um ein paar zu nennen.

Ist jetzt zwar die Hilfe von Excel aber das macht nichts:
Die VarType-Funktion gibt niemals den Wert für vbArray alleine zurück. Der Wert wird immer zu einem anderen Wert addiert, um ein Datenfeld eines bestimmten Typs anzugeben. Die Konstante vbVariant wird nur in Verbindung mit vbArray zurückgegeben, um anzuzeigen, daß das Argument für die VarType-Funktion ein Datenfeld vom Typ Variant ist. Zum Beispiel wird der Wert, der für ein Datenfeld aus Ganzzahlen zurückgegeben wird, durch vbInteger + vbArray (8194) angegeben.

Merkst du da was?
 
Hm ja okay, also gibt der mir den Wert vbString zurück so gesehen also 8 .. aber wie prüfe ich denn dann das das rs.field eben das aufnehmen kann :( tut mir leid bin halt noch ziemlicher anfänger...
 
Was komisch ist, bei mir interessiert das Array nicht. Ich bekomme bei einem String den Wert 8 zurück. Allerdings habe ich kein VB hier sondern mache das in Excel.
Du kannst aber den Wert des Arrays (8192) beim Verlgeichen einfach abziehen:

Code:
If rs.Fields(0).Type = VarType(rest(3)) - 8192 Then MsgBox "Geht!"

Nachtrag:
Was ich gerade noch gefunden habe ist TypeName. Hiermit erhältst du dann keinen numerischen wert zurück sondern Integer, String, ...
Versuche es doch mal damit, vielleicht ist es dann einfacher.
 
Zuletzt bearbeitet:
Ja gut...aber mein rs.fields(0).type ist 200 bzw VarChar, kann ich ein Datenfeld mit "b" also nicht dort reinspeichern ?!
 
Mit welcher Datenbank arbeitest du?
Eventuell sind die Datentypen nicht identisch. Dann müßtest du dir die Mühe machen und die Felder der Datenbank bzw. die Rückgabewerte einmal prüfen und kannst dann die entsprechenden IF Abfragen erstellen.

Code:
IF (rs.fields(0).type = 100 OR rs.fields(0).type = 200 OR rs.fields(0).type = 8200) AND VarType(rest(0)) = 8 THEN
...
...
END IF
 
Ahhh okay vielen vielen dank das ist des rätsels lösung!

Um das ganze dynamisch zu machen müsste ich also jeden Datenbanktyp , dem zugehörigen VB Element zuordnen oder ?

Sprich also

Code:
If  rs.fields(x).type = 200 OR rs.fields(x).type = 100 OR rs.fields(x).type = 8200 then
ArrElement=8
if rs.fields(x).type = xy then
arrElement=YZ

usw....richitg ?
 
Code:
If  rs.fields(x).type = 200 OR rs.fields(x).type = 100 OR rs.fields(x).type = 8200 then
ArrElement=8
if rs.fields(x).type = xy then
arrElement=YZ

Richtig. Nur fehlt bei den IF Abfragen das END IF und der Vergleich mit dem Wert aus der CSV Datei


Code:
IF  (rs.fields(x).type = 200 OR rs.fields(x).type = 100 OR rs.fields(x).type = 8200) AND VarType(rest(xy)) = 8 THEN
  ArrElement=8 'Oder ist das hier die Prüfung?
END IF




Das wäre aber auch noch ein Grund mehr einen eigenen Datentyp zu verwenden. Wenn du irgendwann mal was ändern willst, dann mußt du immer wissen ob jetzt rest(2), rest(25), rest(98) oder rest(122) das Feld ist welches verändert werden muß.
 
Zurück