Hallo,
Ich lese wie Folgt ein DBF File ein, und bekomme aber seit heute eine Fehlermeldung: Das Feld ist zu klein für die Datenmenge,die sie hinzufügen wollten,Versuchen sie weniger Daten einzufügen.
Data1.Recordset.MoveFirst
While Data1.Recordset.EOF = False
Data1.Recordset.Edit
Data1.Recordset("Mode") = CStr(n)'Hier zeigt der Debugger hin
Data1.Recordset.Update
n = n + 1
Data1.Recordset.MoveNext
Wend
Data1.Refresh
Hallo,
Ich lese wie Folgt ein DBF File ein, und bekomme aber seit
heute eine Fehlermeldung: Das Feld ist zu klein für die
Datenmenge,die sie hinzufügen wollten,Versuchen sie weniger
Daten einzufügen.
Data1.Recordset.MoveFirst
While Data1.Recordset.EOF = False
Data1.Recordset.Edit
Data1.Recordset(„Mode“) = CStr(n)'Hier zeigt der
Debugger hin
Data1.Recordset.Update
n = n + 1
Data1.Recordset.MoveNext
Wend
Data1.Refresh
Welchen Datentyp hat denn das Feld „Mode“ und welchen Wert hat n, bei dem das Proggi rumspackert ?
habe ich ein Feld im FlexGrid zu klein ?
Wieso Flexgrid? Mit dem Source aenderst du nur einen Datensatz in der DB!
mfg jonny ?
PS: Haben dich meine Mail’s errreicht und wenn ja hast du mal die Function getestet?
Hi,
hatte die Antwort schon fertig zu deiner Funktion, muss aber vergessen haben sie abzuschicken … ich nap!!
also N = 10000…
sorry. das mit dem flexgrid war natürlich falsch. das läuft ja alles über data1. ich schaue gerade wie ich sehe was MOde für nen typ ist
Musste mich erstmal wieder reinlesen…
Also es wird in der Spalte Mode der Inhalt duch einen vortlaufenden Wert ersetzt, durch N. nur leider ist bei 10000 schluss also letzter eintrag n = 10000. ich habe aber 10030 datensätze .
Warum ist bei 10000 schluss ?:, In Mode steht vorher immer kurz.
Data1.Recordset.MoveFirst
While Data1.Recordset.EOF = False
Data1.Recordset.Edit
Data1.Recordset(„Mode“) = CStr(n)
Data1.Recordset.Update
n = n + 1
Data1.Recordset.MoveNext
Wend
Data1.Refresh
Geht das ? Wenn Ja dann liegt es net an der Zuweisung
Warum ist bei 10000 schluss ?:, In Mode steht vorher immer
kurz.
Normal muesste das Datenfeld als String declariert sein. Dort kann man auch die max. Länge angeben. Kann es vlt. sein das die max. Länge des Strings auf 4 begrenzt ist? Schaue da mal nach
Alternativ, bastel wiefolgt um
on error goto ErrHandler
Data1.Recordset.MoveFirst
While Data1.Recordset.EOF = False
Data1.Recordset.Edit
Data1.Recordset("Mode") = CStr(n)
Data1.Recordset.Update
n = n + 1
Data1.Recordset.MoveNext
Wend
Data1.Refresh
exit sub/function ' je nachdem obs ne sub oder function ist
ErrHandler:
msgbox err.description
Data1.Recordset(„Mode“) = „10001“
Geht das ? Wenn Ja dann liegt es net an der Zuweisung
Geht nicht 9999 geht. aber 10001 nicht.
Normal muesste das Datenfeld als String declariert sein. Dort
kann man auch die max. Länge angeben. Kann es vlt. sein das
die max. Länge des Strings auf 4 begrenzt ist? Schaue da mal
nach
Ich lade die dbf datei in Data1, aber wo sehe ich die declaration des Datenfeldes ? OO.
Alternativ, bastel wiefolgt um
on error goto ErrHandler
Data1.Recordset.MoveFirst
While Data1.Recordset.EOF = False
Data1.Recordset.Edit
Data1.Recordset(„Mode“) = CStr(n)
Data1.Recordset.Update
n = n + 1
Data1.Recordset.MoveNext
Wend
Data1.Refresh
exit sub/function ’ je nachdem obs ne sub oder function
ist
ErrHandler:
msgbox err.description
Was sagt denn die Msgbox aus ?
gleiche Fehlermeldung. nur ohne angebot den Debugger zu starten.
und was sagt die Fehlermeldung?
Ich schmeiss ma VB an und schaue mal ob ich da auf die schnelle ne Lösung finde. Alternativ klicke mal in VB auf AddIns -> Datenmanager. Lade dort mal deine DB. Und schaue mal. Irgendwo da solltest du das sehen!
MfG Alex, der sich glei nochma meldet (nur noch fix ne mail schreiben und dann testen )
Das Feld ist zu klein für die Datenmenge, die sie hinzufügen möchten.Versuchen sie weniger daten einzufügen
Ich schmeiss ma VB an und schaue mal ob ich da auf die
schnelle ne Lösung finde. Alternativ klicke mal in VB auf
AddIns -> Datenmanager. Lade dort mal deine DB. Und schaue
mal. Irgendwo da solltest du das sehen!
mache ich gerade .
MfG Alex, der sich glei nochma meldet (nur noch fix ne mail
schreiben und dann testen )
das passt dort steht „kurz“ drin und es sollen bei 10000 5 Zeichen rein. wir haben aber nur Size 4.
Wie kann ich das beim laden der Datenbank ändern ?
Mode.Size = 5 ?
somit haetten wir den Fehler schon einmal gefunden
Der Typ 10 besagt das es sich um eine zeichenfolge handelt!
Die 4 sagt wie du richtig vermutet hast aus, das es max. 4 zeichen sein dürfen! 10000 sind aber 5! Ergo geht das nicht.
Es stehen uns nun 2 Möglichkeiten zur Verfügung!
Wir aendern das Feld in der Grösse auf 5! Wie das geht mueste ich schauen und mal testen. Alternativ kann man mit nen bissl tricksen. jede LongZahl in einen String umwandeln. Der String dagegen ist dann max. 4 Zeichen lang!
Diese Version nutze ich uebrigens in der Server / Client Anwendung
somit haetten wir den Fehler schon einmal gefunden
Der Typ 10 besagt das es sich um eine zeichenfolge handelt!
Die 4 sagt wie du richtig vermutet hast aus, das es max. 4
zeichen sein dürfen! 10000 sind aber 5! Ergo geht das nicht.
Data1.Recordset.Fields(„Mode“).Size = 5 ?
ich teste… kein bock mehr auf diesen müll.
ich habe gerade mal geschaut und bekomme es ohne weiteres nicht hin. Diese Eigenschaft ist Schreibgeschuetzt
Wir muessten ergo eine neue Tabelle anlegen, mit den Feldern und dann jeden Datensatz in die neue Tabelle kopieren. Danach die alte Tabelle löschen und dann die neue dementsprechend umbenennen. Aber das ist nen heidenAufwand.
Was haelst du Alternativ von der Variante
'Zahl in ein String umwandeln
private Function DecimalToString(ByVal Number As Long) As String
Dim r As Long
Do While Number \> 255
r = Number Mod 256
Number = Number \ 256
DecimalToString = Chr$(r) & DecimalToString
Loop
DecimalToString = Chr$(Number) & DecimalToString
End Function
'String in eine Zahl umwandeln
private Function StringToDecimal(ByVal Number As String) As Long
Dim i As Long, n As Long
n = Len(Number)
For i = n To 1 Step -1
StringToDecimal = StringToDecimal + 256 ^ (n - i) \* Asc(Mid$(Number, i, 1))
Next i
End Function
'zum schreiben der Daten, dann wiefolgt
Data1.Recordset.MoveFirst
While Data1.Recordset.EOF = False
Data1.Recordset.Edit
Data1.Recordset("Mode") = DecimalToString(clng(n))
Data1.Recordset.Update
n = n + 1
Data1.Recordset.MoveNext
Wend
Data1.Refresh
'zum lesen der Daten dann wiefolgt
Dim X as Long
x=StringToDecimal(Data1.Recordset("Mode"))
Ist schlicht und tut seinen Dienst Anstandslos
Das schoene daran ist, Die Datenbank muss nicht geaendert werden