On-line: Andrey, гостей 0. Всего: 1 [подробнее..]
АвторСообщение
администратор




Пост 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


Где мой косяк ?

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 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 )

Дима, попозже ок ? полно дел по дому )

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост 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



Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост 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


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 3885
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 04.04.14 18:54. Заголовок: Да оно и без словаря..


Да оно и без словаря работает.
Вот в этой теме я смотрел примеры , там словарем и не пахнет http://clipper.borda.ru/?1-4-0-00000430-000-10001-0-1251195209



Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 163
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 04.04.14 20:57. Заголовок: Dima пишет: ЗЫ поч..


Dima пишет:

 цитата:
ЗЫ
почта



улетело, в конфу позже

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 3886
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 04.04.14 21:14. Заголовок: да получил , спасибо..


да получил , спасибо !
я полагал что и без словаря все должно работать......
ушел думать.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост 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 ?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост 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 для управления базами

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 3888
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 05.04.14 10:46. Заголовок: Haz пишет: А зачем ..


Haz пишет:

 цитата:
А зачем список номеров записей нужен


например если в выборке я нашел нужную мне запись и нажав на ней ВВОД оказался бы на нужной записи в базе VOLVO
что то типа VOLVO->(dbgoto(ADSSQL->recs RECNO() из VOLVO))

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 165
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 05.04.14 10:55. Заголовок: Dima пишет: что то ..


Dima пишет:

 цитата:
что то типа VOLVO->(dbgoto(ADSSQL->recs RECNO() из VOLVO))



так сработает - т.к. в курсоре есть RECNO()

я в данном случае использую динамический поиск - т.е. перестраиваю курсор самой базы ( в твоем случае VOLVO ) под условие нужного SQL
или через ADSSetFilter - тоже быстро



Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост 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

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 3890
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 05.04.14 11:12. Заголовок: Haz пишет: или чере..


Haz пишет:

 цитата:
или через ADSSetFilter - тоже быстро


То же им пользуюсь но нужно в уже существующем фильтре выбрать вхождения строк в названия к примеру
и это работает не так быстро как с SQL запросом

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 166
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 05.04.14 11:16. Заголовок: Recno в случае редак..


Recno в случае редактируемого покажет номер физической записи из таблицы , курсор - это как фильтр по таблице
и в курсоре и в таблице Recno будет совпадать

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост 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


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 167
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 05.04.14 11:25. Заголовок: Haz пишет: Вот бы к..


Haz пишет:

 цитата:
Вот бы как то в выборку вставить колонку в которой будет RECNO() из базы VOLVO.



только изменить структуру базы , добавив везде поле ID тип Integer ( Autoinc нет в CDX )а в подчиненную еще и ID_MASTER тип Integer
( перекроить структуру и перезаполнить ID можно теми же запросами через ARC32.EXE )

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост 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 по ней

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 3892
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 05.04.14 11:50. Заголовок: я не про то ;) у ADS..


я не про то ;)
у ADSSQL свои recno() а в VOLVO свои.
И мне нужно сидя в бровсе в ADSSQL при выходе из него оказаться на такой же записи как и в базе ADSSQL.
То есть сидел я выборке на коде товара OC2187E-ERT то после выхода должен оказаться в базе VOLVO
тоже на коде OC2187E-ERT

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост 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 ((((


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост 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)) нужна функция что в целое переведет

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 170
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 05.04.14 14:37. Заголовок: Dima пишет: но как ..


Dima пишет:

 цитата:
но как его к цифре



Вот тут говорят с версии 11 уже есть функция , а для версий ниже предлагается самописная ((( - я ее расшифровать не смог (((
http://devzone.advantagedatabase.com/forum/questions/3311/select-record-by-rowid

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 257 , стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 701
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет