BEST logo логотип компании БЭСТ - программы для бизнеса ПРОДАЖИ
+7 (991) 312-04-37
trade@bestnet.ru
ПОДДЕРЖКА
+7 (495) 775-66-76
consult@bestnet.ru
СКАЧАТЬ
Обновления
Дистрибутивы
Авторизация

Логин:
Пароль:
Забыли свой пароль?
Регистрация
ВАШ ВОПРОС

Доступ к Личному кабинету закрыт!
Как получить доступ?


Форум

Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Подключение к таблице в MS SQL
 
Просьба не бить ногами (я не программист), а подсказать что делаю не так ;)
Есть плагин на БЭСТ4.12.1
Нужно вытащить в плагин данные из таблицы Искры (а она в MS SQL).
Что сделал и получилось:
Создал системный DSN к базе Искры. Подключился к таблице Искры из MS ACCESS (создал связанную таблицу).
Подключился к таблице ACCESS из плагина, все работает. Подключение выглядит так:
local strConnect,strSQL,p_mdb,er,s
local adoConn:=CreateObject("ADODB.Connection")
local adoCmd := CreateObject("ADODB.Command")
local p_mdb:="O:\BEST4\sibmost.mdb"
strConnect:= "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+alltrim(p_mdb)+";Persist Security Info=False"
adoConn:open(strConnect)
adoCmd:ActiveConnection := adoConn
adoCmd:CommandType := 1
strSQl = "SELECT * FROM dbo_b4vyruchka"
adoCmd:CommandText := strSQL
rs:=adoCmd:execute()
if rs:bof() .and. rs:eof()
sayandwait('ничего нет ')
else
sayandwait('что-то есть ')
do while !rs:eof()
//вот здесь пишем текст что делать с этой выборкой =)
//t:=rs:Fields('uchastokid'):value
rs:movenext()
enddo
endif
adoConn:close()

А напрямую подключится не получается. Строка подключения к таблице SQL в ACCESSE выглядит так:
ODBC;DSN=sibmost;APP=MicrosoftR Access;WSID=APPSRV;DATABASE=sibmost;Network=DBMSSOCN;Trusted_Connection=Yes;TABLE=dbo_b4vyruchka

Крутил и так и эдак - ошибка подключения. Например:
strConnect:= "Provider=ODBC;DSN=sibmost;APP=MicrosoftR Access;WSID=APPSRV;DATABASE=sibmost;Network=DBMSSOCN;Trusted_Connection=Yes;TABLE=dbo_b4vyruchka"

Еще и сообщение о ошибке все из кракозябр. Что конкретно не так - не понять.
 
Подождите дак ADO или ODBC ?
На каком основании Вы решили что ODBC это напрямую ?
Она использует меньше возможностей MS SQL чем ADO.
Вы все правильно делаете через CreateObject()
Так и надо.
 
