vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
SEPA-Dateien erstellen inkl. IBAN-, BLZ-/Kontonummernprüfung  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Visual-Basic Einsteiger
Access 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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel