Проблема с выводом записей из таблицы ms sql

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
agrail
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 27.02.2013 (Ср) 6:10

Проблема с выводом записей из таблицы ms sql

Сообщение agrail » 27.02.2013 (Ср) 6:25

Код: Выделить всё
Sub DataExtract()
'Option Explicit
' Create a connection object.
Dim cnPubs As ADODB.Connection
Set cnPubs = New ADODB.Connection

' Provide the connection string.
Dim strConn As String

'Use the SQL Server OLE DB Provider.
strConn = "PROVIDER=SQLOLEDB;"

'Connect to the Pubs database on the local server.
strConn = strConn & "DATA SOURCE=galaxy-test\test_galaxy;INITIAL CATALOG=data_zl;"

'Use an integrated login.
strConn = strConn & " User ID=supervisor; Password=ghbdtn;"

'Now open the connection.
cnPubs.Open strConn
' Create a recordset object.
Dim rsPubs As ADODB.Recordset
Set rsPubs = New ADODB.Recordset
With rsPubs
    ' Assign the Connection object.
    .ActiveConnection = cnPubs
    ' Extract the required records.
    .Open "SELECT top 1 T$PUTGSM.F$PROBEGALL FROM data_zl.dbo.T$PUTGSM where T$PUTGSM.F$NREC='0001000000000022h'"
    ' Copy the records into cell A1 on Sheet1.
    Sheet1.Range("A1").CopyFromRecordset rsPubs
    ' Tidy up
    .Close
End With
cnPubs.Close
Set rsPubs = Nothing
Set cnPubs = Nothing
End Sub

ругается на run-time 424 --Sheet1.Range("A1").CopyFromRecordset rsPubs. библиотеки подключил: microsoft active x data object library, recordset, microsoft ado, ole db provider. что еще необходимо почему ругается?

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Проблема с выводом записей из таблицы ms sql

Сообщение ger_kar » 27.02.2013 (Ср) 6:45

agrail писал(а):ругается на run-time 424 --Sheet1.Range("A1").CopyFromRecordset rsPubs.
424 Object required. Необходим объект

Ты используешь Sheet1.Range("A1"), очевидно это Excel, но сам Sheet1 у тебя откуда берется? По крайней мере в твоем коде нет ни его объявления не получения ссылки на этот объект. Естественно, что VB Будет ругаться. И почему 'Option Explicit у тебя закомментирован? Этого нельзя делать ни в коем случае.
Бороться и искать, найти и перепрятать

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Проблема с выводом записей из таблицы ms sql

Сообщение ger_kar » 27.02.2013 (Ср) 6:46

PS. У тебя темы продублированы, одну надо удалить.
Бороться и искать, найти и перепрятать

agrail
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 27.02.2013 (Ср) 6:10

Re: Проблема с выводом записей из таблицы ms sql

Сообщение agrail » 27.02.2013 (Ср) 7:02

интернет подвис, создало 2 сообщения. по поводу
Код: Выделить всё
'Option Explicit
удалил, роли не играет. сам пример взял с сайта майкрософт (http://support.microsoft.com/kb/306125). я новичок в vba. подскажите как исправить чтобы скомпилить и посмотреть результат. да это ексель. лист переименовал в Sheet1

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Проблема с выводом записей из таблицы ms sql

Сообщение ger_kar » 27.02.2013 (Ср) 7:31

agrail писал(а):удалил, роли не играет.
Еще и как играет. Но надо было не удалять а раскомментировать.
Тогда ты получишь другую ошибку, связанную с тем, что переменная по видимому вообще не объявляется. Ну и соответственно ее нужно объявить, затем получить ссылку на объект, в данном случае лиcт Excel и только потом использовать. Пример который ты взял рассчитан на применение в VBA, и не просто в VBA, а в Excel VBA, в котором есть предопределенные переменные, в частности переменные со ссылками на книгу, листы и т.д. и там их можно не объявлять. Ты используешь это в VB, и вполне естественно, что здесь нужно действовать по другому.
Бороться и искать, найти и перепрятать

agrail
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 27.02.2013 (Ср) 6:10

Re: Проблема с выводом записей из таблицы ms sql

Сообщение agrail » 27.02.2013 (Ср) 7:51

можно поподробнее) я в vb новичок. к базе я приконектился, все гуд, объявил Option Explicit - ругается что действительно не объявлена переменная sheet1. как теперь мне вывести допустим в поле а1 значение запроса - отличного от того примера который выше. попроще)

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Проблема с выводом записей из таблицы ms sql

Сообщение ger_kar » 27.02.2013 (Ср) 8:15

Вот пример объявлений:
Код: Выделить всё
Dim oExcelApp   As EXCEL.Application    'Ссылка на приложение Excel
Dim oWorkBook   As EXCEL.Workbook       'Ссылка на рабочую книгу Excel
Dim oWorkSeet   As EXCEL.Worksheet      'Ссылка на рабочий лист Excel
Dim oRange      As EXCEL.Range          'Диапазон ячеек


Получить ссылку на лист Excel можно так (один из способов):
Код: Выделить всё
'Окрываем новое приложение Excel и добавляем книгу
Set oExcelApp = New EXCEL.Application
Set oWorkBook = oExcelApp.Workbooks.Add
'Получение ссылки на лист по номеру
Set oWorkSeet = oWorkBook.Worksheets(1)
'Получение ссылки на лист по названию
Set oWorkSeet = oWorkBook.Worksheets("Наименование")

А вообще нужно начинать с изучения мат части, ибо не зная самого элементарного - удачи совсем не видать.
Поэтому прочти хотя бы это
vb_tutor_rus.rar
(380.43 Кб) Скачиваний: 75
.
Бороться и искать, найти и перепрятать

agrail
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 27.02.2013 (Ср) 6:10

