VB ODBC načíst do comboboxu – Visual Basic – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

VB  ODBC načíst do comboboxu – Visual Basic – Fórum – Programujte.comVB ODBC načíst do comboboxu – Visual Basic – Fórum – Programujte.com

 

krpik0
Newbie
17. 2. 2020   #1
-
0
-

Zdravím,

chtěl bych se zeptat zda by šlo načíst databáze do comboboxu.

Mam v ODBC uložené databáze MYSQL 5.2a

V nyní mám hotové 3 aplikace které jsou napojené na každou databázi zvlášt

pomoci :

  Dim connString As String = "Database=DATA_SKLAD1;Data Source=IP_ADRESA;" _
       & "User Id=root;Password="

        Dim conn As New MySqlConnection(connString)
        Dim cmd As New MySqlCommand()

        Try
            Call conecDB()
            dt = New DataTable '
            Dim con As New SqlConnection

což je nepraktické 

Stačí mě abych měl jednu aplikace ale tam bych potřeboval mít combobox ,který mě vyčte názvy z ODBC.

Pokud vyberu název databáze tak se mě připojí aplikace k dané databázi a už pracuji

Mohl bych to vyřešit v kódu že bych přes chatbox si zapnul tu danou databázi ale mám více stanic které se připojují zase k jiným databázím a univerzalní řešení pro mě je aby se ty názvy načetli do comboboxu

Napadlo mě využít ODBC.ini z registru kde se vlastně zapisují Názvy databázi a další údaje ale nevím přesně jak na to.

Nemáte nějaký typ ?

Děkuji

Nahlásit jako SPAM
IP: 46.174.58.–
gna
~ Anonymní uživatel
1891 příspěvků
18. 2. 2020   #2
-
0
-

Není mi úplně jasné na co se ptáš. Jak číst registry? RegistryKey Class

RegistryKey key = Registry.CurrentUser.OpenSubKey(@"Software\ODBC\ODBC.INI\ODBC Data Sources");
key.GetValueNames()
key.OpenSubKey(...)
key.GetValue(...)
Nahlásit jako SPAM
IP: 213.211.51.–
MilanL+1
Grafoman
18. 2. 2020   #3
-
0
-

#1 krpik
záleží jak moc to chceš zabezpečit.

Já to měl udělané tak, že jsem měl ty údaje connect stringu v INI souboru (jmého a heslo jsem měl zašifrované malou interní funkcí), do comboboxu jsem načetl jen seznam DB a po výběru jsem si načetl z INI daný connect string

Nahlásit jako SPAM
IP: 91.139.9.–
MilanL+1
Grafoman
18. 2. 2020   #4
-
0
-
Nahlásit jako SPAM
IP: 91.139.9.–
krpik0
Newbie
18. 2. 2020   #5
-
0
-

#4 MilanL
mě napadlo spíše to nechat vyčíst z registru ODBC tam je vlastně všechno napsáno.

napsat aby mě vlezl do registru a přidal do comboboxu

  Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        nacistodbc()

Private Sub nacistodbc() 

combobox1.Items.Clear()

Dim odbcnazev=Microsoft.Win32.Registry.LocalMachine.OpenSubKey("SOFTWARE\\ODBC\\ODBC.INI\\ODBC Data Sources", False).GetValueNames() 

For Each item As Object In odbcnazev 
combobox1.Items.Add(item) 

Next

Nenašel jsem o tom nějaké informace co nejlépe použít

Nahlásit jako SPAM
IP: 46.174.58.–
gna
~ Anonymní uživatel
1891 příspěvků
18. 2. 2020   #6
-
0
-

#5 krpik
Ty názvy jsou ti k ničemu. Předpokládám, že u těch zdrojů máš ty připojovací údaje, ktere chceš načíst, jinak to celé nemá smysl. Takže načteš seznam těch zdrojů a pak projdeš jejich klíče a hodnoty. Ty tři funkce, co jsem ti napsal na to stačí.

Tak so podívej do těch registrů, jakou to má strukturu a načti si to. Já Widle s ODBC nemám, ale našel jsem tenhle příklad a nevidím problém.

[HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources]
"MY_DB"="SQL Server"

[HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\MY_DB]
"Driver"="C:\\WINDOWS\\system32\\SQLSRV32.dll"
"Server"="10.1.1.1"
"Database"="MY_DB"
"LastUser"="db_account"
Nahlásit jako SPAM
IP: 213.211.51.–
MilanL+1
Grafoman
18. 2. 2020   #7
-
0
-

#5 krpik
to vyčtení z registrů jsem tam taky někde našel, jen jde o to že ti to vyhodí i obecné zdroje

 google "visual basic list ODBC sources from registry"

nejjednodušší co jsem tam našel (funkčnost nezaručuji, nezkoušel jsem)

Private Sub DsnLookup()
      'looks up ODBC DSNs from the registry, displays list in a drop drop box.
      Dim dsnNames As New List(Of String)
      Dim reg As Microsoft.Win32.RegistryKey = Registry.LocalMachine.OpenSubKey("Software")

      If reg IsNot Nothing Then
         reg = reg.OpenSubKey("ODBC")
         If reg IsNot Nothing Then
            reg = reg.OpenSubKey("ODBC.INI")
            If reg IsNot Nothing Then
               For Each dsn As String In reg.GetSubKeyNames
                  dsnNames.Add(dsn)
               Next
            End If
         End If
      End If

      'fill drop down box.
      For Each Name As String In dsnNames
         cboDsn.Items.Add(Name)
      Next Name
   End Sub
