2017-02-16 13 views
0

Я новичок в VB, недавно начался, и я счастлив, что добился прогресса.Форма VB - чтобы пользовательское взаимодействие выбирало данные из SQL Server

Однако я более новичок в формах VB при подключении к SQL-серверу и позволяет пользователю взаимодействовать с ним, чтобы запросить любые данные, которые они хотят, в excel.

Это происходит так, я уже создал пользовательскую форму, которая имеет флажок (>, чем, <, чем), текстовое поле (ввод числа) и еще 2 флажка (мужской, женский) и поле со списком (состояние) , У меня также есть данные в базе данных SQL Server.

То, что я пытаюсь сделать и по-прежнему пытается, заключается в том, чтобы позволить пользователям взаимодействовать с формой, установив флажки, сделав выбор в поле со списком и введя число в текстовое поле и нажав кнопку, чтобы запустить программу VB для экспорта запрошенных данных в Excel (моя задача - экспортировать его в файл Excel, который уже был создан и сохранен в каталоге, или экспортировать его во вновь созданный файл Excel, который еще не был сохранен (вроде как всплывающее окно).

Например, пользователь проверяет>, а затем вводит номер 25 (например, возраст), и проверяет женщину, а в combobox выбирает NY и нажимает кнопку. Программа должна запрашивать, в этом случае женщина старше 25 лет, которая живет в Нью-Йорке и экспортирует ее в Excel в виде всплывающего окна или файла excel tha t уже сохранен в каталоге. Я занимаюсь некоторыми исследованиями по этому вопросу, но не добился больших успехов, поскольку я новичок в формах, связях и извлечении. Мой код ниже создает файл Excel в каталоге и пытается запросить данные в файле сохранения Excel. Мой запрос ниже. Пожалуйста, порекомендуйте !

Imports System.IO 
Imports excel = Microsoft.office.interop.Excel 
Imports System.Data 
Imports System.Data.SqlClient 
Imports System.Data.OleDb 

Module module1 
    Dim myconnection As SqlConnection 
    Dim mycommand As SqlCommand 
    Sub main() 
     Dim xlapp = New excel.application 
     xlapp.visible = True 
     Dim xlwb As excel.workbook 
     Dim xlws As excel.worksheet 
     Dim path As String = "C:\users\t\" 
     Dim excel_name As String = "zp" 

     xlwb = xlapp.workbooks.add() 
     xlws = xlwb.sheets("sheet1") 
     xlwb.saves(path & excel_name) 
     xlapp.save() 
     xlapp.quit() 

     Using myconnection As New SqlConnection("data source =afe;initial catalog=zp;integrated securitytrue") 
      myconnection.Open() 
      Dim mycommand As New SqlCommand("insert into openrowset('Microsoft.ace.oledb.12.0','excel 12.0; database=zp:\c:users\dek\rep\zp.xlsx;','SELECT * FROM [Sheet1$]') select * from mem_TBL", myconnection) 
     End Using 
    End Sub 
End Module 

это моя база запросов на выбор пользователя в качестве примера.

SELECT a.z, a.ad, a.ag, a.ret, a.tot, a.wgt 
FROM mtbl a INNER JOIN zTBL b ON a.z = b.zp 
WHERE a.age > 25 AND a.ad = "NY" AND a.ret ="female" 

ответ

1

Этот подход я использую при экспорте в Excel: создать шаблон файла Excel, который я генерировать и сохранять его в фиксированной папке. Когда я экспортировать, чтобы преуспеть, I:

  1. скопировать файл шаблона во временную папку
  2. открыть временный файл,
  3. добавить данные во временный файл,
  4. близко это,
  5. сохранить его в файл назначения
  6. удалить временный файл

    Private Sub ExportToExcel() 
    Using myconnection As New SqlClient.SqlConnection("data source=afe;initial catalog=zp;integrated securitytrue") 
        myconnection.Open() 
        Dim mycommand As New SqlClient.SqlCommand("SELECT a.z, a.ad, a.ag, a.ret, a.tot, a.wgt FROM mtbl a INNER JOIN zTBL b ON a.z = b.zp WHERE a.age > @age AND a.ad = @state AND a.ret = @gender", myconnection) 
        mycommand.Parameters.AddWithValue("@age", 25) 
        mycommand.Parameters.AddWithValue("@state", "NY") 
        mycommand.Parameters.AddWithValue("@gender", "female") 
        Dim dataset As New DataSet 
        Dim adapter As New SqlClient.SqlDataAdapter(mycommand) 
        adapter.Fill(dataset, "data") 
    
        Dim xlapp = New Microsoft.Office.Interop.Excel.Application 
        xlapp.visible = True 
        Dim xlwb As Microsoft.Office.Interop.Excel.Workbook 
        Dim xlws As Microsoft.Office.Interop.Excel.Worksheet 
        Dim templatePath As String = "<path to template file>" 
        Dim path As String = "C:\users\t\" 
        Dim excel_name As String = "zp" 
        Dim tempFIle As String = templatePath & "\NAME OF YOUR TEMPLATE FILE INCLUDING EXTENSION" 
    
        xlwb = xlapp.Workbooks.Open(tempFIle) 
        xlws = CType(xlwb.Worksheets("Sheet1"), Microsoft.Office.Interop.Excel.Worksheet) 
    
        Dim rowIndex As Integer = 0 
        For Each row As DataRow In dataset.Tables(0).Rows 
         ' since you alrady have a template, 
         ' you already know the cell mapping of each column 
         ' in your template file. 
         ' Excel uses Row, Column to map cells and is 1-based 
         rowIndex += 1 
         xlapp.Cells(rowIndex, 1).Value = row("<name of column 1>") 
         xlapp.Cells(rowIndex, 2).Value = row("<name of column 2>") 
         xlapp.Cells(rowIndex, 3).Value = row("<name of column 3>") 
         xlapp.Cells(rowIndex, 4).Value = row("<name of column 4>") 
         '. 
         '. 
         'xlapp.Cells(rowIndex, N).Value = row("<name of column N>") 
        Next 
    
        xlapp.DisplayAlerts = False 
        xlwb.SaveAs(path & excel_name) 
        xlwb.Close() 
        xlapp.DisplayAlerts = True 
        System.Runtime.InteropServices.Marshal.ReleaseComObject(xlwb) 
    
        xlapp.Quit() 
        System.Runtime.InteropServices.Marshal.ReleaseComObject(xlapp) 
    
        System.IO.File.Delete(tempFIle) 
    End Using 
    End Sub 
    
+0

Благодарим вас за пример кода. Я понимаю вашу концепцию, но я заметил, что есть несколько недостающих частей, некоторые из которых я мог бы заполнить, другие я не могу. Я не хочу писать слишком долгое сообщение, - основная проблема для меня - это то, как я ссылаюсь на данные в SQL Sever для конкретной таблицы (Col и строки для запроса и зацикливания на excel). Во-вторых, как поместить запрос, скажем, в предложение where a.ad <> "i" или когда a.ret = "". Еще раз спасибо. Я ценю ваш код, просто некоторые перерывы и немного неясную, но очень приятную концепцию и пример. – Johnseito

+0

Это была моя ошибка, я только заметил, что, когда я помещал создание excel workbook перед использованием, код запускается, но он никогда не входит в For Loop, теперь, когда я помещаю его между использованием. Код запускается в For Loop, но я не знаю, как получить доступ к таблице запросов в db, так как ваш пример - строка («<значение в ячейке # 1>»). Благодарю. – Johnseito

+0

Просто хочу обновить, что я получил строку ("<значение в ячейке # 1>"), проблема была решена путем просмотра этой ссылки https://social.msdn.microsoft.com/forums/en-us/f2e15d21-c1ad-47f3-9c55-1cdb8212af5b/vbnet-loop-throught-dataset-question? forum = vblanguage и, в частности, этот код. FoundRow ("ColumnName"). Ваш пример хорош. – Johnseito

 Смежные вопросы

  • Нет связанных вопросов^_^