Re: Проблема с выводом записей из таблицы ms sql

Сообщение agrail » 27.02.2013 (Ср) 10:49

как по другому можно реализовать выше изложенную конструкцию, пробую через примеров объявлений и ссылки на лист выдает ошибку out of range run-time error "9". как иначе записать данные запроса в лист ексель?

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Проблема с выводом записей из таблицы ms sql

Сообщение ger_kar » 27.02.2013 (Ср) 11:14

Как не реализовывай - все едино. Пока не получишь ссылку на лист, ничего сделать не удастся! Это все равно, что пытаться принять пишу, не открыв рот. И главное это понимать значение своих действий. Тот туториал, который я рекомендовал к прочтению, не просто нужно бегло просмотреть, а внимательно и вдумчиво прочитать, осознать, может прочитать несколько раз подряд. Там же есть таблица с описанием самых распространенных ошибок. И даже если вообще с английским не в ладах, а использовать машинный переводчик не судьба, то из той таблицы можно было выяснить, что 9 Subscript out of range -> Индекс массива вышел за допустимые пределы. Кроме индекса массивов оное же относится и к коллекциям. Где у тебя может быть обращение к элементу коллекции? Очевидно тут Set oWorkSeet = oWorkBook.Worksheets(1). И сразу все понятно, а именно - ошибку вызывает попытка получить ссылку на элемент коллекции с несуществующим номером. Все очень просто. Немного знаний, терпения, включить логику и все должно получиться.
Бороться и искать, найти и перепрятать

agrail
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 27.02.2013 (Ср) 6:10

Re: Проблема с выводом записей из таблицы ms sql

Сообщение agrail » 13.03.2013 (Ср) 9:07

поставим вопрос по другому: как вывести значения запроса в ексель и приконектиться к ms sql? есть какой то простой пример подключения и вывода данных запроса sql?

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Проблема с выводом записей из таблицы ms sql

Сообщение ger_kar » 13.03.2013 (Ср) 9:20

Сначала надо приконектиться к ms sql, сделать запрос, а потом уже выгружать данные в Excel, а не наоборот. Первый пост темы как раз с этого и начинается, чем этот способ не устраивает?
Бороться и искать, найти и перепрятать

agrail
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 27.02.2013 (Ср) 6:10

Re: Проблема с выводом записей из таблицы ms sql

Сообщение agrail » 13.03.2013 (Ср) 10:52

есть ли наглядный пример того как приконнектиться к ms sql и вывести запросом например в ячейку екселя? ничего не могу найти подобного, помогите! просто пример, от него я уже буду отталкиваться и решать свои задачи) спасибо! с тем примером что описал выше - кстати можно отталкиваться от него - как вывести запросом данные например в одну ячейку допустим в А1???

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Проблема с выводом записей из таблицы ms sql

Сообщение ger_kar » 13.03.2013 (Ср) 13:05

agrail писал(а):есть ли наглядный пример того как приконнектиться к ms sql и вывести запросом например в ячейку екселя?
Ну так в твоем же первом посте есть пример, того как это сделать. Единственный момент, который нужно учесть, так это то, что тот пример для VBA Excel, если его использовать в VB, то нужно добавить некоторые моменты, а именно подключить в референсах нужные библиотеки и получить ссылку на лист Excel, как это делается пример есть. А далее ... Далее все зависит от того, что тебе конкретно нужно. Из твоего вопроса это не усматривается.
agrail писал(а):как вывести запросом данные например в одну ячейку допустим в А1
Тут например мне совершенно непонятно, что собственно нужно. Либо выводить весь рекордсет как есть - все столбцы и строки начиная с "A1", либо взять конкретную запись, конкретного поля рекордсета и поместить ее в ячейку "A1"? Тогда вопрос какого поля и какой записи? Если первого поля (индекс 0) и самой первой записи, тогда так
Код: Выделить всё
Sub ExportExcel(ByRef pRS As ADODB.Recordset)

    Dim oExcelApp   As Excel.Application    'Ссылка на приложение Excel
    Dim oWorkBook   As Excel.Workbook       'Ссылка на рабочую книгу Excel
    Dim oWorkSeet   As Excel.Worksheet      'Ссылка на рабочий лист Excel
    Dim oRange      As Excel.Range          'Диапазон ячеек

    'Открываем новое приложение Excel и получаем на него ссылку
    Set oExcelApp = New Excel.Application
   
    'Сделаем его видимым
    oExcelApp.Visible = True
   
    'Добавим книгу
    Set oWorkBook = oExcelApp.Workbooks.Add
   
    'Проверим есть ли рабочие листы
    If oWorkBook.Sheets.Count = 0 Then
        'Если нет, то добавим
        Set oWorkSeet = oWorkBook.Sheets.Add
    Else
        'Если есть получаем ссылку на самый первый лист
        Set oWorkSeet = oWorkBook.Sheets(1)
    End If
   
    'Проверим, что рекордсет не пуст
    If Not (pRS.BOF Or pRS.EOF) Then
        'Перейдем на первую запись
        pRS.MoveFirst
        'Ну а теперь, когда есть ссылка на лист, можно и данные добавлять :)
        oWorkSeet.Range("A1").Value = pRS.Fields(0).Value
    End If
   
End Sub

Давай так. Разобьем задачу на несколько подзадач все конкретизируем и...
Таким образом будет 2 подзадачи:
1) Получение рекордсета с данными
2) Выгрузка его данных на лист Excel

Ты рекордсет с данными получаешь? Если да, то переходим ко 2 пункту, а если нет, то в чем конкретно проблема?
Если получаешь, то дальше можешь передать рекордсет в подпрограмму, пример которой я привел, и экспортировать данные в Excel.
Бороться и искать, найти и перепрятать


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 45

    TopList