Форум » [x]Harbour » Как прицепится к ADS по сети ? » Ответить

Как прицепится к ADS по сети ?

Dima: Есть ADS 10.10 в настройках у него стоит порт 6262 Вот таким исходником пытаюсь к нему подрубиться. [pre2] #include "ads.ch" proc main REQUEST ADS rddSetDefault( "ADSCDX" ) SET SERVER REMOTE SET CHARTYPE TO OEM ? AdsConnect("MYSERVER") // .f. ? AdsConnect("//127.0.0.1/:6262") // .f. return [/pre2] ADS.INI в папке с прогой [pre2] [MYSERVER] LAN_IP=127.0.0.1 LAN_PORT=6262 [/pre2] Где мой косяк ?

Ответов - 257, стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 All

Haz: Dima пишет: А выход кажется придумал мне кажется даже два коннекта из одной проги к одному серверу не оч правильно ))) мож еще чего полезет ... кто знает, или коллизии по блокировке пойдут. попробуй все ж через словарь, а то одна нога в лыже а другая в коньке получается

Dima: Haz пишет: а то одна нога в лыже а другая в коньке получается пока так и есть

Haz: Dima пишет: пока так и есть главное что работает, хуже не бывает что то улучшать - обычно заканчивается полной переделкой всего


Dima: Вообще странно что нельзя организовать SQL запрос из под простого AdsConnect , не AdsConnect60 То ли не доработка то ли фича такая.

Haz: Dima пишет: То ли не доработка то ли фича такая. наверное это фича ADS чтоб использовать словарь. Вместо AdsConnect можно использовать AdsConnect60, а наоборот нельзя

Dima: да это я понял уже к сожалению от SQL запросов пришлось отказаться так как при старой схеме подключения через AdsConnect плюс к этому еще нормально юзать AdsConnect60 не получится. Нужно как ты и говорил базы в словарь и юзать AdsConnect60 только. Вот если бы работала AX_SetConnectionHandle тогда бы я решил проблему и смог бы вернуться на основной хэндл без переподключения (если я конечно верно понял как она работает) , но во время сборки получаю что функции такой нет.

Haz: Dima пишет: Вот если бы работала AX_SetConnectionHandle она живет в DBFAXS.LIB это что то для FiveWin , не уверен что спасет. Дима, а что мешает все dbf в словарь то пихнуть ? Просканировать папаку с базами из проги ( даже можно отдельный запихиватель/выпмхиратель написать ) и добавить автоматом. к сожалению от SQL запросов пришлось отказаться зато опыт приобрел

Dima: Ну не хочу я пока совать базы в словарь так как чую что это где то вылезет Все же жутко хочется что бы и adsConnect и adsConnect60 жили вместе. Казалось бы сложного нет ничего. В начале проги подключаемся через adsConnect и получаем MAINHANDLE Далее если нужно сделать SQL запрос то используем adsConnect60 и получаем TEMPHANDLE Поюзав оный делаем так (предварительно закрыв базу ADSSQL) AdsDisconnect(TEMPHANDLE) И вот тут нужная некая функция XYZ которая вернет меня к предыдущему и еще активному подключению XYZ(MAINHANDLE). По ходу это должно сработать ! Но что то не вижу такого в доке.

Dima: Haz До кучи и вопрос на засыпку В одной и той же проге ты подключаешься через adsConnect60 к одному серверу и через adsConnect60 к другому серверу. Хэндлы у подключений будут разные. Как ты будешь между ними переключаться ?

Haz: Dima пишет: Хэндлы у подключений будут разные. Как ты будешь между ними переключаться ? подключка идет к словарю, в SELECT можно явно указать из какого словаря брать таблицу а значит и переключаться не придется сталкивался пару лет назад , но честно не помню как именно выкрутился . Надо будет посмотреть )) помню через что то типа Create Link ... потом забыл как страшный сон , не требовалось больше.

Dima: Haz пишет: помню через что то типа Create Link завтра снова буду ковырять так как не хочется отказываться от SQL запросов

