Das Feld ist zu klein für die Datenmenge

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

habe ich ein Feld im FlexGrid zu klein ?

mfg jonny ?

n= 10000 ? wer kann hier nicht mehr als 10000 ? Data1 ?
,

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

Hallo Joe,

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?

MfG Alex

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

Hmm,

Probiere mal folgendes

Data1.Recordset.MoveFirst
Data1.Recordset.Edit
Data1.Recordset("Mode") = "10001" 
Data1.Recordset.Update
Data1.Refresh

Geht das ? Wenn Ja dann liegt es net an der Zuweisung :wink:

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 :smile:

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 ?

MfG Alex

Data1.Recordset(„Mode“) = „10001“
Geht das ? Wenn Ja dann liegt es net an der Zuweisung :wink:

Geht nicht :confused: 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 :smile:

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.

Hallo Joe,

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 )

Hallo Joe,

und was sagt die Fehlermeldung?

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 )

Sooo.
Mode:
Size = 4
Type = 10

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 ?

mfg jonny

Hallo Joe,

führe mal folgenden Source aus

 MsgBox Data1.Recordset.Fields("Mode").Size
 MsgBox Data1.Recordset.Fields("Mode").Type

Schreib die 2 zeilen irgendwo in dein Proggi. Am besten direkt ueber die Schleife!
was sagen denn die Msgboxen aus ?

MfG Alex

Sodele,

somit haetten wir den Fehler schon einmal gefunden :wink:
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 :wink:

Welche Version haettest du denn gern?

MfG Alex

Argh… bin dicht dran… Theoretisch sollte es so aussehen aber es müsste reichen es der ganzen spalte zu sagen und nicht jedem datensatz.

Data1.Recordset(„Mode“).Size = 6

Sodele,

somit haetten wir den Fehler schon einmal gefunden :wink:
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.

mfg jonny

Hallo Joe,

ich habe gerade mal geschaut und bekomme es ohne weiteres nicht hin. Diese Eigenschaft ist Schreibgeschuetzt :frowning:
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 :wink:

'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 :wink:
Das schoene daran ist, Die Datenbank muss nicht geaendert werden :smile:

MfG Alex

Besten Dank !!
es läuft wieder.
wie kann ich da je, wieder gut machen OO
bist nicht zufällig bei" rock am ring " :smile:

mfg jonny