Ahoj, mám 3 problémy se kterýma nemůžu pohnout:) 1) ve své aplikaci potřebuji do datagridViewu načítat data z excelu. To jsem vyřešil pomocí oleDB ale funguje to pouze za předpokladu že znám jméno listu ze kterého chci načítat. Nevíte zda je možné pomocí oleDb (nejspíše nějákým SQL dotazem poslaný na excel) zjistit jména listů? Funguje zde něco obdobného jako u SQL serveru kde když chci zjistit například seznam databází pošlu dotaz na master databázi? Data načítám takto:
Sub nactiData()
Dim ExcelStrConnectionString As String = String.Empty
Dim ExcelDataAdapter As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter
Dim ExcelDataTable As DataTable = New DataTable
Dim strFilePath As String
form1.OpenFileDialog1.FileName = Nothing
form1.OpenFileDialog1.Filter = "MS Excel (*.xls)|*.xls"
form1.OpenFileDialog1.ShowDialog()
If form1.OpenFileDialog1.FileName = Nothing Then Exit Sub
strFilePath = form1.OpenFileDialog1.FileName
Try
ExcelStrConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strFilePath & ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"""
Dim spojeni As OleDb.OleDbConnection = New OleDb.OleDbConnection(ExcelStrConnectionString)
spojeni.Open()
Dim dotaz As OleDb.OleDbCommand = New OleDb.OleDbCommand("SELECT * FROM [List1$]", spojeni)
ExcelDataAdapter.SelectCommand = dotaz
ExcelDataAdapter.Fill(ExcelDataTable)
frmAplikace.dgv4Import.DataSource = ExcelDataTable
Catch ex As Exception
chybaOtevreniExcelu(strFilePath)
Exit Sub
Finally
spojeni.Close()
End Try
End Sub
2) Občas (ale nepodařilo se mi zatím zjistit kdy přesně) se mi stává že mi najednou jdou ručně otevřít všechny sešity v excelu jenom pro čtení. Nevím ale kde je chyba protože spojení zavírám. Nevíte čím by to mohlo být (resp. jak otevřít z VB sešit pouze pro čtení) ? 3) Jak provést SQL příkaz insert tak, aby mi z dataTable vložil data na SQL server? Příkaz INSERT INTO testovaci_TB SELECT * FROM mojeDataTable samozřejmě nefunguje protože příkaz hledá na SQL serveru tabulka se jmenem mojeDataTable která tam není. Jde vůbec insert se selectem v tomto případě použít, nebo budu muset tabulku v db plnit po řádcích tak, že si budu data z DataTable načítat např. do proměnných a ty budu posílat jako values na server?
|