Автор | Сообщение |
|
| |
Пост 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: 3906
Зарегистрирован: 17.05.05
|
|
Отправлено: 06.04.14 11:48. Заголовок: Haz пишет: INTO #Tm..
Haz пишет: совсем другое дело ее корректировать можно
|
|
|
|
| |
Пост N: 179
Зарегистрирован: 20.02.11
|
|
Отправлено: 06.04.14 11:51. Заголовок: Вообще при использов..
Вообще при использовании SQL я перестал использовать USE cBase SHARED и тд сами таблицы закидываю в словарь, а работаю с ними только через курсоры, без прямого открытия через USE. Все редактируется и удаляется тоже в курсорах. Индексы создаю по всем полям по которым будет выборка и почти не использую Dbseek(). Обленился , вся оптимизация в мозгах у сервера а не в моей голове ) Добавлю еще : в больших по числу записей таблицах стараюсь на держать строки а только ID на строку в справочнике т.к. всегда могу склеить для показа запросом, зато скорости выборки фантастические
|
|
|
|
| |
Пост N: 3907
Зарегистрирован: 17.05.05
|
|
Отправлено: 06.04.14 11:53. Заголовок: Haz пишет: Вообще п..
Haz пишет: цитата: | Вообще при использовании SQL я перестал использовать USE cBase SHARED и тд |
| у меня все наоборот ;)
|
|
|
|
| |
Пост N: 180
Зарегистрирован: 20.02.11
|
|
Отправлено: 06.04.14 11:57. Заголовок: Dima пишет: у меня ..
Dima пишет: сам лет десять делал наоборот )))) пока не появилась задача клеить на лету из 10 баз одну добило сравнение кода на clipper/harbour против одной строки запроса
|
|
|
|
| |
Пост N: 3908
Зарегистрирован: 17.05.05
|
|
Отправлено: 06.04.14 12:00. Заголовок: Haz пишет: лучше ср..
Haz пишет: цитата: | лучше сразу в SQL прописать SELECT * INTO #TmpBase FROM ... WHERE ... |
| а закрывать ее как обычно ? adssql->(dbclosearea()) AdsDisconnect( hh )
|
|
|
|
| |
Пост N: 181
Зарегистрирован: 20.02.11
|
|
Отправлено: 06.04.14 12:04. Заголовок: рабочая область закр..
рабочая область закрывается через dbclosearea() AdsDisconnect - перед выходом из программы и то без него сервер обнаружит висяк и обрубит сам
|
|
|
|
| |
Пост 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()
|
|
|
|
| |
Пост 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 на строку в справочнике т.к. всегда могу склеить для показа запросом, зато скорости выборки фантастические |
| Да скорость очень даже
|
|
|
|
| |
Пост N: 183
Зарегистрирован: 20.02.11
|
|
Отправлено: 06.04.14 12:17. Заголовок: я имел ввиду что dis..
я имел ввиду что disconnect можно не делать . а временную таблицу ( не алиас ) нужно закрывать через "DROP TABLE #TempBase"
|
|
|
|
| |
Пост N: 3910
Зарегистрирован: 17.05.05
|
|
Отправлено: 06.04.14 12:22. Заголовок: Haz пишет: "DRO..
Haz пишет: вот что выходит sele adssql browse() sQlStr:="DROP TABLE #TmpBase" ? ADSVERIFYSQL(sQlStr) // .f. ? AdsExecuteSqlDirect(sQlStr) // .f. error 5109
|
|
|
|
| |
Пост N: 184
Зарегистрирован: 20.02.11
|
|
Отправлено: 06.04.14 12:33. Заголовок: Dima пишет: error 5..
Dima пишет: пишет что курсор по этой таблице еще открыт
|
|
|
|
|
| |
Пост N: 3911
Зарегистрирован: 17.05.05
|
|
Отправлено: 06.04.14 12:39. Заголовок: да я это читал , и н..
да я это читал , и не понял как же корректно убить в памяти таблицу #TmpBase или достаточно ADSSQL->(dbclosearea()) ?
|
|
|
|
| |
Пост 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. `
|
|
|
|
| |
Пост N: 185
Зарегистрирован: 20.02.11
|
|
Отправлено: 06.04.14 12:43. Заголовок: Dima пишет: или до..
Dima пишет: цитата: | или достаточно ADSSQL->(dbclosearea()) ? |
| так только область закроется , а таблица останется жить в памяти надо и то и то сначала области позакрывать все из этой таблицы, а потом DROP саму временную таблицу
|
|
|
|
| |
Пост 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 )
|
|
|
|
| |
Пост N: 3913
Зарегистрирован: 17.05.05
|
|
Отправлено: 06.04.14 12:49. Заголовок: Haz пишет: это долж..
Haz пишет: цитата: | это должно работать правильно , из #TmpBase толко один SELECT ? |
| ну да вроде. у меня открыто 2 базы , VOLVO через USE и выборка SQL c алиасом ADSSQL
|
|
|
|
| |
Пост N: 187
Зарегистрирован: 20.02.11
|
|
Отправлено: 06.04.14 12:50. Заголовок: Dima пишет: для зап..
цитата: | для запроса нужно все 3 вызова AdsCreateSqlStatement( cAlias, 2 ) ADSVERIFYSQL( cSql ) AdsExecuteSqlDirect( cSql ) |
|
|
|
|
|
| |
Пост N: 3914
Зарегистрирован: 17.05.05
|
|
Отправлено: 06.04.14 12:51. Заголовок: Haz пишет: и где Ad..
Haz пишет: цитата: | и где AdsCreateSqlStatement( |
| точно ! не доглядел , работает
|
|
|
|
| |
Пост N: 3915
Зарегистрирован: 17.05.05
|
|
Отправлено: 06.04.14 12:57. Заголовок: насчет ROWID ты был ..
насчет ROWID ты был прав , таблица становится READ ONLY , даже если юзать INTO #TmpBase
|
|
|
|
| |
Пост N: 188
Зарегистрирован: 20.02.11
|
|
Отправлено: 06.04.14 13:24. Заголовок: Dima пишет: насчет ..
Dima пишет: добавь поле 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.... ходя не проверял ( проверил - редактируется
|
|
|
Ответов - 257
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
All
[только новые]
|
|