Вот еще раз попрошу не пинать, но ADO от ODBC я не отличу :((
Уверен, что делаю неправильно, т.к. мне пришлось установить ACCESS, затем установить связь с SQL из ACCESS, а уже потом устанавливать соединение с таблицей ACCESS из плагина. Но можно же наверняка обойти ACCESS и установить соединение напрямую (харбор-SQL). Я так понимаю, просто строку подключения нужно правильно написать. Но как - понятного примера найти не смог, а разобраться самому квалификации не хватает...
 
Вы установили компоненту ADO установив ACCESS/
И теперь ей пользуетесь.
Дальше Вам по сути ACCESS не нужен.
Вам просто надо поднять документацию и пользоваться командами напрямую.

ВОт пример как мы стартуем хранимые процедуры например.

Код
cn := CreateObject("ADODB.Connection")
cn:Provider := "SQLOLEDB"
cn:ConnectionString :=m->cConnectSql

cn:Open()
cmd := CreateObject("ADODB.Command")

adCmdStoredProc:=4

cmd:ActiveConnection := cn
cmd:CommandType := adCmdStoredProc
cmd:CommandText := "mv_kntrinsert"
cmd:Parameters:Refresh()

cmd:Parameters(1):value := HB_OEMTOANSI(zakaz->agentcode)
cmd:Parameters(2):value := HB_OEMTOANSI(left(zakaz->agentname,50))
 
Ну да, вот с этого я и начал.
Вот у вас в m->cConnectSql что ?
Вы ведь к SQL подключаетесь, судя по названию переменной ?
Или в какой документации можно найти более-менее близкий пример, пригодный для копирования без уточнения смысла каждого параметра строки подключения (ну это я так, фантазирую)?
Изменено: Владимир Гаклин - 21.11.2008 17:23:03
 
cConnectSql - строка подключения с логином и паролем и прочим необходимым.
Дальше по OLEDB берите доку и как пользоваться
ими через WinAPI
 
Угу. Если бы мне нужно было знать OLEDB для моей работы, я бы начал с документации. Я поскольку мне нужно решить конкретную прикладную задачу - я ищу ПРИМЕР рабочей строки подключения. Что там логин пароль и прочее необходимое - догадываюсь.
Понял-отстал. Полезу в инет искать пример.
 
Мы ее берем из текстового файла.
Сейчас его не посмотреть.
Как его создаем мы.

Берем Far
Создаем файл 1.udl
После создания жмем на нем Ентер
Открывается интерфейс подключения.
В нем настраиваем подключение к таблице.
В результате в этом файле будет строка подключения.
Ей и пользуемся

Все наш программист нашел в Инете.
 
Ничего прикладного в Вашем Вопросе не вижу.
Общий подход к работе с любой таблицей в MS SQL
 
Цитата
nordk пишет:
Мы ее берем из текстового файла.
Берем Far
Создаем файл 1.udl
После создания жмем на нем Ентер

Спасибо, буду рыть.
Правда, у меня на Ентер выскаивает ошибка, но с этим авось разберусь.
 
Цитата
nordk пишет:
Ничего прикладного в Вашем Вопросе не вижу.
Общий подход к работе с любой таблицей в MS SQL

Ну это зависит от ситуации.
Если есть желание по Испании попутешествовать - неплохо и язык подучить.
А если нужно просто прочитать пару фраз на испанском - проще найти словарь.
Вот у меня в данном случае - второй вариант.
Изменено: Владимир Гаклин - 21.11.2008 18:25:47
 
Вы задаете Вопрос как средствами WinApi подключиться к таблицам MSSQL.
Ничего особенного именно к харбору или к БЭСТу нет.
Я поделился с Вами как это делаем мы.

Еще у MS SQL есть клиент, который позволяет подключаться из командной строки.
Вы задаете Вопрос как составлять эту командную строку...
 
В нашей задачке раскопал файлик.
У нас звучит так:
Код
cConnectSql:="Provider=SQLOLEDB.1;Password=[xxx];Persist Security Info=True;User ID=[xxx];Initial Catalog=baza;Data Source=SDBS"

В отдельных местах заменид реальные значения на [xxx]
 
Имею такую проблему.
Подключился к MSSQL через ADO.
Запрашиваю select, получаю recordset.
При этом не работают свойства eof и bof. При попытке вызова БЭСТ молча и без логов вылетает.
movenext() отрабатывается, fields() отрабатывается. Даже eof отрабатывается, если набрать в отладчике ?rs:eof.
Но в программе eof вызывает вылет. Попробовал и свойство и метод, пробовал проверять значение, присваивать его, передавать в качестве параметра. Безрезультатно. Вылетает.
С уважением, Новиков Алексей.
 
Алексей а примыр бы кода, на котром вылетает
 
Код
local strConnect,strSQL,rs, n, lEOF, lBOF
local adoConn:=CreateObject("ADODB.Connection") 
local adoCmd := CreateObject("ADODB.Command") 

  strConnect:= 'Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;User ID=sa;Initial Catalog=GKU;Data Source=UCUCOM'
  adoConn:open(strConnect) 
  adoCmd:ActiveConnection := adoConn 
  adoCmd:CommandType := 1 

  strSQl = "SEL ECT * FR OM kart" 
  adoCmd:CommandText := strSQL 

  rs:=adoCmd:execute() 

  sayandwait(valtype(rs:Fields('id1'):value))
  dispoutat(0,0,rs:eof)

На последней строчке и вылетает
С уважением, Новиков Алексей.
 
А если перед DISPOUT
сделать например x:=rs:EOF
И в отладчике посмотреть на значение x ?
 
Цитата
nordk пишет:
сделать например x:=rs:EOF

Тогда вылетит на этой строке. Я пробовал.
Вот если просто в отладчике набрать ?rs:eof, то показывает .F.
С уважением, Новиков Алексей.
 
а ?rs:EOF() что показывает ?
а если сначала сделать
adocmd:Parameters:Refresh() ?
 
Цитата
nordk пишет:
а ?rs:EOF() что показывает ?

Тоже .F.
Цитата
nordk пишет:
а если сначала сделать

Не помогает. Поставил несколько штук в разных местах до dispout()
С уважением, Новиков Алексей.
 
x:=rs:EOF() пробовали ?
 
Цитата
nordk пишет:
x:=rs:EOF() пробовали ?

Пробовал. Вылетает.
С уважением, Новиков Алексей.
 
Такой ещё Вопрос. Не совсем, правда, в тему.
Каким внешним инструментом удобно пользоваться при работе с MS SQL?
Не менеджер базы, а инструмент для подготовки и отладки запросов. Чтобы кроме select и другие команды отрабатывались.
С уважением, Новиков Алексей.
 
В MS SQL есть Query Analizer (примерно на слух написал :)) )
Страницы: 1
Читают тему (гостей: 1)