TableAdapter und BindingSource Ausgabe einer Value

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von Spike.

    TableAdapter und BindingSource Ausgabe einer Value

    Hallo zusammen,

    ich hänge leider mal wieder bei einer Sache, ich glaube allerdings weil ich mich derzeit immer auf einer Stelle drehe.
    Hierbei möchte ich bezwecken das ich bei dem öffnen einer neuen Form ,wo ich von der vorherigen Form einen Wert übergeben bekommen habe "123456", diese Filter und die Ausgabe als String abspeichere.

    Da ich derzeit viel versuche mit TableAdaptern und BindinSource zu arbeiten, was auch gut funktioniert, habe ich hier folgenden Code.

    VB.NET-Quellcode

    1. Name = CType(Verwaltung_haushaltskontenTableAdapter.FillBy_KontoNr(Me.Finanz_managerDataSet.verwaltung_haushaltskonten, SetKonto_Nr:=Buchungen.Info2), String)
    2. MsgBox(Name)


    Ich habe im DataSet eine Abfrage generiert, diese mir einen Wert liefern soll den ich bei "SetKonto_Nr:" definiere, sprich "Buchungen.Info2 ist gleich der Wert "123456".
    Nun möchte ich bei der Abfrage den gespeicherten Ordnerpfad erhalten, dies klappt auch bei der manuellen Abfrage im DataSet ohne Probleme.

    Ich möchte allerdings diesen Wert in der Form als einzelnen Wert verwenden bzw. anzeigen lassen.
    Bei dem öffnen der Form soll quasi der Ordnerpfad ausgegeben werden über diese Abfrage im DataSet.

    Vielleicht ist auch mein Ansatz falsch, aber so dachte ich könnte es eventuell funktionierne.

    Danke!

    Gruß Spike

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Spike“ ()

    Spike schrieb:

    Nun erhalte ich bei der Abfrage einen gespeicherten Ordnerpfad, dies klappt auch bei der manuellen Abfrage im DataSet ohne Probleme.

    Ich möchte allerdings diesen Wert in der Form als einzelnen Wert verwenden und anzeigen lassen.
    Das klingt, als hättest du 2 Abfragen: eine "manuelle Abfrage im Dataset", und eine andere - irgendwie geartete.

    Ich kann mir unter "manuelle Abfrage im Dataset" nix vorstellen, und deine andere Abfrage - weiss ich auch nciht, was du meinst.

    Zeig doch mal den Code der "manuelle Abfrage im Dataset", und den Code der anderen Abfrage - vielleicht wird mir dann iwie klarer, was du meinst.
    Hallo @ErfinderDesRades,

    wahrscheinlich etwas unglücklich formuliert.
    Mit der "manuellen" Abfrage meine ich derzeit, wenn ich auf meine "Datenquellen - > finanz_managerDataSet" per rechtsklick im DataSet mit Designer bearbeiten anklicke.
    Die Abfrage welche ich unter dem TableAdapter, erstellt habe: "FillBy_KontoNr,GetDataBy_KontoNr (@SetKonto_Nr)"

    Diese Abfrage enthält:

    PHP-Quellcode

    1. SELECT konto_speicherort
    2. FROM finanz_manager.verwaltung_haushaltskonten
    3. WHERE (konto_nr = @SetKonto_Nr)


    Diese Abfrage möchte ich quasi in der genannten Form ausgeben, als Platzhalter dient dort "Buchungen.Info2" mit dem o.g. Wert dieser mir dann den "Konto_Speicherort" ausgeben soll.
    Hierbei meinte ich das dies in dem "manuellen" -> TableAdapter super funktioniert.

    Unklar ist, wie ich dies in meiner Form eintragen kann um diesen Wert einzeln zu erhalten ohne eine DataGrid / TextBox o.ä. einfach in einem String.
    Derzeit erhalte ich nur eine "1" oder eine "0", sprich true oder false, davon gehe ich aus.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Spike“ ()

    Im TableAdapter sind Methoden generiert, die so heissen, wie im Designer angezeigt. Also ich vermute, dass vergleichbares bei dir gehen müsste:

    VB.NET-Quellcode

    1. dim tb as verwaltung_haushaltskontenDataTable = myVerwaltungHaushaltkontenTableAdapter.GetDataBy_KontoNr(45)
    Die verwaltung_haushaltskontenDataTable enthält dann einen Datensatz - wenn es ein Konto mit dieser Nummer gibt.
    Von diesem Datensatz kannste natürlich alle Properties einzeln abrufen, wenn dir danach ist.



    kleiner Tipp: nee - grosser Tipp:
    Schau dir mal meine Vorschläge für Modeling und NamingConventions an.
    codeproject.com/Articles/10331…eginners#Model-Guidelines
    Das macht Code deutlich lesbarer, weil man dann nicht mit so Wort-Ungetümen arbeiten muss.
    Danke schon einmal für deinen Tipp, ich glaube eine Sache verstehe ich noch nicht ganz, wo bekomme ich den jetzt die DataTable her?

    Ich habe folgendes eben versucht:

    VB.NET-Quellcode

    1. Imports Haushaltsprogramm.finanz_managerDataSet

    quasi im Kopf des Programmes.

    Dann habe ich den Code von dir übernommen und angepasst:

    VB.NET-Quellcode

    1. Dim tb As verwaltung_haushaltskontenDataTable = Me.Verwaltung_haushaltskontenTableAdapter.GetDataBy_KontoNr(Buchungen.Info2)

    Wobei hier die Buchungen.Info2 der Wert "123456" quasi ist, sprich die zu suchende Kontonummer

    Nun wollte ich mir dies einmal ausgeben lassen als String= MsgBox(tb)
    bekomme allerdings die Meldung: "Das Argument Prrompt kann nicht in den Typ String umgewandelt werden"

    Spike schrieb:

    wo bekomme ich den jetzt die DataTable her?
    Das steht da doch:

    VB.NET-Quellcode

    1. Dim tb As verwaltung_haushaltskontenDataTable = Me.Verwaltung_haushaltskontenTableAdapter.GetDataBy_KontoNr(Buchungen.Info2)
    Die Methode Me.Verwaltung_haushaltskontenTableAdapter.GetDataBy_KontoNr() returnt was? (hingucken!) eine verwaltung_haushaltskontenDataTable.
    tb ist also eine verwaltung_haushaltskontenDataTable - steht da ja: tb As verwaltung_haushaltskontenDataTable.
    Und eine verwaltung_haushaltskontenDataTable ist ja eine DataTable, weil die Klasse von DataTable erbt.
    Also was du suchst hast du sowas von vor der Nase, dassichs kaum erklären kann.
    Soweit hatte ich es auch verstanden.

    Tut mir leid wenn ich dort noch immer gedanklich hänge, den Wert dert DataTable erhalte ich dann nun wie?
    Egal in welcher Ausführung erhalte ich immer ein :"Das Argument Prompt kann nicht in den Typ String umgewandelt werden"

    Ich hatte noch versucht danach hinzugehen und zu sagen "For Each row in tb" was mich natürlich aber nicht weiterbringt.

    Spike schrieb:

    den Wert dert DataTable erhalte ich dann nun wie?
    "den Wert einer DataTable" gibt es nicht.
    Eine DataTable ist eine Tabelle (deswegen heisst sie so).
    Eine Tabelle ist etwas mit vielen Zeilen, und jede Zeile enthält einen bestimmten Satz von Werten (deswegen nennt man die Zeilen auch 'DatenSatz').
    Also viele Werte.
    Zur Veranschaulichung:

    Welchen Wert möchtest du?
    In deinem Beispiel, den Wert FirstName.

    Da ich in dem obigen vorgehen bzw. auch nach deiner Richtigstellung bereits einen gewissen bzw. eine Zeile haben sollte mit:

    VB.NET-Quellcode

    1. Me.Verwaltung_haushaltskontenTableAdapter.GetDataBy_KontoNr(Buchungen.Info2)

    diesem vorgehen.

    Müsste ich quasi dort die zeile durchgehen und mir die Spalte mit dem Namen - wie in deinem Beispiel - FirstName holen, oder?

    Spike schrieb:

    In deinem Beispiel, den Wert FirstName
    den Wert 'FirstName' gibt es nicht.
    Wenn du nochmal schaust in post#8: da gibt es viele Werte 'FirstName' - in jeder Zeile einen.

    Aber angenommen eine Tabelle, die nur genau eine Zeile enthält - da würdest du vermutlich 'den Wert FirstName' der ersten Zeile haben wollen:
    Spoiler anzeigen

    Zum Beispiel in dieser Tabelle (tb) wird das so sein, dass sie nur eine Zeile enthält:

    Spike schrieb:

    VB.NET-Quellcode

    1. Dim tb As verwaltung_haushaltskontenDataTable = Me.Verwaltung_haushaltskontenTableAdapter.GetDataBy_KontoNr(Buchungen.Info2)
    Da einen Wert der ersten Zeile zu holen ist zum Schreien einfach:

    VB.NET-Quellcode

    1. dim firstName = tb(0).FirstName
    2. msgbox(firstName)
    (Du kannst übrigens die anderen Werte (ID, Name) in gleicher Weise holen)

    .

    .

    .

    quasi dort die zeile durchgehen und ... Spalte ... holen
    ist also unnötig.
    Die Spalten haben Namen, und die Namen sollteste benutzen.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „ErfinderDesRades“ ()

    Vielen Dank für deine Erklärung.
    Genau dies hat mir geholfen und bringt mich nun an vielen punkten weiter.

    Daran habe ich gehongen, gerade im Bezug auf "(0)". Wobei es wie du sagst nun total logisch ist ||

    Werde mich da noch einmal genauer einlesen.
    Noch eine dringende Empfehlung: Visual Studio - Empfohlene Einstellungen

    Dass du zB eine DataTable in einer MsgBox auszugeben versuchst (MsgBox(tb)), zeigt, dass du Datentypen nicht richtig unterscheiden und einordnen kannst, und auch wohl die meisten Fehlermeldungen nicht verstehst.
    Weil MsgBox kann natürlich nur Strings ausgeben - eine DataTable ist aber kein String.
    VB.Net wird leider mit Voreinstellungen ausgeliefert, die es einem Anfänger eigentlich unmöglich machen, richtig programmieren zu lernen.
    Diese "Deppen-Einstellungen" sollte man also als erstes korrigieren - bevor man überhaupt irgendetwas zu coden anfängt.
    Natürlich fängt jeder trotzdem zu coden an, weil das weiss man ja von vornherein erstmal garnet - wie verheerend die ausgelieferten Voreinstellungen sind.
    Jedenfalls: Je früher man die Voreinstellungen korrigiert, desto weniger fehlerhaften Code hat man geschrieben und muss man nachbessern.
    Daher wie gesagt, obige dringende Empfehlung.
    Beim Nachbessern können wir dir auch gerne helfen, und ausserdem lernt man auch dabei sehr sehr viele Grundlagen.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()