ERLEDIGT
NEIN
NEIN
ANTWORTEN
19
19
ZUGRIFFE
931
931
EMPFEHLEN
-
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
-
02.02.10 10:04 #2
- 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ß ThomasSollte 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.
-
Ä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...
-
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
-
02.02.10 10:32 #5
- 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.
-
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)
-
02.02.10 10:53 #7
- Registriert seit
- Sep 2004
- Ort
- Möglingen (BaWü)
- Beiträge
- 3.109
Mich schon.PS Hoffe das ich euch nich verwirrt hab mit den ellenlangen codes
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 wirdSollte 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.
-
Das verstehe ich nicht wirklich..kannst du mir anhand von meinem Code vll ein Beispiel zeigen ? oder eben genauer erklären was du meinst ?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
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)
-
02.02.10 11:13 #9
- 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.
-
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"
-
02.02.10 11:36 #11
- 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.
-
Ö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..
-
02.02.10 11:53 #13
- 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:
Merkst du da was?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.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.
-
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...
-
02.02.10 12:06 #15
- 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
-
XSD: Element 'value' has both a 'type' attribute and a 'anonymous type' child.
Von DAB268 im Forum XML TechnologienAntworten: 1Letzter Beitrag: 07.01.10, 16:45 -
Hilfe beim Überprüfen eines Arrays
Von artyfical im Forum JavaAntworten: 1Letzter Beitrag: 21.01.08, 09:10 -
VisualC++, Probleme beim Zugriff auf RecordSet
Von ral im Forum Relationale DatenbanksystemeAntworten: 0Letzter Beitrag: 29.12.06, 21:25 -
beim upload auf .cfg überprüfen
Von sunstyle im Forum PHPAntworten: 2Letzter Beitrag: 04.02.03, 19:52 -
vb-dll, recordset, type mismatch fehler
Von Quentin im Forum Visual Basic 6.0Antworten: 3Letzter Beitrag: 21.05.02, 12:08





Zitieren


Login





