| |
Visual-Basic EinsteigerAccess Autowert | | | Autor: guenni255 | Datum: 18.06.16 16:45 |
| Hallo Forum
Ich habe ein Problem mit einer Access Datenbank Tabelle in die ich Daten per VB eingebe.
Ich habe folgenden Code zur Speicherung von Daten aus x-beliebigen Formularen in einer Datenbank Tabelle geschrieben.
Public Sub Forminhaltspeichern()
strDSQ = "SELECT * FROM " & WTA 'WTA = Tabellenname in Access
Set rsDat = DB.OpenRecordset(strDSQ, dbOpenDynaset)
With rsDat
.AddNew
For Each Halter In Screen.ActiveForm
If TypeOf Halter Is TextBox Then
If Halter.Text = "" Then Halter.Text = Halter.ToolTipText
If .Fields(Halter.Index).Type = 10 Or .Fields(Halter.Index).Type = _
12 Then .Fields(Halter.Index) = Halter.Text
If .Fields(Halter.Index).Type = 8 Then
If Halter.Text <> Halter.ToolTipText Then
.Fields(Halter.Index) = CDate(Halter.Text)
Else
.Fields(Halter.Index) = CDate("0")
End If
End If
If .Fields(Halter.Index).Type = 5 Then
If Halter.Text <> Halter.ToolTipText Then
.Fields(Halter.Index) = CCur(Halter.Text)
Else
.Fields(Halter.Index) = CCur("0")
End If
End If
End If
If TypeOf Halter Is CheckBox Then
If Halter.Value = 1 Then .Fields(Halter.Index) = True Else .Fields( _
Halter.Index) = False
End If
Next
.Update
.Close
End With
Set rsDat = Nothing
End Sub Das klappt auch soweit ganz gut
Nur jetzt hab ich das Problem das bei einer neuen Tabelle der Autowert des Datensatzzählers bei 0 und nicht bei 1 beginnt.
dadurch kommt es zu der Fehlermeldung das das eintragen nicht möglich ist da sonst doppelter Datensatz.
Ich verstehe nicht warum.
bei anderen Tabellen der gleichen DB klappt alle wunderbar.
liegt der Fehler nun in meinem Code oder in Access ? Kann man da den Startwert eines autowertes einstellen??
Kann mir bitte jemand helfen??
Vielen Dank im Voraus
Günni | |
Re: Access Autowert | | | Autor: Blackbox | Datum: 19.06.16 18:16 |
| Hallo,
du solltest keine Abfrage machen wenn Du neue Datensätze hinzufügst, sondern ein SQL-Insert Befehl verwenden und diesen mit DB.Execute in die DB posten. Klar ist ID 0 wenn noch kein Datensatz in der Tabelle ist. Die AutoIncrement-Value beginnt aber ganz sicher mit 1, wenn der erste Datensatz in der neuen Tabelle angekommen ist. | |
Re: Access Autowert | | | Autor: Franki | Datum: 20.06.16 03:15 |
| Hallo Günni,
neben dem Hinweis von Blackbox noch folgende Anmerkung:
Es funktioniert zwar auch mit einem Select, aber nicht so wie du das machst. Du hast:
.addNew ' 1 neuer Datensatz
For Each Halter In Screen.ActiveForm
' Mit dieser Schleife könnten mehrere Treffer aus deinem Formular
' gefunden werden aber nicht in einen Datensatz
' geschrieben werden.
Next
.Update
.Close
' Alternativ dazu müsstest du so vorgehen.
For Each Halter In Screen.ActiveForm
.addNew
' Also für jeden Treffer im Formular ein neuer Datensatz
.Update
Next
.Close Wie Blackbox schon sagte, fängt der Autowert auch bei neuen, also noch leeren Tabellen immer mit 1 an. Hast du vielleicht vergessen ein entsprechendes Feld zu erstellen? Standardmässig hat die Spalte den Namen ID.
Gruß
Frank | |
Re: Access Autowert | | | Autor: Franki | Datum: 20.06.16 03:19 |
| Hallo Blackbox,
na ja, das funktioniert auch mit vorheriger Abfrage. Denn oft ist es notwendig vorher zu prüfen, ob es einen entsprechenden Datensatz bzw. Teil davon schon gibt oder nicht. Nur wenn es ihn nicht gibt --> eintragen wenn es ihn gibt, dann halt nicht eintragen, bzw. dem User Informationen geben oder ihn zur Änderung seiner Eingaben im Formular auffordern.
Sonst hätten hier z.B. zig Leute den gleichen Nickname im Forum wenn das nicht geprüft würde.
Gruß
Frank | |
Re: Access Autowert | | | Autor: guenni255 | Datum: 20.06.16 07:22 |
| Hallo Blackbox Hallo Franki
Vielen Dank für euren schnellen Antworten.
vorweg muss ich sagen das ich noch Anfänger bin. Ich aber schon einige kleine Programme zum Laufen bekommen habe. Wahrscheinlich nicht ganz korrekt wie die Profis doch ich mache es auch nur für mich und zum Spaß.
Nun zu Franki.
Ich sagte ja, nicht ganz korrekt aber es funktionierte bisher immer wie ich es wollte.
bei deiner Alternativen Lösung meine ich zu erkennen das die schleife dann für jedes Control auf dem Form einen eigenen Datensatz schreibt.
Das ist nicht gewollt
es sollen alle control Inhalte des Form in einen DS. Daher das Update erst wenn alles contolinhalte in die entsprechenden Datensatzfelder eingefügt wurden.
Ich habe natürlich auch ein eigenes Feld für den Autowert ("ID") in der Tabelle.
ich habe bei der Betrachtung der Tabelle mit Daten den Verdacht ich beeinflusse den Internen Zähler für den Autowert mit meinem Code, Ich weiß nicht wie ABER:
gestalte ich die Tabelle in Access und fülle sie dort mit daten läuft alles gut
füge ich dann eine DS mit VB hinzu beginnt der Zähler bei Null, trägt auch eine 0 ins Feld ein.
Aber eben nur bei dieser einen Tabelle. Ich benutze das Modul zum Speichern bei mehreren Tabellen der Datenbank und da klappt alles einwandfrei.
Kannst du mir bitte ein Beispiel für die Insert und Execute Variante geben? Würde das dann mal ausprobieren.
Nur verstehen tue ich es nicht.
Danke im Voraus
Günni | |
Re: Access Autowert | | | Autor: Franki | Datum: 21.06.16 02:00 |
| Hallo Günni,
Zitat: | |
es sollen alle control Inhalte des Form in einen DS. Daher
das Update erst wenn alles contolinhalte in die
entsprechenden Datensatzfelder eingefügt wurden. | |
Ok, verstanden jetzt wo du es sagst.
Zitat: | |
Ich habe natürlich auch ein eigenes Feld für den Autowert
("ID") in der Tabelle.
ich habe bei der Betrachtung der Tabelle mit Daten den
Verdacht ich beeinflusse den Internen Zähler für den Autowert
mit meinem Code, Ich weiß nicht wie ABER:
| |
lass dir doch einfach in der Schleife jeden Wert den du in die DB schreiben möchtest mal per Debug.Print im Direktfenster ausgeben nach dem er im Code fest steht, also vor dem Update des RS.
Zitat: | |
gestalte ich die Tabelle in Access und fülle sie dort mit
daten läuft alles gut
füge ich dann eine DS mit VB hinzu beginnt der Zähler bei
Null, trägt auch eine 0 ins Feld ein.
| |
So kann das ja nicht sein, denn wenn schon Daten in der Tabelle stehen, steht der Zähler z.B. bei xxx. Und neu beginnen tut der Zähler sowie so nicht. Ich vermute, dass dein Code gezielt in das Autowert Feld eine 0 schreiben möchte.
Oder was auch bei ADO/DAO passieren kann: Wenn beim Update etwas schief läuft weil z.B. ein Feldtyp nicht stimmt kann es dazu kommen, dass der DS zwar angelegt wird aber trotzdem keine Daten geschrieben werden. Da kommt die DB dann durcheinander. Aber auch das kannst du analysieren, indem du dir vor dem Schreiben in die DB die Felder anzeigen lässt. Oder auch Schrittweise aufbauen bis der Fehler auftritt.
Zitat: | |
Aber eben nur bei dieser einen Tabelle. Ich benutze das Modul
zum Speichern bei mehreren Tabellen der Datenbank und da
klappt alles einwandfrei.
| |
Quick an dirty: Einfach mal Tabelle löschen und neu anlegen, vielleicht klappt es ja dann. Normalerweise sollte es keine Probleme mit dem Autowert geben. Erst wenn die DB an ihre Kapazitätsgrenze kommt sind mir solche Sachen bekannt, aber auch da nicht, dass da eine 0 geschrieben werden soll bzw. wird.
Zitat: | |
Kannst du mir bitte ein Beispiel für die Insert und Execute
Variante geben? Würde das dann mal ausprobieren.
Nur verstehen tue ich es nicht.
| |
Könnte ich, würde dir aber momentan nicht helfen, denn es würde das selbe Problem ergeben, evtl. mit einer anderen Fehlermeldung. Der Autowert den ja die DB selbst vergibt ist völlig unabhängig davon wie die Daten in die Tabelle der DB kommen. Bei deinem Code hast du mehr Kontrollmöglichkeiten wie oben schon beschrieben.
Also gehe mal auf Fehleranalyse mit Testdaten. Anstatt Schleife z.B. mal gezielt einen Wert rein schreiben, wenn das klappt den zweiten dazu usw. Dann merkst du schon wahrscheinlich sehr schnell woran es hängt.
Gruß
Frank | |
Re: Access Autowert | | | Autor: guenni255 | Datum: 21.06.16 19:00 |
| Hallo Frank
Danke für deine umfangreiche Erklärung
Einen teil davon habe ich auch schon gemacht.Nur nicht ganz so detailliert
Das werde ich jetzt nachholen.
Hab jetzt 3 Wochen in der Rehabilitation Zeit dies zu tun
Vielen Dank für die tipps
Wenn nichts mehr geht würde ich mich gern noch einmal an euch /dich wenden
Gruß günni | |
Re: Access Autowert | | | Autor: Franki | Datum: 22.06.16 00:46 |
| Hallo Günni,
Reha hört sich ja nicht so gut an, deshalb gute Besserung von meiner Seite.
Ich wünsche dir viel Erfolg bei deinen Tests mit der DB, du kannst gerne jederzeit hier fragen nach der Reha, oder auch während. (Da gibt es garantiert Internetzugang über WLAN)
Gruß
Frank | |
Re: Access Autowert | | | Autor: guenni255 | Datum: 22.06.16 09:16 |
| Vielen dank für die guten Wünsche
WLAN ist hier verdammt teuer😠😠
Gruß günni | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
Neu! sevCommand 4.0
Professionelle Schaltflächen im modernen Design!
Mit nur wenigen Mausklicks statten auch Sie Ihre Anwendungen ab sofort mit grafischen Schaltflächen im modernen Look & Feel aus (WinXP, Office, Vista oder auch Windows 8), inkl. große Symbolbibliothek. Weitere InfosTipp des Monats TOP Entwickler-Paket
TOP-Preis!!
Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR...
Jetzt nur 599,00 EURWeitere Infos
|