Подключится к MSSQL

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

Подключится к MSSQL

Сообщение Vini » 02.11.2004 (Вт) 15:36

Привет, всем!
Такой вопрос от чайника :arrow: никогда не программировал.
Есть сервер с MSSQL не на localhost, я создал форму VB6, кинул на нее элемент дата и пытаюсь создать соединение, в опцыях DataSourse отсутствует MSSQL. Как соедениться????

Если можно по подробнее или ткните носом в интересную статейку.
Заранее спасибо.

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 03.11.2004 (Ср) 11:51

Код: Выделить всё
ADODC1.ConnectionString = "Driver={SQL Server};server=nelocalhost;database=master;UID=sa;PWD=;"
Call ADODC1.Open

Это если тебя устроит коннект через ODBC-драйвер, а не через OLEDB-провайдера. Впрочем, мне почему-то кажется, что он тебя устроит :) ...

Dzhon
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 236
Зарегистрирован: 09.12.2003 (Вт) 13:30
Откуда: Россия, Омск

Сообщение Dzhon » 03.11.2004 (Ср) 18:45

На форму помести MSHFlexGrid1 и Command1
а также в проекте нужно установить ссылку на ADO

Код: Выделить всё

Private Sub Command1_Click()

Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim strCN As String
Dim strRS As String

strCN = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=ИмяБАЗЫ;Data Source=ИмяСЕРВЕРА"

strRS = "SELECT * FROM orders"

cn.Open strCN 'Если NT аутентификация, а если NT и MSSQL тогда _
              'строка подключения будет выглядеть так: _
'<strCON="Provider=SQLOLEDB.1;Persist Security Info=False;User
'ID=ИмяЮзера;Initial Catalog=ИмяБАЗЫ;Data Source=ИмяСЕРВЕРА">
'и при открытии cn.Open strCN, ИмяЮзера, Пароль
'Все коннект открыт

'Создаем рекордсет

With rs
    .CursorLocation = adUseClient
    .Open strRS, cn, adOpenDynamic, adLockOptimistic
End With

'Привязываем MSHFGrid к рекордсету

Set Me.MSHFlexGrid1.DataSource = rs

'Ну вот и получены данные от MSSQL Server'а
End Sub

'Помогло? :wink:

Vini
Обычный пользователь
Обычный пользователь
 
Сообщения: 93
Зарегистрирован: 29.03.2004 (Пн) 5:40

Сообщение Vini » 06.11.2004 (Сб) 10:27

Dzhon
Спасибо тебе. Подключился через DSN, а по твоему методу, ничего не полкчилось.

А можно по дороге вопрос спросить?

Почему не получается открыть второе соединение и запустить новый RS2 в нутри RS

к примеру код
Код: Выделить всё
sql = "Select * From Table1 where (county_code = 'mana' or county_code = 'sara') and dip = '" & txtdip.Text & "' order by id asc"
    rs.Open sql, Conn
        Counter = 0
        Do Until rs.EOF
        Counter = Counter + 1
            prefix = rs("dlp")
            serial = rs("dli")
           

               
                sqlsold = "Select * From Table2 where Activity_date = 2004 "
                rs2.Open sqlsold, Conn2
           


        rs.MoveNext
        Loop


Вот ругается сволочь, говорит что нельзя использовать объект, так как он уже открыт. Странно, я ведь создал Нщвый rs2 и новый Conn2.

Так что ничего не выйдет.
А очень надо.
Спасибо.

Dzhon
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 236
Зарегистрирован: 09.12.2003 (Вт) 13:30
Откуда: Россия, Омск

Сообщение Dzhon » 07.11.2004 (Вс) 9:36

Не нужно повторно создавать объект Connection, ты его создал и используй его. :wink:

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

Vini
Обычный пользователь
Обычный пользователь
 
Сообщения: 93
Зарегистрирован: 29.03.2004 (Пн) 5:40

Сообщение Vini » 07.11.2004 (Вс) 16:58

Dzhon писал(а):Не нужно повторно создавать объект Connection, ты его создал и используй его. :wink:


Пожалуйста, подправьте мой код. Я что то не пойму.
Мне выдается ошыбка Operation is not allowed wher object is open

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


Ругался, говорил что драйвер не определен.

Dzhon
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 236
Зарегистрирован: 09.12.2003 (Вт) 13:30
Откуда: Россия, Омск

Сообщение Dzhon » 07.11.2004 (Вс) 20:15

И правильно ругается, потому что ты пытаешься в цикле открыть rs2

