Автор | Сообщение |
|
| |
Пост N: 2932
Зарегистрирован: 17.05.05
|
|
Отправлено: 04.04.13 20:38. Заголовок: Как прицепится к ADS по сети ?
Есть ADS 10.10 в настройках у него стоит порт 6262 Вот таким исходником пытаюсь к нему подрубиться. #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 ADS.INI в папке с прогой [MYSERVER] LAN_IP=127.0.0.1 LAN_PORT=6262 Где мой косяк ?
|
|
|
Ответов - 257
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
All
[только новые]
|
|
|
| |
Пост N: 161
Зарегистрирован: 20.02.11
|
|
Отправлено: 04.04.14 17:09. Заголовок: Dima пишет: що за н..
Dima пишет: AdsCreateSqlStatement( cAlias, 3 ) Дима, попозже ок ? полно дел по дому )
|
|
|
|
| |
Пост N: 3884
Зарегистрирован: 17.05.05
|
|
Отправлено: 04.04.14 17:18. Заголовок: Haz OK подожду Пер..
Haz OK подожду Переделал снова пример , результат нулевой proc main #include "ads.ch" local hh local sQlStr REQUEST ADS rddSetDefault( "ADSCDX" ) REQUEST HB_LANG_RU866 HB_LANGSELECT("RU866") REQUEST HB_CODEPAGE_RU866 hb_cdpSelect( "RU866" ) SET SERVER LOCAL AdsSetFileType(ADS_CDX) ? AdsConnect(".\") // .t. ? hh:=AdsConnection() // 17005400 use volvo new Select 0 ? AdsCreateSQLStatement("test",2) // .t. sQlStr:="SELECT * FROM VOLVO WHERE FIRMA=7" ? ADSVERIFYSQL(sQlStr) // .f. ? AdsExecuteSqlDirect(sQlStr) // .f. ? AdsGetLastError() // 7200 ? alias(),reccount() wait return ЗЫ чисто ради интереса попробовал работу функций типа SP_* , работают однако cAlias := "cursor" cSql := "EXECUTE PROCEDURE sp_mgGetInstallInfo()" ADSCreateSQLStatement( cAlias,2 ) AdsExecuteSQLDirect( cSql ) While !(cAlias)->( eof() ) * ? (cAlias)->Username, (cAlias)->Address, (cAlias)->DictionaryUser ? (calias)->Version (cAlias)->( dbSkip() ) End
|
|
|
|
| |
Пост N: 162
Зарегистрирован: 20.02.11
|
|
Отправлено: 04.04.14 18:40. Заголовок: Дима почту скинь , ..
Дима почту скинь , часов в 9 отправлю пример работающий в конфу позже выложу PS. А пока - почему может не работать 1. Нужно создать словарь ADSDDCREATE( cDictionary,, "Словарь данных ADSDEMO" ) 2 создать пользователя AdsDDCreateUser(, "Guest", "" , "Пользователь Guest" ) 3 пихнуть в словарь базу AdsDDaddTable( "AdsDemoAT", "AdsDemoAT.dbf", "" ) 4 не использовать в запросе двойную ковычку " а только ' cSql := "SELECT * FROM AdsDemoAT WHERE LAST Like '%m%'" 5 цепляться к словарю adsConnect60( cDictionary, 0, "ADSSYS", '', 7, @hConnection ) и только потом запрос SQL
|
|
|
|
| |
Пост N: 3885
Зарегистрирован: 17.05.05
|
|
Отправлено: 04.04.14 18:54. Заголовок: Да оно и без словаря..
|
|
|
|
| |
Пост N: 163
Зарегистрирован: 20.02.11
|
|
Отправлено: 04.04.14 20:57. Заголовок: Dima пишет: ЗЫ поч..
Dima пишет: улетело, в конфу позже
|
|
|
|
| |
Пост N: 3886
Зарегистрирован: 17.05.05
|
|
Отправлено: 04.04.14 21:14. Заголовок: да получил , спасибо..
да получил , спасибо ! я полагал что и без словаря все должно работать...... ушел думать.
|
|
|
|
| |
Пост N: 3887
Зарегистрирован: 17.05.05
|
|
Отправлено: 05.04.14 09:59. Заголовок: Haz я пожалуй вылож..
Haz я пожалуй выложу пример. proc main #include "ads.ch" local sQlStr local cpath:=hb_CurDrive()+":\"+CurDir()+"\" local cDictionary:=cpath+"temp.add" REQUEST ADS rddSetDefault( "ADSCDX" ) REQUEST HB_LANG_RU866 HB_LANGSELECT("RU866") REQUEST HB_CODEPAGE_RU866 hb_cdpSelect( "RU866" ) SET SERVER LOCAL AdsSetFileType(ADS_CDX) if !AdsConnect(cpath) ? "Не могу подключится к ADS" quit endif use VOLVO shared new // можно не открывать но у меня в задаче эта база открыта if !file(cDictionary) ADSDDCREATE( cDictionary,, "Словарь данных ADSDEMO" ) endif IF adsConnect60( cDictionary, 0, "ADSSYS", '', 7, ) * AdsDDCreateUser(, "Guest", "" , "Пользователь Guest" ) // и без нее работает AdsDDaddTable( "volvoAT", cpath+"volvo.dbf", "" ) ELSE ? "Ошибка подключения к словарю данных " ENDIF Select 0 AdsCreateSQLStatement(,2) sQlStr:="SELECT * FROM volvoAT WHERE indeks Like '%.44.07%'" ADSVERIFYSQL(sQlStr) AdsExecuteSqlDirect(sQlStr) ? alias(),reccount(),fcount() wait browse() return А как запросом получить и выбранные номера записей из базы VOLVO ?
|
|
|
|
| |
Пост N: 164
Зарегистрирован: 20.02.11
|
|
Отправлено: 05.04.14 10:40. Заголовок: Dima пишет: я пожал..
Dima пишет: в случае с SQL вот это можно не писать if !AdsConnect(cpath) ? "Не могу подключится к ADS" quit endif т.к. подключаемся через словарь и путь есть в пути словаря use VOLVO shared new // можно не открывать но у меня в задаче эта база открыта открывать таблицу не надо вообще , сам долго не мог к этому привыкнуть ))) таблица - это то из чего делаем выборку и к ней доступ в SQL по имени и через словарь ( если таких словарей несколько ) а рабочая область получается в результате запроса - называется курсором , в зависимости от типа может быть редактируемой или толькочтение. Следовательно SHARED - тоже лишнее ( через сервер адс курсор и так всегда будет в режиме шары ) Если записывать значения в таблицу через UPDATE Volvo SET indeks = 100 то и Rlock() не требуется ( сервер сам все делает ) Если через (cAlias)->indeks := 100 - тогда Rlock() нужен Если коротко - то есть таблица и есть курсоры с нее , меняя значение в курсоре ( в раб области ) - меняем таблицу , или напрямую меняем таблицу без создания курсора ))) AdsDDCreateUser(, "Guest", "" , "Пользователь Guest" ) // и без нее работает работает потому что в примере использовал системного пользователя ADSSYS - у него права админа а так словарю можно нарезать пользователей и дать им разные права на таблицы , разные пароли на вход и т.д. Dima пишет: цитата: | А как запросом получить и выбранные номера записей из базы VOLVO ? |
| в адс через запрос есть только ROWID , Recno() через запрос вроде не получить. я в таблицах использую поле ID типа autoinc ( нагляднее чем ROWID ). А зачем список номеров записей нужен , уверен есть варианты запроса через ROWID PS. Если работать со словарями - оч. рекомендую поставить бесплатную Advantage Architect для управления базами
|
|
|
|
| |
Пост N: 3888
Зарегистрирован: 17.05.05
|
|
Отправлено: 05.04.14 10:46. Заголовок: Haz пишет: А зачем ..
Haz пишет: цитата: | А зачем список номеров записей нужен |
| например если в выборке я нашел нужную мне запись и нажав на ней ВВОД оказался бы на нужной записи в базе VOLVO что то типа VOLVO->(dbgoto(ADSSQL->recs RECNO() из VOLVO))
|
|
|
|
| |
Пост N: 165
Зарегистрирован: 20.02.11
|
|
Отправлено: 05.04.14 10:55. Заголовок: Dima пишет: что то ..
Dima пишет: цитата: | что то типа VOLVO->(dbgoto(ADSSQL->recs RECNO() из VOLVO)) |
| так сработает - т.к. в курсоре есть RECNO() я в данном случае использую динамический поиск - т.е. перестраиваю курсор самой базы ( в твоем случае VOLVO ) под условие нужного SQL или через ADSSetFilter - тоже быстро
|
|
|
|
| |
Пост N: 3889
Зарегистрирован: 17.05.05
|
|
Отправлено: 05.04.14 10:59. Заголовок: Haz пишет: так сраб..
Haz пишет: цитата: | так сработает - т.к. в курсоре есть RECNO() |
| Да но это RECNO() не то. Допустим в результате SQL выборки попали 2 записи с RECNO() 5677 и 10000999 (из базы VOLVO). Как мне узнать эти RECNO в самой выборке ? Вот бы как то в выборку вставить колонку в которой будет RECNO() из базы VOLVO. В теории мне только эта колонка и нужна так как дальше я смогу по этой выборке ходить связав ее по RELATION c базой VOLVO
|
|
|
|
|
| |
Пост N: 3890
Зарегистрирован: 17.05.05
|
|
Отправлено: 05.04.14 11:12. Заголовок: Haz пишет: или чере..
Haz пишет: цитата: | или через ADSSetFilter - тоже быстро |
| То же им пользуюсь но нужно в уже существующем фильтре выбрать вхождения строк в названия к примеру и это работает не так быстро как с SQL запросом
|
|
|
|
| |
Пост N: 166
Зарегистрирован: 20.02.11
|
|
Отправлено: 05.04.14 11:16. Заголовок: Recno в случае редак..
Recno в случае редактируемого покажет номер физической записи из таблицы , курсор - это как фильтр по таблице и в курсоре и в таблице Recno будет совпадать
|
|
|
|
| |
Пост N: 3891
Зарегистрирован: 17.05.05
|
|
Отправлено: 05.04.14 11:21. Заголовок: не совпадают проверя..
не совпадают проверял так AdsExecuteSqlDirect(sQlStr) ? volvo->(recno()),ADSSQL->(recno()) // 1,1 adssql->(dbskip()) ? volvo->(recno()),ADSSQL->(recno()) // 1,2
|
|
|
|
| |
Пост N: 167
Зарегистрирован: 20.02.11
|
|
Отправлено: 05.04.14 11:25. Заголовок: Haz пишет: Вот бы к..
Haz пишет: цитата: | Вот бы как то в выборку вставить колонку в которой будет RECNO() из базы VOLVO. |
| только изменить структуру базы , добавив везде поле ID тип Integer ( Autoinc нет в CDX )а в подчиненную еще и ID_MASTER тип Integer ( перекроить структуру и перезаполнить ID можно теми же запросами через ARC32.EXE )
|
|
|
|
| |
Пост N: 168
Зарегистрирован: 20.02.11
|
|
Отправлено: 05.04.14 11:28. Заголовок: Haz пишет: ? volvo-..
Haz пишет: цитата: | ? volvo->(recno()),ADSSQL->(recno()) // 1,1 adssql->(dbskip()) ? volvo->(recno()),ADSSQL->(recno()) // 1,2 |
| так ты в вольво стоишь на месте а адсскуль - скипанул на единицу попробуй через запрос найти любую уникальную запись вольво и сравни recno по ней
|
|
|
|
| |
Пост N: 3892
Зарегистрирован: 17.05.05
|
|
Отправлено: 05.04.14 11:50. Заголовок: я не про то ;) у ADS..
я не про то ;) у ADSSQL свои recno() а в VOLVO свои. И мне нужно сидя в бровсе в ADSSQL при выходе из него оказаться на такой же записи как и в базе ADSSQL. То есть сидел я выборке на коде товара OC2187E-ERT то после выхода должен оказаться в базе VOLVO тоже на коде OC2187E-ERT
|
|
|
|
| |
Пост N: 169
Зарегистрирован: 20.02.11
|
|
Отправлено: 05.04.14 12:05. Заголовок: Dima пишет: у ADSSQ..
Dima пишет: цитата: | у ADSSQL свои recno() а в VOLVO свои. |
| ТОЧНО (((( тогда через ID или можно через ROWID попробовать через ROWID можно, но эта псевдоколонка должна быть определена явно , причем адс уверяет что это выход ))) End users and application developers can use rowids for several important functions: · Rowids are the fastest means of accessing particular rows. · Rowids can be used to see how a table is organized. · Rowids are unique identifiers for rows in a given table. В качестве минуса - нельзя строить запрос SELECT * , нужно с перечислением полей This pseudocolumn is not evident when listing the structure of a table by executing a SELECT * FROM . . . statement. However, each row's address can be retrieved with an SQL query using the reserved keyword ROWID as a column name, for example: второй минус RECNO() сначала придется поймать фильтром , а только потом GoTO ((((
|
|
|
|
| |
Пост N: 3893
Зарегистрирован: 17.05.05
|
|
Отправлено: 05.04.14 13:43. Заголовок: почитал help DBDBDBT..
почитал help DBDBDBTABTABBrXAAN The first six characters of the ROWID represent the database ID. It is based on the connection path. The next six characters of the ROWID represent the table ID. If the table is a database table, that is, a table that belongs to an Advantage Data Dictionary, the table ID represents the object ID of the table in the data dictionary. If the table does not belong to an Advantage Data Dictionary, the table ID is constructed using the name of the table file. The last six characters represent the record number of the row in the table. Получается что BrXAAN RECNO() из базы VOLVO , но как его к цифре привести не понял Как то так но это не все......... hb_base64Decode(right(rowid,6)) нужна функция что в целое переведет
|
|
|
|
| |
Пост N: 170
Зарегистрирован: 20.02.11
|
|
Отправлено: 05.04.14 14:37. Заголовок: Dima пишет: но как ..
|
|
|
Ответов - 257
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
All
[только новые]
|
|