Zápis do tabulky databáze SQL   zodpovězená otázka

VB.NET

Mám vytvořeno několik tabulek, navzájem propojených (foreign). Na zápis do jedné z nich chci zvolit formulář s možností vybrat u některých údajů z ListBoxu. V dotyčném ListBoxu dávám možnost vybrat ze smysluplných názvů(z propojené tabulky), ale do tabulky potřebuju zapsat jedinečné číslo z propojené tabulky. Nevím, jestli je to pochopitelné. Ještě zkusím pokračovat. Při vyplnění všech údajů bych měl tyto uložit do tabulky, asi příkazem "INSERT INTO..." ale místo údaje např. "Kůň" uložím číslo "1" - což je údaj z propojené tabulky odpovídající textu "Kůň". Asi to píšu moc šroubovaně, ale třeba to někdo pochopí. Děkuju za dpověď. Já samozřejmě budu zase dál zkoumat, ale teď si rady opravdu nevím.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Předem musím upozornit, že s tabulkami si ale vůbec nerozumím, takže přispěji trochou teorie:

Vy tedy uložíte číslo do tabulky a chcete aby jste vytáhl jemu odpovídající název z jiné tabulky, to znamená, že vezmete číslo a pak projíždějte druhou tabulku a hledejte záznam s indexem daného čísla a ten vezměte.

Je mi jasné, že tento příspěvek nemá žádnou pomocnou hodnotu (a proto se já jako laik diskusím o databázích vyhýbám), ale podle popisu problému mě napadlo že by příspěvek možná nebyl až tak uplně k zahození.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Záleží na tom, jak načítáte data do ListBox a jak je zase ukládáte zpět. V případě, že to děláte manuálně řádek po řádku, tak si vytvořte objekt, který dokáže uchovat jak text, tak unique ID:

Class Polozka
    Private pText As String
    Public Property Text() As String
        Get
            Return pText
        End Get
        Set(ByVal value As String)
            pText = value
        End Set
    End Property


    Private pID As Integer
    Public Property ID() As Integer
        Get
            Return pID
        End Get
        Set(ByVal value As Integer)
            pID = value
        End Set
    End Property

    Public Overrides Function ToString() As String
        Return Text ' tato funkce vrací to, co se zobrazí v ListBoxu jako text
    End Function

    Sub New(ByVal Text As String, ByVal ID As Integer)
        Me.Text = Text
        Me.ID = ID
    End Sub
End Class

A pak už jen plňte ListBox:

...
    Listbox1.Items.Add(new Polozka(textPolozky, idPolozky))
...

Tím pádem máte v ListBoxu seznam typu Polozka a z něj se dá už snadno ID vytáhnout touto funkcí (která při ničem nevybraném vrací 0):

    Function ZjistiVybraneID() As Integer
        If ListBox1.SelectedItem IsNot Nothing Then
            Return CType(ListBox1.SelectedItem, Polozka).ID
        Else
            Return 0
        End If
    End Function

Pokud něco není jasné, rád vysvětlím.

A v případě, že jste zvolil bindovací metodu přes DataSource objekty, stačí zvolit v nastavení bindování identifikační a zobrazovanou hodnotu listboxu a použít:

	Dim ID as Integer = ListBox1.SelectedValue

Snad to pomůže.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Díky, já jsem se večer ještě snažil a dospěl jsem k té bindovací metodě přes Datasource. Už je mi to jasné VBStudio to řeší velice komfortně, jen teď budu mít problém to správně uložit do tabulky v SQL. Příkaz INSERT INTO ... znám z příkazové řádky, ale tady to bude asi složitější. Můžete ještě pomoci s tím uložením hodnot z ListBoxů do tabulky ? Díky.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback