Lesen mit dem TableAdapter

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von HerrFrie.

    Lesen mit dem TableAdapter

    Hi,

    habe da ein Verständnis-Problem.

    Wenn ich zum Beispiel mit

    Me.TabArtikelTableAdapter.fillby(Me.mydbdataset.tabArtikel,artikelnr)

    einen Datensatz gelesen habe:

    Wo befinden sich dann die Daten bzw. wie kann ich die Felder des Datensatzes ansprechen?

    Wie lese ich anschließend den nächsten Satz?

    Wie lese ich anschließend den vorhergehenden Satz?

    vbanfaenger schrieb:

    Wo befinden sich dann die Daten bzw. wie kann ich die Felder des Datensatzes ansprechen?
    was meinst du, wo befinden sich die Daten, wenn du der fillby-methode Me.mydbdataset.tabArtikel übergibst?

    vbanfaenger schrieb:

    Wie lese ich anschließend den nächsten Satz?

    Wie lese ich anschließend den vorhergehenden Satz?
    die FillBy-Methode bekommt noch einen Parameter, mit dem angegeben wird, welcher Datensatz zu suchen ist. Wenn du einen anneren Datensatz möchtest - ändere diesen Parameter.

    "den nächsten, den vorhergehenden" - sowas gibts in eine DB garnet. Die Tabellen haben keine Reihenfolge, bzw. haben die Reihenfolge, in der du sie sortierst.

    Übrigens, wenn du alle Datensätze abrufen möchtest, verwende die .Fill - Methode, und wenn du annere Suchkriterien implementieren möchtest, mußt du dem TableAdapter eine zusätzliche Query dranbasteln - das geht im Dataset-Designer.

    Ich hab übrigens ein kleines Framework geproggt, mit dem man die TableAdapterei vergessen kann - so Filter-Ausdrücke kann man damit setzen wie etwa für eine BindingSource: [VB 2008] DBExtensions

    TableAdapter FillBy-Methode

    Hi, Erfinder des Rades,

    in meinem Einzeiler steht der Parameter artikelnr,

    d.h. es wird der Satz gelesen, bei dem die Artikelnummer mit dem Wert in der Variablen artikelnr übereinstimmt. Wenn ich jetzt die Felder in dem gelesenen Artikelsatz an die Felder in der Form binde, dann werden die Inhalte des Datensatzes in den jeweiligen Textboxen etc der Form angezeigt.

    Wenn ich aber die Felder des Datensatz nicht binde, wie greife ich dann auf deren Inhalt zu?

    Wenn ich den nächsten Satz lesen möchte, kenne ich die nächste Artikelnummer gar nicht, die Methode FillBy kann daher nicht angewendet werden.

    Das gleich gilt für das Rückwärts-Lesen.

    vbanfaenger schrieb:

    Wenn ich aber die Felder des Datensatz nicht binde, wie greife ich dann auf deren Inhalt zu?
    Du kannst doch Me.mydbdataset.tabArtikel auf eine tabArtikelRow durchsuchen, mit dieser ArtikelID.
    Vlt. rückwärts, denn einfacherweise hängt die DataTable neu geladene DataRows einfach hinten an.
    Wenn ich den nächsten Satz lesen möchte, kenne ich die nächste Artikelnummer gar nicht, die Methode FillBy kann daher nicht angewendet werden.
    Richtig. Wenn du alle Artikel möchtest, nimm Adapter.Fill, und wenn du was bestimmtes auswählen möchtest, musste eine geeignete Query zufügen.
    Die FillBy-Query wurdeja bereits zugefügt - ist dir das generiert worden, oder hast du das zugefügt?

    Ich muß gestehen, ich brauche sowas nie, also einen einzelnen Datensatz abzurufen. Ich lade immer mindestens eine höchst-übergeordnete Tabelle komplett, und dann suche ich da einen Datensatz raus, und lade dessen ganze ChildRows.
    Also wenn ich noch TableAdapter benutzen würde, würde ich denen so Queries zufügen, wie: ArtikelTableAdapter.FillByKategorieRow(ArtikelTable, categorieID), und das würde alle Artikel einer übergeordneten Kategorie in die ArtikelTable füllen.

    vbanfaenger schrieb:

    VB.NET-Quellcode

    1. wertinfeld1 = cint(Row,0,"feld1")
    mach doch nicht solche Gräßlichkeiten - du hast doch ein typisiertes Dataset!

    wenn du etwa den ArtikelNamen willst, dann hole ihn dir auf typisierte weise, unter Ausnutzung von Intellisense und Compiler-Überprüfung:

    VB.NET-Quellcode

    1. Dim rwArtikel als tabArtikelRow = Me.mydbdataset.tabArtikel(0)
    2. dim name = rwArtikel.ArtikelName
    oder kurz:

    VB.NET-Quellcode

    1. Dim name as string = Me.mydbdataset.tabArtikel(0).ArtikelName

    Kann sein, die Property ArtikelName heißt bei dir anders, das rührt daher, dass der Generator des typisierten Datasets sich an deine SpaltenNamen orientiert, und ich weiß natürlich nicht, ob du eine Artikelbezeichnung in deiner DataTable führst, und wie diese Spalte heißt. Jedenfalls hoffe ich, dass sie nicht "feld1" heißt. ;)
    Du könntest das ganze aber auch wie der Erfinder gesagt hat komplett mit der .fill Methode ins Dataset einlesen.
    Wenn du dieses dann an ein Dataview hängst, kannst du das ganz komfortabel Filtern, sodass du in einer Textbox einen Suchbegriff eingibst, z.B. eine Artikelnummer und dann wird dir nur noch die Zeile mit dieser Artikelnummer angezeigt.
    Das Dataview hängst du dann an ein Datagridview und dort siehst du dann das Ergebnis der Filterung oder halt die komplette Liste. Du kannst auch für mehrere Kriterien Filter eingeben.

    Entweder kannst du dann Änderungen im Datagridview direkt eingeben, oder du hängst die aktive/selektierte Zeile an Textboxen dran.

    Gruß
    HerrFrie