Dima: По ходу проблему решил В самом начале программы adshandle:=AdsConnection() // главный хэндл Когда нужно выполнить SQL запрос , подключаюсь к словарю через adsConnect60 и получаю новый хэндл TMPHH После того как поюзал фильтр делаю так в самом конце AdsDisconnect(tmphh) AdsConnection(adshandle,.T.) // установить текущим основное подключение через adshandle При чем если делать AdsDisconnect(tmphh) то в лог пишется ошибка 10054 говорящая лишь о принудительном отключении , по сему AdsDisconnect(tmphh) не делаю совсем и только 1 раз цепляюсь через adsConnect60 а в остальных случаях делаю AdsConnection(TMPHH,.T.) Вот вроде и все Dima пишет: При чем если делать AdsDisconnect(tmphh) то в лог пишется ошибка 10054 говорящая лишь о принудительном отключении , по сему AdsDisconnect(tmphh) Оно как бы и понятно почему возникает , так как словарь открыт. А как ему корректно сделать CLOSE ? Dima пишет: AdsConnection(adshandle,.T.) Кстати не подозревал о 2-м параметре

Haz: Dima пишет: Кстати не подозревал о 2-м параметре до сих пор тоже не подозревал, как нашел ?

Dima: Haz пишет: до сих пор тоже не подозревал, как нашел ? смотрел пример svn\harbour-trunk\harbour\contrib\rddads\tests\datad.prg в нем в комментах есть [pre2] // if you wanted to retain this connection for later, you could use // hAdminCon := AdsConnection(0) // This get/set call would return the current connection, then set it to 0 [/pre2] Ну и на удачу решил попробовать и получилось !

Haz: Dima пишет: у и на удачу решил попробовать и получилось ! может там еще какие чудеса есть а мы то не знаем

Dima: Haz пишет: может там еще какие чудеса есть а мы то не знаем хорошо бы еще такое чудо найти (надо мне) но пока не вижу Dima пишет: Dima пишет: цитата: При чем если делать AdsDisconnect(tmphh) то в лог пишется ошибка 10054 говорящая лишь о принудительном отключении , по сему AdsDisconnect(tmphh) Оно как бы и понятно почему возникает , так как словарь открыт. А как ему корректно сделать CLOSE ?

Haz: Dima пишет: Оно как бы и понятно почему возникает , так как словарь открыт. может это алиас открыт ? и на что влияет эта 10054 ( не нгашел ее в хелпе )

Dima: Haz пишет: может это алиас открыт ? ну у меня так [pre2] if tmphh==nil if !file(cDictionary) // для каждого юзера создаем свой словарик ADSDDCREATE( cDictionary,, "Словарь данных ADSDEMO",@tmphh) AdsDDaddTable( "volvoAT",ads_share+"dbf\volvo.dbf", "") AdsDDCreateUser(, alltrim(sys_name), "" , "Пользователь "+alltrim(sys_name)) Closetmphh() endif tmphh:=nil IF !adsConnect60( cDictionary,_servtype,alltrim(sys_name), , ,@tmphh ) Soob("Ошибка подключения к словарю данных","r/r","gr+/r") return nil else *AdsSetCharType(2, .t.) AdsSetDeleted(.T.) AdsRightsCheck(.f.) ENDIF else AdsConnection(tmphh,.t.) endif [/pre2] То есть мне бы хотелось закрывать временный коннект через AdsDisconnect(tmphh) но так как словарь открыт то получаю ошибку (не смертельную) 10054 и ее видно только в логе ADS. Вот и требуется каким то образом словарь в начале закрыть , но чем ? Haz пишет: и на что влияет эта 10054 ( не нгашел ее в хелпе ) В Help ее нет http://devzone.advantagedatabase.com/dz/Content.aspx?Key=17&RefNo=081204-2102

Dima: Dima пишет: Dima пишет: цитата: AdsConnection(adshandle,.T.) Кстати не подозревал о 2-м параметре По ходу я тупанул и нет 2-ого параметра Вот такой вызов AdsConnection() вернет текуший хендл подключения А вот так AdsConnection(adshandle) переключится на него [pre2] HB_FUNC( ADSCONNECTION ) /* Get/Set func to switch between connections. */ { HB_ADS_RETCONNECTION( hb_ads_getConnection() ); hb_ads_setConnection( HB_ADS_PARCONNECTION( 1 ) ); } [/pre2]

Haz: Dima пишет: А вот так AdsConnection(adshandle) переключится похоже на правду ну у меня так и нет ни одного вызова dosql ? ADS кеширует запрjсы , может перед дисконнектом кеш слить сначала ?



полная версия страницы