sql = "Select * From Table1 where (county_code = 'mana' or county_code = 'sara') and dip = '" & txtdip.Text & "' order by id asc"
rs.Open sql, Conn
Counter = 0
Do Until rs.EOF
Counter = Counter + 1
prefix = rs("dlp")
serial = rs("dli")



sqlsold = "Select * From Table2 where Activity_date = 2004 "
rs2.Open sqlsold, Conn2
'Здесь происходит открытие rs2 при каждом проходе цикла что недопустимо, лучше получи 2 rs а потом сравнивай как хочешь
в смысле надо переделать получение данных из базы


rs.MoveNext
Loop

P.S. Попробуй подключиться к MSSQL через DataEnvironment и провайдера Microsoft OLE DB Provider for SQL Server. Это не по поводу твоего кода, просто лучше использовать родного провайдера данных :wink:

Vini
Обычный пользователь
Обычный пользователь
 
Сообщения: 93
Зарегистрирован: 29.03.2004 (Пн) 5:40

Сообщение Vini » 08.11.2004 (Пн) 2:43

Дело кончилось следующим.
Подключился через DSN без проблем.

А с RS2

Код: Выделить всё
sql = "Select * From Table1 where (county_code = 'mana' or county_code = 'sara') and dip = '" & txtdip.Text & "' order by id asc"
    rs.Open sql, Conn
        Counter = 0
        Do Until rs.EOF
        Counter = Counter + 1
            prefix = rs("dlp")
            serial = rs("dli")
           

               
                sqlsold = "Select * From Table2 where Activity_date = 2004 "
                rs2.Open sqlsold, Conn2
                Set bla_bla = rs2("bla_bla")
                Do until rs2.EOF
                 .....

                rs2.MoveNext
                Loop
                [b]Conn2.Close[/b]



        rs.MoveNext
        Loop


Вот после добавления Conn2.Close все стало на свои места и нет никакой ругани. Все работает.
Спасибо за участие.

Dzhon
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 236
Зарегистрирован: 09.12.2003 (Вт) 13:30
Откуда: Россия, Омск

Сообщение Dzhon » 08.11.2004 (Пн) 11:43

Да не в conn2 собака зарыта, а в rs2 просто когда ты сейчас закрываешь conn2 то рекордсет убивается, коннект может один и тотже использоваться и в 1 и во 2-м рекордсете
Я недаром не посоветовал рекордсет убить, а предложил пересмотреть способ получения данных т.к. если у тебя 1000 строк в rs то представляешь как будет садиться сетевой трафик(а также ресурсы сервера и РС) (открыл..закрыл..открыл..закрыл...... :shock: )

Vini
Обычный пользователь
Обычный пользователь
 
Сообщения: 93
Зарегистрирован: 29.03.2004 (Пн) 5:40

Сообщение Vini » 08.11.2004 (Пн) 14:36

Хорошо, что бы вы посоветовали?
Построить строковой массив в rs1, а потом брать из массива элементы и гнать через 2й rs?

P.S. Переделать структуру DB не могу, нема прав :cry:

Dzhon
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 236
Зарегистрирован: 09.12.2003 (Вт) 13:30
Откуда: Россия, Омск

Сообщение Dzhon » 08.11.2004 (Пн) 15:59

А зачем в массив, может просто с rs'тами работать, а нужные данные заливать куда надо :?: (хотя я получается поверхностно сужу, на месте виднее....)

Vini
Обычный пользователь
Обычный пользователь
 
Сообщения: 93
Зарегистрирован: 29.03.2004 (Пн) 5:40

Сообщение Vini » 08.11.2004 (Пн) 16:08

Dzhon писал(а):А зачем в массив, может просто с rs'тами работать, а нужные данные заливать куда надо :?: (хотя я получается поверхностно сужу, на месте виднее....)


Вы правы, при запуске этой формы, sqlServer берет от 65 - 89% рессурсов. А что делать?

Мне надо брать данные из одной таблицы, обрабатывать, получить результат, а потом из другой таблицы брать данные и обрабытывать опять.
Так что пока я не вижу другого выхода, только цыкл в нутри цыкла.

Dzhon
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 236
Зарегистрирован: 09.12.2003 (Вт) 13:30
Откуда: Россия, Омск

Сообщение Dzhon » 08.11.2004 (Пн) 20:56

Мне конечно издалека судить трудно, т.к. не знаю структуру базы и взаимосвязь этих таблиц, но MSSQL очень гибкое приложение и наверно можно сформировать запрос так чтобы на выходе уже были готовые данные. Попробуйте подойти к проблеме с этой стороны.... :wink:


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

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

Сейчас этот форум просматривают: PetalBot, SemrushBot и гости: 1

    TopList