Nahlásit jako SPAM
IP: 185.112.167.–
MilanL+1
Grafoman
18. 2. 2020   #8
-
0
-


Pozor to ti ale vyhodí jen zdroje bez dalších údajů, uživatele a hesla tam nebudou.

Nahlásit jako SPAM
IP: 185.112.167.–
krpik0
Newbie
20. 2. 2020   #9
-
0
-

#8 MilanL
děkuji za radu

ja jsem to pokusil se upravit

Private Function GetODBCValu(ByVal ODBCName As String, ByVal ValueName As String) As String
        Dim dsnNames As New List(Of String)
        Dim reg As Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software")
        reg = reg.OpenSubKey("ODBC")
        reg = reg.OpenSubKey("ODBC.INI")
        reg = reg.OpenSubKey(ODBCName)
        Return reg.GetValue(ValueName)

        For Each dsn As String In reg.GetSubKeyNames
            dsnNames.Add(dsn)
        Next
        For Each Name As String In dsnNames
            ComboBox1.Items.Add(Name)
        Next Name

    End Function
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click



        Dim connString As String = String.Format("Database='{0}';Data Source='{1}';User Id=root;", GetODBCValu(ComboBox1.SelectedItem, "Database"), GetODBCValu(ComboBox1.SelectedItem, "Server"))
        Dim conn As New MySqlConnection(connString)
        Dim cmd As New MySqlCommand()

To mě napadlo že pokud vyberu databázi v comboboxu tak si to šáhné do ODBC a do connString do dle příkazu doplní server a název databáze

Pak mě to ale ve výsledku píše Index je mimo rozsah,Index musí být nezáporný a musí být menší než velikost kolekce.Název Parametru: index

No ještě tam bude nějaká chyba

Nahlásit jako SPAM
IP: 46.174.58.–
gna
~ Anonymní uživatel
1891 příspěvků
20. 2. 2020   #10
-
0
-

Jestli to máš tak, jak jsi to se pastnul, tak se ti to combo vůbec neplní.

Nahlásit jako SPAM
IP: 213.211.51.–
krpik0
Newbie
21. 2. 2020   #11
-
0
-

#10 gna 

    Private Function GetODBCValu(ByVal ODBCName As String, ByVal ValueName As String) As String
        Dim dsnNames As New List(Of String)
        Dim reg As Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software")
        reg = reg.OpenSubKey("ODBC")
        reg = reg.OpenSubKey("ODBC.INI")
        reg = reg.OpenSubKey(ODBCName)
        Return reg.GetValue(ValueName)

        For Each dsn As String In reg.GetSubKeyNames
            dsnNames.Add(dsn)
        Next
        For Each Name As String In dsnNames
            ComboBox1.Items.Add(Name)
        Next Name

    End Function

ale jo propíše se 

upravil jsem ještě connectstring u buttonu a jede to si myslím tak jak má snad

Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click



        Dim connString As String = String.Format("Database='{0}';Data Source='{1}';PWD='{2}';User Id=root;", GetODBCValu(ComboBox1.SelectedItem, "Database"), GetODBCValu(ComboBox1.SelectedItem, "Server"), GetODBCValu(ComboBox1.SelectedItem, "PWD"))
        Dim conn As New MySqlConnection(connString)
        Dim cmd As New MySqlCommand()
Nahlásit jako SPAM
IP: 46.174.58.–
MilanL+1
Grafoman
21. 2. 2020   #12
-
0
-

#11 krpik
hm opravdu se ta funkce jmenuje GetODBCValu , nechybí ti tam e?


GetODBCValu(ComboBox1.SelectedItem, "Database"), GetODBCValu(ComboBox1.SelectedItem, "Server"), GetODBCValu(ComboBox1.SelectedItem, "PWD")
 

Nahlásit jako SPAM
IP: 185.112.167.–
krpik0
Newbie
21. 2. 2020   #13
-
0
-

#12 MilanL
ano chybí ale to je jen pojmenování funkce ja jsem něco tam zkoušel a zapomněl jsem ten název opravit 

Nahlásit jako SPAM
IP: 46.174.58.–
gna
~ Anonymní uživatel
1891 příspěvků
21. 2. 2020   #14
-
0
-

#11 krpik
Tak to máš to plnění ještě někde jinde. Protože ten Return tady tu funkci ukončí a na ty další příkazy s plněním comba nedojde. A ten problém s Indexem jsem právě tipoval na čtení vybrané položky z prázdného comba.

Nahlásit jako SPAM
IP: 213.211.51.–
krpik0
Newbie
21. 2. 2020   #15
-
0
-

#14 gna
Pravda 

 Private Sub nacti_nazev_odbc()

tady mam načítání názvu z ODBC a na konci mám  

ComboBox1.Items.Add(Nazev)

a potom

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        
        nacti_nazev_odbc()

Nahlásit jako SPAM
IP: 46.174.58.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 20 hostů

Podobná vlákna

Lokalizace comboboxu — založil marpit

Invokace comboboxu na webu asp — založil VladislavK

ODBC v C++ — založil plantaznik

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý