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




Пост 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: 3906
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 06.04.14 11:48. Заголовок: Haz пишет: INTO #Tm..


Haz пишет:

 цитата:
INTO #TmpBase


совсем другое дело ее корректировать можно

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




Пост N: 179
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 06.04.14 11:51. Заголовок: Вообще при использов..


Вообще при использовании SQL я перестал использовать USE cBase SHARED и тд
сами таблицы закидываю в словарь, а работаю с ними только через курсоры, без прямого открытия через USE.
Все редактируется и удаляется тоже в курсорах. Индексы создаю по всем полям по которым будет выборка и почти не использую Dbseek().
Обленился , вся оптимизация в мозгах у сервера а не в моей голове )

Добавлю еще :
в больших по числу записей таблицах стараюсь на держать строки а только ID на строку в справочнике т.к. всегда могу склеить для показа запросом, зато скорости выборки фантастические

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




Пост N: 3907
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 06.04.14 11:53. Заголовок: Haz пишет: Вообще п..


Haz пишет:

 цитата:
Вообще при использовании SQL я перестал использовать USE cBase SHARED и тд


у меня все наоборот ;)

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




Пост N: 180
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 06.04.14 11:57. Заголовок: Dima пишет: у меня ..


Dima пишет:

 цитата:
у меня все наоборот ;)


сам лет десять делал наоборот )))) пока не появилась задача клеить на лету из 10 баз одну
добило сравнение кода на clipper/harbour против одной строки запроса

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




Пост N: 3908
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 06.04.14 12:00. Заголовок: Haz пишет: лучше ср..


Haz пишет:

 цитата:
лучше сразу в SQL прописать SELECT * INTO #TmpBase FROM ... WHERE ...



а закрывать ее как обычно ?
adssql->(dbclosearea())
AdsDisconnect( hh )


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




Пост N: 181
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 06.04.14 12:04. Заголовок: рабочая область закр..


рабочая область закрывается через dbclosearea()
AdsDisconnect - перед выходом из программы и то без него сервер обнаружит висяк и обрубит сам

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




Пост N: 182
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 06.04.14 12:05. Заголовок: вот мой вызов SQL ..


вот мой вызов SQL

FUNCTION SQL( cAlias, cSql, lLog )

LOCAL cTempAlias := '_TMP' + NToC( SECONDS() )
LOCAL lClose := FALSE
LOCAL nSaveArea := Select()
LOCAL i := 0
LOCAL nLog := 0
LOCAL cBuffer := ''

IF lLog == NIL
lLog := .F.
END


IF cAlias == NIL
cAlias := cTempAlias
lClose := .T.
END

IF lLog
IF !File(DirPrg() + "\LogSql.Log")
nLog := FCreate( DirPrg() + "\LogSql.Log" )
ELSE
nLog := FOpen( DirPrg() + "\LogSql.Log", 66 )
END
FSeek( nLog, 0, 2 )
cBuffer := DToC(Date()) + " " + Time() + " " + ProcName(1) + "()" + " -> " + cSql + CRLF
FWrite( nLog, cBuffer, Len( cBuffer ))
FClose(nLog)
END


IF (cAlias)->(USED())
( cAlias ) ->( DBCLOSEAREA() )
END

Select( 0 )
IF AdsCreateSqlStatement( cAlias, 3 )
IF ADSVERIFYSQL( cSql )
AdsExecuteSqlDirect( cSql )
ELSE
IF MsgYesNo('Error in SQL statement' + CRLF+ cSql + CRLF + ;
' function = ' + ProcName(0) + " -> line = " + NTOC(ProcLine(0)) + CRLF + ;
' function = ' + ProcName(1) + " -> line = " + NTOC(ProcLine(1)) + CRLF + ;
' function = ' + ProcName(2) + " -> line = " + NTOC(ProcLine(2)) + CRLF + ;
' function = ' + ProcName(3) + " -> line = " + NTOC(ProcLine(3)) + CRLF + ;
'Закончить работу ?')
MemoWrit( "_ERRSql.txt", cSql )
QUIT
END
END
END
IF lClose
( cAlias ) ->( DBCLOSEAREA() )
DBSELECTAREA( nSaveArea )
ELSE
i := ASCAN( aSqlQuery, { | q | q[ 1 ] == UPPER(cAlias) } )
IF i == 0
AADD( aSqlQuery, { UPPER(cAlias), cSql } )
ELSE
aSqlQuery[ i, 2 ] := cSql
END
END

RETURN AdsGetLastError()


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




Пост N: 3909
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 06.04.14 12:12. Заголовок: Haz пишет: AdsDisco..


Haz пишет:

 цитата:
AdsDisconnect - перед выходом из программы и то без него сервер обнаружит висяк и обрубит сам


Нет ты не прав. Я же писал что работаю по старинке через USE и только в одном месте пока хочу устроить SQL выборку.
А по сему основной хендл будет
hh1:=AdsConnection()

А коннект с запросом имеет свой hh
adsConnect60( cDictionary, 0, "Guest", '', 7,@hh )

Это я проверил хендлы разные.
Поэтому конструкция
adssql->(dbclosearea())
AdsDisconnect( hh )
к висяку не приведет , проверил. Вопрос в том убьется ли в памяти база #TmpBase ?

Haz пишет:

 цитата:
Добавлю еще :
в больших по числу записей таблицах стараюсь на держать строки а только ID на строку в справочнике т.к. всегда могу склеить для показа запросом, зато скорости выборки фантастические


Да скорость очень даже

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




Пост N: 183
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 06.04.14 12:17. Заголовок: я имел ввиду что dis..


я имел ввиду что disconnect можно не делать .
а временную таблицу ( не алиас ) нужно закрывать через "DROP TABLE #TempBase"

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




Пост N: 3910
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 06.04.14 12:22. Заголовок: Haz пишет: "DRO..


Haz пишет:

 цитата:
"DROP TABLE #TempBase"



вот что выходит

sele adssql
browse()
sQlStr:="DROP TABLE #TmpBase"
? ADSVERIFYSQL(sQlStr) // .f.
? AdsExecuteSqlDirect(sQlStr) // .f.

error 5109


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




Пост N: 184
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 06.04.14 12:33. Заголовок: Dima пишет: error 5..


Dima пишет:

 цитата:
error 5109



пишет что курсор по этой таблице еще открыт

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




Пост N: 3911
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 06.04.14 12:39. Заголовок: да я это читал , и н..


да я это читал , и не понял как же корректно убить в памяти таблицу #TmpBase
или достаточно ADSSQL->(dbclosearea()) ?

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




Пост N: 3912
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 06.04.14 12:42. Заголовок: Dima пишет: sele ad..


Dima пишет:

 цитата:
sele adssql
browse()
sQlStr:="DROP TABLE #TmpBase"
? ADSVERIFYSQL(sQlStr) // .f.
? AdsExecuteSqlDirect(sQlStr) // .f.



если сделать так
browse()
adssql->(dbclosearea())
sQlStr:="DROP TABLE #TmpBase"
? ADSVERIFYSQL(sQlStr) // ФАЙЛ НЕ ОТКРЫТ
? AdsExecuteSqlDirect(sQlStr) // .f. `


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




Пост N: 185
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 06.04.14 12:43. Заголовок: Dima пишет: или до..



Dima пишет:

 цитата:
или достаточно ADSSQL->(dbclosearea()) ?


так только область закроется , а таблица останется жить в памяти

надо и то и то
сначала области позакрывать все из этой таблицы, а потом DROP саму временную таблицу

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




Пост N: 186
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 06.04.14 12:46. Заголовок: если сделать так br..



 цитата:
если сделать так
browse()
adssql->(dbclosearea())
sQlStr:="DROP TABLE #TmpBase"
? ADSVERIFYSQL(sQlStr) // ФАЙЛ НЕ ОТКРЫТ
? AdsExecuteSqlDirect(sQlStr) // .f. `



это должно работать правильно , из #TmpBase толко один SELECT ?
и где
AdsCreateSqlStatement()


для запроса нужно все 3 вызова
AdsCreateSqlStatement( cAlias, 2 )
ADSVERIFYSQL( cSql )
AdsExecuteSqlDirect( cSql )


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




Пост N: 3913
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 06.04.14 12:49. Заголовок: Haz пишет: это долж..


Haz пишет:

 цитата:
это должно работать правильно , из #TmpBase толко один SELECT ?


ну да вроде. у меня открыто 2 базы , VOLVO через USE и выборка SQL c алиасом ADSSQL

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




Пост N: 187
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 06.04.14 12:50. Заголовок: Dima пишет: для зап..




 цитата:
для запроса нужно все 3 вызова
AdsCreateSqlStatement( cAlias, 2 )
ADSVERIFYSQL( cSql )
AdsExecuteSqlDirect( cSql )




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




Пост N: 3914
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 06.04.14 12:51. Заголовок: Haz пишет: и где Ad..


Haz пишет:

 цитата:
и где
AdsCreateSqlStatement(


точно ! не доглядел , работает

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




Пост N: 3915
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 06.04.14 12:57. Заголовок: насчет ROWID ты был ..


насчет ROWID ты был прав , таблица становится READ ONLY , даже если юзать INTO #TmpBase

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




Пост N: 188
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 06.04.14 13:24. Заголовок: Dima пишет: насчет ..


Dima пишет:

 цитата:
насчет ROWID



добавь поле ID - Integer и при DbAppend() что нибудь типа NewID()

FUNC NewID()
LOCAL nID := 0
SQL('GetID', 'SELECT TOP 1 ID FROM VolvoAT ORDER BY ID DESC')
nId := GetID->ID
GetID->(DbClosArea())
RETURN nId + 1

И далее пользуй ID а не Recno()

ROWID думаю тоже можно поправить - определять его в образующем SELECT ROWID AS R, VaolvoAt.* INTO #
тогда в темпбазу он должен перейти полем R.... ходя не проверял ( проверил - редактируется



Спасибо: 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 час. Хитов сегодня: 264
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет