tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
NEIN
ANTWORTEN
19
ZUGRIFFE
931
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Naui Naui ist offline Mitglied
    Registriert seit
    Jan 2004
    Beiträge
    14
    Hi alle zusammen,

    ich stehe vor folgendem Problem:

    Ich lese eine CSV ein in der Daten stehen, stelle die Spaltenüberschriften in einem Flexgrid dar.
    danach lese ich eine Datei von einer AS400 aus.
    Mit rs.fields(x).type bekomm ich den Feldtyp herraus (200, also VarChar)
    wie bekomme ich es also nun hin das die zusätzlichen Daten, gespeichert in einem Stringarray (0 bis x) überprüft werden ob diese auch tatsächlich diesen Typ vom rs.fields(x).type einhalten ...

    steh irgendwie völlig auf dem Schlauch...bitte um Hilfe

    Gruss Naui


    Ps. Sry für den Tippfehler im Thema
     

  2. #2
    Avatar von tombe
    tombe tombe ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2004
    Ort
    Möglingen (BaWü)
    Beiträge
    3.109
    Bin zwar zeimlich aus der Übung was VB angeht, aber kannst du den Inhalt nicht mit VarType auf Richtigkeit prüfen

    Gruß Thomas
     
    Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.

    Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.

  3. #3
    Naui Naui ist offline Mitglied
    Registriert seit
    Jan 2004
    Beiträge
    14
    Ähm jaa schon also mit VarType(array) .. aber entweder steh ich vollkommen auf der Leitung oder es ist nich richtig ,
    da ich ja a) ein spezifisches array prüfen will zb das array(13) da sagt er typen unverträglich
    B) mach iche nur vartype(array) dann sagt er 0 , also empty...
     

  4. #4
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Bring mal ein wenig Code wie es bis jetzt aussieht.
    Willst du ein array prüfen? Oder die Inhalte bevor du sie in einen array schreibst? Irgendwie komm ich nicht draus
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  5. #5
    Avatar von tombe
    tombe tombe ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2004
    Ort
    Möglingen (BaWü)
    Beiträge
    3.109
    Verstehe ich jetzt nicht. Wenn ich

    Code :
    1
    2
    3
    4
    
    a = Array("feld 1", "feld 2", 3)
    MsgBox VarType(a(0))
    MsgBox VarType(a(1))
    MsgBox VarType(a(2))

    ausführe, bekomme ich die Werte 8, 8 und 3 angezeigt. 8 steht für String/Text und 3 für Ganzzahl, stimmt also.
     
    Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.

    Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.

  6. #6
    Naui Naui ist offline Mitglied
    Registriert seit
    Jan 2004
    Beiträge
    14
    Also ich lese die CSV aus

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    
    Private Sub cmdCSV_Click()
     
    Dim Data     As String
    Dim Output() As String
    Dim a        As Integer
    Dim rowcount As Integer
       
    On Error GoTo Fehler
     
    CommonDialog1.Filter = "All Files (*.*)|*.*|CSV Datei (*.csv)|*.csv|Text Datei(*.txt)|*.txt"
    CommonDialog1.FilterIndex = 2
    CommonDialog1.ShowOpen
     
    ff = FreeFile
     
    Open CommonDialog1.FileName For Input As #ff
     
        MSFlexGrid1.TextMatrix(0, 0) = "Feldname"
        MSFlexGrid1.TextMatrix(0, 1) = "Feldnr"
               
        Line Input #ff, Data
            Output = Split(Data, ";")
            rowcount = UBound(Output) + 1
            MSFlexGrid1.Rows = rowcount
        Seek 1, 1
                    
        Line Input #ff, Data
            Output = Split(Data, ";")
            For a = 0 To rowcount - 1
                MSFlexGrid1.Rows = a + 2
                MSFlexGrid1.TextMatrix(a + 1, 0) = Output(a)
                MSFlexGrid1.TextMatrix(a + 1, 1) = a
            Next a
            
    Close #ff
     
    Fehler:
        If Err.Number = 76 Then
            Exit Sub
        End If
        
        If Err <> 0 Then
            MsgBox "" & Err.Description
        Else:
            MsgBox "Datei " & CommonDialog1.FileName & " importiert"
            cmdAS.Enabled = True
            cmdAS.Caption = "Bibliothek einlesen"
        End If
     
    End Sub


    Dann lese ich die Field ausm rs in comboboxen mit
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    
    Public Sub cmdAS_Click()
     
    Dim I               As Integer
    Dim fields          As Integer
    Dim fieldcounter    As Integer
    Dim cocount         As Integer
     
    AS400Connection
     
    fields = rs.fields.Count
    cocount = MSFlexGrid1.Rows - 2
     
    On Error GoTo Fehler
     
    combox(0).Text = ""
      For I = 1 To cocount
        Load combox(I)
        With combox(I)
          .Text = ""
          .Width = 2415
          .Left = 3960
               .Visible = True
          .Top = combox(I - 1).Top + 315
        End With
      Next I
     
     I = 0
     
    Do
       Do
          Me!combox(I).AddItem rs.fields(fieldcounter).Name
          fieldcounter = fieldcounter + 1
        Loop Until fieldcounter = fields
        fieldcounter = 0
            I = I + 1
        Loop Until I = cocount + 1
        
    Do
        I = I + 1
    Loop Until I = 8
     
    Fehler:
        If Err.Number = 360 Then
            For I = 1 To cocount
                Unload combox(I)
            Next I
        cmdAS_Click
        End If
    End Sub


    un zu guter letzt Speicher ich ich die recordset field als CSV überschriften wieder ab und addiere darunter jeweils die zugehörigen Datenfelder aus der alten CSV mit

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    
    Private Sub cmdSave_Click()
     
    Dim ff              As Integer
    Dim I               As Integer
    Dim rowcount        As Integer
    Dim listcount       As Integer
    Dim listmax         As Integer
    Dim colmax          As Integer
    Dim counter1        As Integer
    Dim counter2        As Integer
    Dim outCount        As Integer
    Dim restCount       As Integer
    Dim restMax         As Integer
    Dim comboxCount     As Integer
    Dim Output()        As String
    Dim rest(0 To 2000) As Variant
     
     
    listmax = combox(0).listcount
    colmax = MSFlexGrid1.Rows - 2
     
     
     
     
    For counter1 = 0 To colmax
        For counter2 = 0 To colmax
            If combox(counter1).Text = combox(counter2).Text And Not combox(counter2).Text = "" And Not counter2 = counter1 Then
                MsgBox "Mindestens ein Eintrag wurde doppelt ausgewählt!Bitte nur einen Eintrag auswählen"
                Exit Sub
            End If
        Next counter2
    Next counter1
     
    ff = FreeFile
     
    Open CommonDialog1.FileName For Input As #ff
     
    If Not EOF(ff) Then
        Line Input #ff, Data
            Output = Split(Data, ";")
            rowcount = UBound(Output) + 1
            MSFlexGrid1.Rows = rowcount
        Seek 1, 1
    End If
     
    Do While Not EOF(ff)
        Line Input #ff, Data
        Output = Split(Data, ";")
            For outCount = 0 To rowcount - 1
                MSFlexGrid1.Rows = outCount + 2
                I = I + 1
                rest(I) = Output(outCount)
                restMax = MSFlexGrid1.Rows - 1
     
                    For restCount = 0 To restMax
                        MSFlexGrid1.TextMatrix(outCount + 1, 0) = rest(restCount)
                        MSFlexGrid1.TextMatrix(outCount + 1, 1) = restCount - 1
                    Next restCount
            Next outCount
    Loop
     
    Close #ff
      
    ff = FreeFile
     
     
     
     
    Open "C:/test.csv" For Output As #ff
     
    Do
        If listcount = listmax - 1 Then
            Print #ff, combox(0).List(listcount)
        Else:
            Print #ff, combox(0).List(listcount) + ";";
        End If
        listcount = listcount + 1
    Loop Until listcount = listmax
     
     
    For restCount = MSFlexGrid1.Rows To I Step MSFlexGrid1.Rows - 1
        listcount = 0
    Do
        Do Until comboxCount = colmax + 1
            If combox(comboxCount).Text = combox(comboxCount).List(listcount) Then
                Print #ff, rest(comboxCount + restCount);
            End If
        comboxCount = comboxCount + 1
        Loop
            
        If listcount = listmax - 1 Then
            Print #ff, ""
        Else
            Print #ff, ";";
        End If
        
        comboxCount = 0
        listcount = listcount + 1
     
    Loop Until listcount = listmax
    Next restCount
     
    Close #ff
    End Sub



    Der rest(x) ist also das Array mit den Datenfeldern aus der alten CSV ... wenn ich nun in die neue csv speicher will ich das er prüft ob das array rest(x) auch zugelassen wird von dem jeweiligen rs.fields(x).type ...


    PS Hoffe das ich euch nich verwirrt hab mit den ellenlangen codes
    Geändert von Naui (02.02.10 um 10:35 Uhr)
     

  7. #7
    Avatar von tombe
    tombe tombe ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2004
    Ort
    Möglingen (BaWü)
    Beiträge
    3.109
    PS Hoffe das ich euch nich verwirrt hab mit den ellenlangen codes
    Mich schon.

    Aber mal was anderes.
    Du speicherst den Datensatz aus der CSV Datei im Array "rest", dieses Array ist aber eindimensional. Wäre es nicht besser du würdest einen eigenen Datentyp erstellen der den Aufbau hat wie die Angaben aus der CSV Datei kommen
    Und wo ist in deinem Quellcode der Teil wo das Array überprüft wird
     
    Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.

    Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.

  8. #8
    Naui Naui ist offline Mitglied
    Registriert seit
    Jan 2004
    Beiträge
    14
    Du speicherst den Datensatz aus der CSV Datei im Array "rest", dieses Array ist aber eindimensional. Wäre es nicht besser du würdest einen eigenen Datentyp erstellen der den Aufbau hat wie die Angaben aus der CSV Datei kommen
    Das verstehe ich nicht wirklich..kannst du mir anhand von meinem Code vll ein Beispiel zeigen ? oder eben genauer erklären was du meinst ?

    Zum anderen, hatte ich vergessen aber da es nich wirklich funktioniert .. naja hier aufjedenfall wie ich es gedacht hatte

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    Private Sub Command2_Click()
     
    AS400Connection
     
     Dim vt As VbVarType
     
    Label(0).Caption = VarType(rest)
      If rs.fields(0).type= VarType(rest) Then
      MsgBox "Geht!"
    End If
    End Sub


    Habs halt noch nicht in das eigentliche abspeichern eingefügt, da ich es erst testen will....
    Geändert von Naui (02.02.10 um 11:05 Uhr)
     

  9. #9
    Avatar von tombe
    tombe tombe ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2004
    Ort
    Möglingen (BaWü)
    Beiträge
    3.109
    Also ich kenne ja die Daten nicht die aus der CSV Datei kommen, aber nehmen wir mal an es ist eine Artikelliste:

    Artikelnummer, Bezeichnung1, Bezeichnung2, VK_Preis, EK_Preis, Lieferantennummer

    Dann enthält dein Array:

    Code :
    1
    2
    3
    4
    5
    6
    
    rest(0) = 12345 (Artikelnummer)
    rest(1) = bla bla bla (Bezeichnung1)
    rest(2) = noch mehr bla (Bezeichnung2)
    rest(3) = 5,50 (VK Preis)
    rest(4) = 1,80 (EK Preis)
    rest(5) = 99999 (Lieferantennummer)

    Wenn du einen eigenen Datentyp erstellst

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    
    Type Daten
      art_nummer As String
      bez1 As String
      bez2 As String
      vk As Single
      ek As Single
      lieferant As String
    End Type

    dann wäre irgendwie deutlicher welcher Wert wohin gespeichert wird und bei der Zuweisung könntest du dann immer gleich prüfen ob der Wert der übergeben wird auch den entsprechenden Typ hat.


    Code :
    1
    
    If rs.fields(0).type= VarType(rest) Then MsgBox "Geht!"End If

    So müsste es gehen:

    Code :
    1
    
    IF rs.fields(0).type = VarType(rest(123)) then MsgBox "Geht!"
    Geändert von tombe (02.02.10 um 11:15 Uhr)
     
    Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.

    Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.

  10. #10
    Naui Naui ist offline Mitglied
    Registriert seit
    Jan 2004
    Beiträge
    14
    Hm Okay, ist aber rein theoretisch nicht egal das ich rest sowieso als string deklariert habe ? oder macht das einen unterschied ?

    So und zu dem anderen...wenn ich
    Code :
    1
    
    IF rs.fields(0).type = VarType(rest(123)) then MsgBox "Geht!"

    schreibe...kommt der Fehler 13 "Typen unverträglich"
     

  11. #11
    Avatar von tombe
    tombe tombe ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2004
    Ort
    Möglingen (BaWü)
    Beiträge
    3.109
    Code :
    1
    2
    3
    4
    5
    6
    
    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 :
    1
    
    If "aaa" = VarType(rest(3)) Then MsgBox "Geht!"
    Geändert von tombe (02.02.10 um 11:39 Uhr)
     
    Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.

    Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.

  12. #12
    Naui Naui ist offline Mitglied
    Registriert seit
    Jan 2004
    Beiträge
    14
    Ö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..
     

  13. #13
    Avatar von tombe
    tombe tombe ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2004
    Ort
    Möglingen (BaWü)
    Beiträge
    3.109
    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?
     
    Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.

    Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.

  14. #14
    Naui Naui ist offline Mitglied
    Registriert seit
    Jan 2004
    Beiträge
    14
    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...
     

  15. #15
    Avatar von tombe
    tombe tombe ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2004
    Ort
    Möglingen (BaWü)
    Beiträge
    3.109
    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 :
    1
    
    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.
    Geändert von tombe (02.02.10 um 12:13 Uhr)
     
    Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.

    Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.

Ähnliche Themen

  1. Antworten: 1
    Letzter Beitrag: 07.01.10, 16:45
  2. Hilfe beim Überprüfen eines Arrays
    Von artyfical im Forum Java
    Antworten: 1
    Letzter Beitrag: 21.01.08, 09:10
  3. VisualC++, Probleme beim Zugriff auf RecordSet
    Von ral im Forum Relationale Datenbanksysteme
    Antworten: 0
    Letzter Beitrag: 29.12.06, 21:25
  4. beim upload auf .cfg überprüfen
    Von sunstyle im Forum PHP
    Antworten: 2
    Letzter Beitrag: 04.02.03, 19:52
  5. vb-dll, recordset, type mismatch fehler
    Von Quentin im Forum Visual Basic 6.0
    Antworten: 3
    Letzter Beitrag: 21.05.02, 12:08