Автор | Сообщение |
|
| |
Пост 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: 865
Зарегистрирован: 27.01.07
|
|
Отправлено: 04.04.13 20:57. Заголовок: Может так: AdsConnec..
Может так: AdsConnect("//127.0.0.1:6262") ? И, эта, 127.0.0.1 - это локальный компьютер. АДС на нем же запущен?
|
|
|
|
| |
Пост N: 2933
Зарегистрирован: 17.05.05
|
|
Отправлено: 04.04.13 20:59. Заголовок: Dima пишет: 127.0.0..
Dima пишет: С таким адресом похоже он не пашет. Разобрался. Задал реальный адрес и заработало. А как мне правильно открыть базу которая лежит в C:\TEST\DBF\KARTA.DBF по IP и порту заданному в ADS.INI ? Может чего надо прописать в ADS.INI....
|
|
|
|
| |
Пост N: 2934
Зарегистрирован: 17.05.05
|
|
Отправлено: 04.04.13 20:59. Заголовок: PSP пишет: АДС на н..
|
|
|
|
| |
Пост N: 2935
Зарегистрирован: 17.05.05
|
|
Отправлено: 04.04.13 21:01. Заголовок: PSP пишет: Может та..
PSP пишет: цитата: | Может так: AdsConnect("//127.0.0.1:6262") ? |
| Точно. Так работает. Спасибо. Глазик замылился ;) А как базу открыть ?
|
|
|
|
| постоянный участник
|
Пост N: 866
Зарегистрирован: 27.01.07
|
|
Отправлено: 04.04.13 21:02. Заголовок: Дим, я с АДС не рабо..
Дим, я с АДС не работал. Сорри...
|
|
|
|
| Администратор
|
Пост N: 2827
Зарегистрирован: 23.05.05
|
|
Отправлено: 04.04.13 21:15. Заголовок: Когда я работал с ad..
Когда я работал с ads. обязательно надо было расшаривать сетевой ресурс, и при открытии указывать имя файла в формате unc. Можно еще использовать data dictionary. но с ним я не работал. Если еще AIS, там конечно расшаривать ничего не надо, так как это сделать невозможно, но с ним я опять таки не работал.
|
|
|
|
| |
Пост N: 2936
Зарегистрирован: 17.05.05
|
|
Отправлено: 04.04.13 21:33. Заголовок: Все таки нашел путь ..
Все таки нашел путь ;) В ASD.INI Делаем [DRIVES] x:=//127.0.0.1/C$/sklad/dbf/ А в проге USE x:karta Можно и так Set path to x: use karta ЗЫ При чем расшаривать не надо (буква X: в проводнике не появится) Интересно в ADS есть похожие вещи как в LETO ? LETO_VARSET LETO_VARGET LETO_VARDEL
|
|
|
|
| Администратор
|
Пост N: 2828
Зарегистрирован: 23.05.05
|
|
Отправлено: 04.04.13 22:40. Заголовок: Dima пишет: x:=//..
Dima пишет: цитата: | [DRIVES] x:=//127.0.0.1/C$/sklad/dbf/ |
| А если доступ c$ закрыт, работать будет ? В доке, правда к ads 9.x, написано: [DRIVES] If you wish to connect to the Advantage Database Server via the Advantage Internet Server, and your application uses drive letters, you will need a [DRIVES] section to contain the information needed for an Internet connection to Advantage. The [DRIVES] section should contain a list of all drive letters used by the application and the server name and share (or volume) in which the drive letter should map on the server in which the Advantage Database Server is running. The server name and share (or volume) should be UNC (\\SERVERNAME\SHARE).
|
|
|
|
| |
Пост N: 2937
Зарегистрирован: 17.05.05
|
|
Отправлено: 04.04.13 23:09. Заголовок: Pasha У меня служба..
Pasha У меня служба доступа к файлам и принтерам вообще выключена и ни чего не расшарено. А попробуй у себя в браузере строку вбить \\127.0.0.1\c$ Правда если сделать вот так net share c$ /delete то доступа не будет
|
|
|
|
| |
Пост N: 2938
Зарегистрирован: 17.05.05
|
|
Отправлено: 05.04.13 10:15. Заголовок: А есть ли возможност..
А есть ли возможность в ADS управлять переменными как в LETO ? Или может какой то похожий инструмент там есть ? Есть там семафоры но как ими управлять ХЗ
|
|
|
|
| |
Пост N: 2988
Зарегистрирован: 17.05.05
|
|
Отправлено: 10.04.13 15:40. Заголовок: Вопросец нарисовался..
Вопросец нарисовался. Папка с выполняемым файлом лежит на серваке и расшарена. Все рабочие станции юзают этот расшаренный EXE. Такая схема вполне работоспособна еще со времен Clipper. НО в этой же папке лежат и файлики которые нужны для работы ace32.dll axcws32.dll Не будет ни каких конфликтов с этими DLL и будут ли они цепляться при таком подходе при загрузке программы ?
|
|
|
|
|
| |
Пост N: 2989
Зарегистрирован: 17.05.05
|
|
Отправлено: 10.04.13 15:52. Заголовок: Ответ как бы сам мен..
Ответ как бы сам меня нашел ;) Запустил прогу. После этого убил выполняемый файл и оба DLL , прога нормально функционирует. Значит при загрузке программы и прога и DLL грузятся в память. Что интересно такой фокус с удалением для Clipper EXEшника не работает.
|
|
|
|
| |
Пост N: 93
Зарегистрирован: 19.05.05
|
|
Отправлено: 10.04.13 18:39. Заголовок: Странно, я не могу у..
Странно, я не могу удалить EXE файл, когда он работает, заметил еще во время перекомпиляции программы. Удалять DLL во время работы программы не пробовал. А вообще у нас изначально все программы запускаются из расшаренного диска, правда пока у нас вся система крутится на серверах NOWELL и ADS. Полностью на Windows сервера может быть начнем переходить осенью
|
|
|
|
| |
Пост N: 3009
Зарегистрирован: 17.05.05
|
|
Отправлено: 12.04.13 15:40. Заголовок: Как работать с ADS в..
Как работать с ADS в локальной сети понятно. Встала задача работать с этой же базой через инет. С чего тут правильно начать ? В самом ADS прописать инет порт это ясно В проге установить AdsSetServerType(4) Пробую цеплятся AdsConnect(инетIPадрес+порт) и глухо
|
|
|
|
| |
Пост N: 3028
Зарегистрирован: 17.05.05
|
|
Отправлено: 15.04.13 10:35. Заголовок: Dima пишет: Пробую ..
Dima пишет: цитата: | Пробую цеплятся AdsConnect(инетIPадрес+порт) и глухо |
| Разобрался. Хорошо есть где почитать. Например тут Cоздал DATADICTIONARY c помощью Advantage Data Architect , и разрешил юзать базу по инету. В итоге подключился , базы открываются , все как бы красиво. Но возник вопрос как быть с файловыми операциями. Как минимум нужны Ferase(), Fopen(),Directory(),Fcreate(),File() Из аналогов в ADS нашел только три: AdsDirectory() , AdsDeleteFile(),AdsCheckExistence() (аналог File()) Маловато будет. Что же делать ?
|
|
|
|
| |
Пост N: 70
Зарегистрирован: 20.02.11
|
|
Отправлено: 15.04.13 12:32. Заголовок: Dima, Удалось подкл..
Dima, Удалось подключиться через инет ? возникла мысль может это с типом таблиц связано, не уверен в этом , но вот что есть в хелпе по ADS Advantage Client Engine API To connect to an Advantage Database Server over the Internet using the Advantage Client Engine API, you will need to call AdsConnect60 with the full path to the data dictionary and with ADS_AIS_SERVER as the second parameter or as part of the second parameter. Example: ulRetVal = AdsConnect60( "q:\\test.add", ADS_AIS_SERVER, "User1", "foobar", ADS_DEFAULT, &hConnect );
|
|
|
|
| |
Пост N: 3029
Зарегистрирован: 17.05.05
|
|
Отправлено: 15.04.13 12:44. Заголовок: Haz пишет: Удалось ..
Haz пишет: цитата: | Удалось подключиться через инет ? |
| Да только не хватает мне файловых операций. Нормального аналога функции File() нет , похожий аналог AdsCheckExistence() совсем не аналог оказался ;) Тупо ищет только *.dbf при чем только те что объявлены в DATADICTIONARY. Файл семафора создать тоже не могу так как ни проверить его существование ни создать не выходит. Молчу уже про MakeDir() , нормальный Directory() и тд и тп В этом плане LetoDB намного гибче
|
|
|
|
| |
Пост N: 3030
Зарегистрирован: 17.05.05
|
|
Отправлено: 15.04.13 13:31. Заголовок: Насчет файловых опер..
Насчет файловых операций. First thing you have to understand when using AIS (advantage internet server) is that you are not having access to a file server directory, only to the database, so you cannot perform any activity related with OS file operations, for example you cannot make a FILE() or FCOPY() operation, you cannot create tables (unless you do it via SQL).
|
|
|
|
| |
Пост N: 59
Зарегистрирован: 15.12.09
|
|
Отправлено: 15.04.13 14:35. Заголовок: Если нет желания или..
Если нет желания или возможности написать что то параллельно работающее и получающее задание по ip, то я в таких случаях на удалённом офисе(т.е. чуть шире чем сервере) пишу и запускаю что то ожидающее заданий в вашем случае в таблицах ADS(например по таймауту проверяющее их наличие) и в них же отчитывающееся о успешном или нет выполнении оных, таким образом можно даже ОС переустановить в удалённом офисе где то в интернете
|
|
|
|
| Администратор
|
Пост N: 2861
Зарегистрирован: 23.05.05
|
|
Отправлено: 15.04.13 15:07. Заголовок: В харборе на этот сл..
В харборе на этот случай есть драйвер netio. Можно собрать netio-сервер, запустить его как приложение, и клиент может обращаться к нему с запросами по файловым операциям. А в качестве запросов будут собственно вызовы обычных файловых функций, для memio мы их разбирали: FErase("netio:" + ...) и так далее только File() мне кажется так работать не будет, но ей можно найти замену, та же Directory, или FileSeek(), или что-то еще
|
|
|
|
| |
Пост N: 3031
Зарегистрирован: 17.05.05
|
|
Отправлено: 15.04.13 15:17. Заголовок: Pasha Да я думал на..
Pasha Да я думал над этим вариантом. Просто считал что есть в ADS удаленные файловые функции как в LetoDB , но оказалось их нет.
|
|
|
|
|
| |
Пост N: 3032
Зарегистрирован: 17.05.05
|
|
Отправлено: 15.04.13 15:40. Заголовок: Pasha пишет: только..
Pasha пишет: цитата: | только File() мне кажется так работать не будет |
| Работает если Netio cервер собрать с request file (проверил) , говорю о netio_funcexec с функцией File
|
|
|
|
| |
Пост N: 3060
Зарегистрирован: 17.05.05
|
|
Отправлено: 21.04.13 13:48. Заголовок: хмм... в ADS так и о..
|
|
|
|
| постоянный участник
|
Пост N: 883
Зарегистрирован: 27.01.07
|
|
Отправлено: 21.04.13 15:11. Заголовок: Dima пишет: в ADS т..
Dima пишет: цитата: | в ADS так и осталось ограничение на кол-во индексных файлов для рабочей области (15 штук) |
| ... и в каждом может быть до 50-ти ордеров, не?
|
|
|
|
| |
Пост N: 3062
Зарегистрирован: 17.05.05
|
|
Отправлено: 21.04.13 15:24. Заголовок: PSP пишет: не? Да ..
PSP пишет: Да , но не могу юзать CDX так как не возможно выключить AUTOPEN и тогда при открытии базы с индексами может быть бяка. Use TEST INDEX TEST1,TEST new Индекс TEST заявлен вторым по счету а на деле будет первым.......
|
|
|
|
| |
Пост N: 1
Зарегистрирован: 24.04.13
|
|
Отправлено: 03.05.13 12:02. Заголовок: С ADS не работал. Не..
С ADS не работал. Не получается откомпилить пример. Выдает ошибки: Error: Unresolved external '_HB_FUN_ADSSETSERVERTYPE' referenced Error: Unresolved external '_HB_FUN_ADSSETCHARTYPE' referenced fr Error: Unresolved external '_HB_FUN_ADSCONNECT' referenced from C Error: Unresolved external '_HB_FUN_ADS' referenced from C:\ADS\X Какую LIB подключить?
|
|
|
|
| |
Пост N: 3125
Зарегистрирован: 17.05.05
|
|
Отправлено: 03.05.13 12:23. Заголовок: azoo пишет: Какую L..
azoo пишет: rddads и ace32
|
|
|
|
| |
Пост N: 2
Зарегистрирован: 24.04.13
|
|
Отправлено: 03.05.13 13:09. Заголовок: Почему-то ace32.lib ..
Почему-то ace32.lib нет в библиотеках HB30. Нашёл в xHarbour. Теперь пишет: Error: Unresolved external 'AdsGetFieldW' referenced from C:\HB30\LIB\WIN\BCC\RD DADS.LIB|ads1 Error: Unresolved external 'AdsGetStringW' referenced from C:\HB30\LIB\WIN\BCC\R DDADS.LIB|ads1 Error: Unresolved external 'AdsSetStringW' referenced from C:\HB30\LIB\WIN\BCC\R DDADS.LIB|ads1 Только после того, как скопировал rddads.lib из xHarbour в папку C:\HB30\LIB\WIN\BCC смог скомпилировать. Но при запуске программа выдаёт ошибку: Error BASE/1001 Undefined function: ADT_GETFUNCTABLE Called from ADT_GETFUNCTABLE(0)
|
|
|
|
| |
Пост N: 3126
Зарегистрирован: 17.05.05
|
|
Отправлено: 03.05.13 13:19. Заголовок: azoo пишет: Почему-..
|
|
|
|
| |
Пост N: 3
Зарегистрирован: 24.04.13
|
|
Отправлено: 03.05.13 15:39. Заголовок: Спасибо получилось. ..
Спасибо получилось. Способ с подключением через ЛВС без расшаривания ресурса работает. Только .ntx не подключаются к сожалению.
|
|
|
|
| |
Пост N: 3127
Зарегистрирован: 17.05.05
|
|
Отправлено: 03.05.13 15:46. Заголовок: azoo пишет: Только ..
azoo пишет: цитата: | Только .ntx не подключаются к сожалению. |
| rddSetDefault( "ADSNTX" )
|
|
|
|
|
| |
Пост N: 13
Зарегистрирован: 24.04.13
|
|
Отправлено: 14.08.13 16:19. Заголовок: Ещё несколько вопрос..
Ещё несколько вопросов по ADS в [x]Harbour. в Harbour_Manual.chm есть описание функций, начинающихся ADS......(), например ADSblob2file(). там есть ссылка на некий файл ACE.HLP, который искал но не смог найти. Вопрос такой: работать с ADS из Harbour можно только стандартными Clipper-командами или есть какие-то специальные команды для этого. Например в Clipper были команды AX_......(). Их можно использовать в Harbour ?
|
|
|
|
| |
Пост N: 3377
Зарегистрирован: 17.05.05
|
|
Отправлено: 14.08.13 16:25. Заголовок: azoo пишет: там ест..
azoo пишет: цитата: | там есть ссылка на некий файл ACE.HLP, который искал но не смог найти. |
| Используй advantage.chm который в составе ADS идет Функций типа AX_ уже нет , поэтому нужно искать аналоги в RDDADS если они есть конечно. Лучше всего посмотреть advantage.chm и сырцы rddads azoo пишет: цитата: | Вопрос такой: работать с ADS из Harbour можно только стандартными Clipper-командами или есть какие-то специальные команды для этого. |
| Можно и так и сяк
|
|
|
|
| |
Пост N: 15
Зарегистрирован: 24.04.13
|
|
Отправлено: 15.08.13 17:02. Заголовок: Dima я так понял что..
Dima я так понял что [x]Harbour с ADS не совсем дружен в отличие от Clipper. Причина конечно в официальной поддержке Sybase интерфейса с Clipper.
|
|
|
|
| |
Пост N: 3385
Зарегистрирован: 17.05.05
|
|
Отправлено: 15.08.13 17:06. Заголовок: azoo Смотря что пон..
azoo Смотря что понимать под такой дружбой. Свое приложение с Clipper+ADS я перевел нормально под Harbour+ADS. Говори конкретнее что интересует.
|
|
|
|
| |
Пост N: 17
Зарегистрирован: 24.04.13
|
|
Отправлено: 15.08.13 17:16. Заголовок: Приложение Clipper+A..
Приложение Clipper+ADS было написано без использования каких-либо функций AX_() ?
|
|
|
|
| |
Пост N: 3387
Зарегистрирован: 17.05.05
|
|
Отправлено: 15.08.13 17:18. Заголовок: azoo пишет: Прилож..
azoo пишет: цитата: | Приложение Clipper+ADS было написано без использования каких-либо функций AX_() ? |
| У меня ? Конечно с их использованием ! На вскидку что юзал ax_driver AX_GetAOFRecordCount ax_keyno ax_getaofexpr AX_CacheRecords AX_Loaded AX_GetDrive ax_error Ax_SetServerAOF ax_clearserveraof и тд и тп
|
|
|
|
| |
Пост N: 18
Зарегистрирован: 24.04.13
|
|
Отправлено: 16.08.13 08:39. Заголовок: Ну и... чем были зам..
Ну и... чем были заменены AX_() функции в Harbour ?
|
|
|
|
| |
Пост N: 3388
Зарегистрирован: 17.05.05
|
|
Отправлено: 16.08.13 09:12. Заголовок: azoo пишет: Ну и.....
azoo пишет: цитата: | Ну и... чем были заменены AX_() функции в Harbour ? |
| А есть аналоги в ACE SDK не все правда.
|
|
|
|
| |
Пост N: 3394
Зарегистрирован: 17.05.05
|
|
Отправлено: 16.08.13 20:57. Заголовок: azoo Спрашивай конк..
azoo Спрашивай конкретно. Когда я переводил приложение с Clipper(ADS) тоже не мог найти ряд аналогов. Копал доку , смотрел ченжлог и если решения не видел спрашивал тут на форуме. Поможем чем сможем , вопросы задавай.
|
|
|
|
| |
Пост N: 19
Зарегистрирован: 24.04.13
|
|
Отправлено: 19.08.13 13:39. Заголовок: Хотелось бы перевест..
Хотелось бы перевести проекты Clipper+DBF на Harbour+ADS. Опыта работы с ADS нет. Есть ли доки по ADS, которые можно использовать для работы с Harbour+ADS ?
|
|
|
|
|
| |
Пост N: 3414
Зарегистрирован: 17.05.05
|
|
Отправлено: 21.08.13 15:14. Заголовок: azoo Есть примеры в..
azoo Есть примеры в RddAds , есть форум на котором поиск работает. Начни делать что то а появятся вопросы на которые ответа не найдешь , спрашивай на форуме.
|
|
|
|
| |
Пост N: 21
Зарегистрирован: 24.04.13
|
|
Отправлено: 21.08.13 16:47. Заголовок: Dima а возможно ли п..
Dima а возможно ли полностью уйти от DBF ?
|
|
|
|
| |
Пост N: 3415
Зарегистрирован: 17.05.05
|
|
Отправлено: 21.08.13 16:57. Заголовок: azoo пишет: Dima а ..
|
|
|
|
| постоянный участник
|
Пост N: 233
Зарегистрирован: 27.07.08
|
|
Отправлено: 07.10.13 21:45. Заголовок: И меня эта тема очен..
И меня эта тема очень интересует. LetoDB не предлагать - не люблю собирать из исходников. Я так надеялся на ADS, а теперь выясняется, что ADS тоже глючит. У меня локальная сеть в 4 клиента+сервер.
|
|
|
|
| |
Пост N: 3612
Зарегистрирован: 17.05.05
|
|
Отправлено: 07.10.13 22:28. Заголовок: Dr. Oldwarez пишет: ..
Dr. Oldwarez пишет: цитата: | Я так надеялся на ADS, а теперь выясняется, что ADS тоже глючит |
| В чем например ? Можно ведь и официально его купить и иметь офф поддержку. Что касается сборки LetoDB сложного там нет ни чего , если нужно выложу уже готовый вариант.
|
|
|
|
| постоянный участник
|
Пост N: 235
Зарегистрирован: 27.07.08
|
|
Отправлено: 09.10.13 23:08. Заголовок: Dima пишет: Что кас..
Dima пишет: цитата: | Что касается сборки LetoDB сложного там нет ни чего , если нужно выложу уже готовый вариант. |
| Большое спасибо Под винду и BCC
|
|
|
|
| |
Пост N: 3615
Зарегистрирован: 17.05.05
|
|
Отправлено: 10.10.13 09:34. Заголовок: Dr. Oldwarez http:/..
|
|
|
|
| |
Пост N: 15
Зарегистрирован: 25.10.13
|
|
Отправлено: 01.11.13 10:15. Заголовок: У меня появилась зад..
У меня появилась задача переделать приложение из Clipper+(ADS NovellNetware) на Harbour. Раньше с Novell никогда дела не имел. Дома поставил ADS+ACE 9.10 и harbour собрал с этим ACE. Тестовое приложение из топика без проблем коннектится к MYSERVER Стал разбираться с Novell - никак не подключиться. 1) владелец сервера мне разъяснил что протокол IPX и никаких IP у сервера нет 2) у них доступ к серверу по букве (z:) или (\\Server) 3) в advantage.chm/AdsConnect написано что в Novell надо по "volume name for Novell NetWare " подключаться... пробую: ? AdsConnect("Z:") // .F. ? AdsConnect("\\Server") // .F. Версия сервера у них 5.X. А у меня клиент 9.1. Может из-за этого проблемы... Подскажите, если можно с примером, как к ADS ON Novell подключиться?
|
|
|
|
| |
Пост N: 3672
Зарегистрирован: 17.05.05
|
|
Отправлено: 01.11.13 11:03. Заголовок: vladru пишет: Верси..
vladru пишет: цитата: | Версия сервера у них 5.X. А у меня клиент 9.1. Может из-за этого проблемы... |
| ACE нужен 5.x Держи http://gfile.ru/a26Um
|
|
|
|
| |
Пост N: 16
Зарегистрирован: 25.10.13
|
|
Отправлено: 01.11.13 11:58. Заголовок: Спасибо. (Это тот чт..
Спасибо. (Это тот что на форуме в ветке "имя алиаса" мелькал ?) Ну естсественно мой .exe с этим ACE вылетает по ошибке в ace32.dll Вопрос: Мне теперь надо harbour пересобрать указав в качестве acesdk содержимое этого архива ? А после этого этот клиент будет к моему домашнему win-ADS 9.1 подключаться или сервер то же нужен 5.x ?
|
|
|
|
| |
Пост N: 3673
Зарегистрирован: 17.05.05
|
|
Отправлено: 01.11.13 12:01. Заголовок: Версия ADS должна со..
Версия ADS должна совпадать с версией ACE Пересобрать нужно только RDDADS
|
|
|
|
| |
Пост N: 17
Зарегистрирован: 25.10.13
|
|
Отправлено: 01.11.13 12:07. Заголовок: Dima пишет: Версия ..
Dima пишет: цитата: | Версия ADS должна совпадать с версией ACE |
| Где же мне такого старого зверя под win найти поможите кто чем можете... Dima пишет: цитата: | Пересобрать нужно только RDDADS |
| Намекните как это сделать, не пересобирая весь harbour по win-make (ил где почитать) и последнее, всё-же скажите пожалуйста нубо- новеллу как мне к ADS-Novell подключаться ? по имени диска ?
|
|
|
|
| |
Пост N: 3674
Зарегистрирован: 17.05.05
|
|
Отправлено: 01.11.13 12:31. Заголовок: vladru пишет: Где ж..
vladru пишет: цитата: | Где же мне такого старого зверя под win найти |
| А для чего он тебе если собрался работать с ADS 5.x под Netware ACE 5.x у тебя есть , Remote ADS for Netware тоже vladru пишет: цитата: | всё-же скажите пожалуйста нубо- новеллу как мне к ADS-Novell подключаться |
| Да как больше нравится. Коннект проверить можно с помощью AdsIsServerLoaded(смотри синтаксис) ну а далее базы юзать через dbusearea с соответствующим RDD (или USE с соответствующим RDD).....как больше нравится. ЗЫ А вообще с Netware надо уходить коли он староват и работает только по IPX , так как если на станции будет стоять что то выше чем VISTA то прицепиться к ADS Netware не получится так как начиная с VISTA протокол IPX не поддерживается
|
|
|
|
| |
Пост N: 19
Зарегистрирован: 25.10.13
|
|
Отправлено: 01.11.13 13:08. Заголовок: Dima пишет: А для ч..
Dima пишет: цитата: | А для чего он тебе если собрался работать с ADS 5.x под Netware ACE 5.x у тебя есть , Remote ADS for Netware тоже |
| Не очень понял что такое Remote ADS for Netware Вообще у меня такая ситуация: у заказчика Clipper+ADS-Netware. Он хочет перейти на Harbour+ADS (т.к они вынуждены использовать win-XP), может потом и с NetWare уйдет... Но работаю я НЕ на его сервере, а дома, где у меня NetWare нет. Заказчику отправляю переделанные модули для проверки. Неудобно конечно, но пока так... Вот и получается что у меня должна быть возможность скомпилировать код дома (под win-7) так чтобы он у заказчика (под XP+ADS-NetWare) работал. Может подскажите организационную схему такой работы ?
|
|
|
|
| |
Пост N: 3676
Зарегистрирован: 17.05.05
|
|
Отправлено: 01.11.13 13:12. Заголовок: vladru пишет: Может..
vladru пишет: цитата: | Может подскажите организационную схему такой работы ? |
| у меня для таких целей дома стоит сервер Netware иначе кодить придется в слепую. по ходу своих клиентов я уже перевел под ADS Windows так что сервак стоит без дела и продается ЗЫ Хотя можно попробовать у себя включив в проге Local ADS а отправляя заказчику переделывать в Remote ADS , это всего одна строка в проге.
|
|
|
|
| |
Пост N: 3677
Зарегистрирован: 17.05.05
|
|
Отправлено: 01.11.13 13:16. Заголовок: vladru пишет: Не о..
vladru пишет: цитата: | Не очень понял что такое Remote ADS for Netware |
| Я имел в виду ADS for Netware и установка в программе должна быть SET SERVER REMOTE или же AdsSetServerType(2) ЗЫ #command SET SERVER REMOTE => AdsSetServerType( ADS_REMOTE_SERVER )
|
|
|
|
| |
Пост N: 20
Зарегистрирован: 25.10.13
|
|
Отправлено: 01.11.13 14:14. Заголовок: Dima пишет: Хотя мо..
Dima пишет: цитата: | Хотя можно попробовать у себя включив в проге Local ADS а отправляя заказчику переделывать в Remote ADS , это всего одна строка в проге. |
| Угу, и тогда дома нужно иметь две версии harbour, - одну для ace-win-ADS-9.1 чтобы компилировать для проверки у себя - другую для ace5.5. чтобы компилировать для отправки заказчику ? Так (я не уверен что всё верно понимаю) ?
|
|
|
|
| |
Пост N: 3678
Зарегистрирован: 17.05.05
|
|
Отправлено: 01.11.13 14:17. Заголовок: да нет иметь надо то..
да нет иметь надо только одну RDDADS для версии ADS 5.5 которая в свою очередь может работать с Local сервером дома а у заказчика с Remote сервером ADS Netware
|
|
|
|
| |
Пост N: 21
Зарегистрирован: 25.10.13
|
|
Отправлено: 01.11.13 14:27. Заголовок: Dima пишет: надо т..
Dima пишет: цитата: | надо только одну RDDADS для версии ADS 5.5 которая в свою очередь может работать с Local сервером дома |
| Т.е. RDDADS для версии ADS 5.5 будет работать с моим локальным ADS сервером версии 9.1 ?
|
|
|
|
| |
Пост N: 3679
Зарегистрирован: 17.05.05
|
|
Отправлено: 01.11.13 14:29. Заголовок: vladru пишет: Т.е. ..
vladru пишет: цитата: | Т.е. RDDADS для версии ADS 5.5 будет работать с моим локальным ADS сервером версии 9.1 ? |
| Нет. С версией 5.5 9.1 вам зачем я не пойму ?
|
|
|
|
| |
Пост N: 22
Зарегистрирован: 25.10.13
|
|
Отправлено: 01.11.13 14:32. Заголовок: Dima пишет: 9.1 вам..
Dima пишет: цитата: | 9.1 вам зачем я не пойму ? |
| Дык, а где мне дома взять локальный сервер версии 5.5, да еще под win?
|
|
|
|
| |
Пост N: 3680
Зарегистрирован: 17.05.05
|
|
Отправлено: 01.11.13 14:37. Заголовок: vladru пишет: Дык, ..
vladru пишет: цитата: | Дык, а где мне дома взять локальный сервер версии 5.5 |
| Он уже есть в составе ACE линк на который я давал (adsloc32.dll) ace.h я забыл вот http://gfile.ru/a2eNn
|
|
|
|
| |
Пост N: 128
Зарегистрирован: 19.05.05
|
|
Отправлено: 01.11.13 15:04. Заголовок: Ну вообще-то версия ..
Ну вообще-то версия RDD для 5.5 и соответствующий ACE32.DLL должен работать с сервером 9.9. По крайней мере, я когда-то пробовал на 10 версии для WIN, и у меня работало, и CLIPPER в том числе. Клиент более низкой версии допускает работу с сервером более высокой версии. Наоборот только работать не будет.
|
|
|
|
| |
Пост N: 23
Зарегистрирован: 25.10.13
|
|
Отправлено: 01.11.13 15:10. Заголовок: Понял. -Значит крушу..
Понял. -Значит крушу свой ADS 9.1 - он уже нафиг не нужен; -кладу в папку с прогой Ваш архив -в программе делаю SET SERVER LOCAL (если у себя запускаю) (тогда программа будет делать серверные вызовы через DLL из папки программы) Осталось только RDDADS пересобрать под присланный Вами acesdk5.5. (И всё-же где написано как это сделать не пересобирая весь Harbour ?)
|
|
|
|
| |
Пост N: 3681
Зарегистрирован: 17.05.05
|
|
Отправлено: 01.11.13 15:15. Заголовок: vladru Лезем в папк..
vladru Лезем в папку harbour\contrib\rddads\ Там создаем батник (даю свой вариант....правьте) set PATH=C:\MinGW\bin set HB_INSTALL_PREFIX=c:\hb32mingw set HB_DIR_ADS=C:\ads.10.10\acesdk set HB_WITH_ADS=C:\ads.10.10\acesdk c:\hb32mingw\bin\hbmk2 rddads.hbp После правки запускаем его и должен собраться RddAds
|
|
|
|
| |
Пост N: 24
Зарегистрирован: 25.10.13
|
|
Отправлено: 01.11.13 18:44. Заголовок: У заказчика оказывае..
У заказчика оказывается ADS 7.1 под Novell. Меня чего-то сглючило на 5.X. - Я скачал acesdk 7.1. с сайта http://devzone.advantagedatabase.com/ - пересобрал rddads с ним как указал Dima Заказчик запускает у себя на машине где стоит ADS Novell такой скрипт: #include "ads.ch" proc main REQUEST ADS rddSetDefault("ADSCDX") SET SERVER REMOTE ? AdsConnect("Z:") // .F. ? AdsConnect("z:") // .F. ? AdsConnect("\\Server") // .F. return Результат удручает - к ADS серверу не подключается. Что может быть не так?
|
|
|
|
| |
Пост N: 3682
Зарегистрирован: 17.05.05
|
|
Отправлено: 01.11.13 18:53. Заголовок: а если добавить rdd..
а если добавить rddRegister("ADS",1) AdsRightsCheck(.F.) и юзануть AdsIsServerLoaded() Netware у него по IPX работает ? Novell Client на рабочей станции стоит ?
|
|
|
|
| |
Пост N: 3683
Зарегистрирован: 17.05.05
|
|
Отправлено: 01.11.13 18:55. Заголовок: vladru пишет: AdsCo..
vladru пишет: Тут этого видимо мало будет и нужно указать том еще Parameters pucServerName (I) Full file path of the data dictionary file, server name, or drive letter to which to connect. If the application uses a server name as the parameter, it must include the share name for Windows, path from the root for Linux, or volume name for Novell NetWare as well. For example, use "\\server\share", "\\server\path_from_root", or "\\server\volume". Linux users can also connect to the local machine using a direct path such as "/mydata". All Advantage clients and servers consider either slash type (forward or backslash) to be a path delimiter, this means you could also use a connection path with forward slashes, such as "//server/volume". Linux users should also reference the REPLACE_UNC_SERVER section in the ads.ini documentation. PS я когда юзал ADS по IPX из Harbour то AdsConnect вообще не использовал и пробни \harbour\contrib\rddads\tests\manage.prg только там поправить придется кое что Вместе со своим EXE давал ему еще и "ansi.chr","extend.chr","ace32.dll","axcws32.dll" ?
|
|
|
|
| |
Пост N: 25
Зарегистрирован: 25.10.13
|
|
Отправлено: 01.11.13 19:44. Заголовок: Dima пишет: Вместе ..
Dima пишет: цитата: | Вместе со своим EXE давал ему еще и "ansi.chr","extend.chr","ace32.dll","axcws32.dll" ? |
| Да, давал. цитата: | я когда юзал ADS по IPX из Harbour то AdsConnect вообще не использовал |
| Может дадите примерчик как подключались/пользовали ? Или Вы просто имеете ввиду что никаких доп.движений не делали. Только REQUEST ADS SET SERVER REMOTE а дальше работаем с базой как обычно цитата: | Netware у него по IPX работает ? Novell Client на рабочей станции стоит ? |
| Да, да. Я еще не понимаю как указать что надо IPX использовать. Вроде, из документации, ads-клиент это сам должен понять... Может каие-то dll нужны или доп.движения ? Насчет AdsIsServerLoaded: #include "ads.ch" proc main REQUEST ADS rddRegister("ADS",1) AdsRightsCheck(.F.) rddSetDefault("ADSCDX") SET SERVER REMOTE ? "AdsIsServerLoaded result:", AdsIsServerLoaded() // ответ 0 return Ну вроде 0 это как раз и хорошо? т.к. согласно ADS.HLP: AdsIsServerLoaded возвращает целое число и AE_SUCCESS как раз 0 (посмотрел в ace.h) (правда согласно тому же ADS.HLP: AdsConnect тоже должна возвращать целое, а в harbour возвращает почему-то логическое....) еще, кстати, в ADS.HLP написано AdsConnect устарела и надо использовать AdsMgConnect manage.prg - поправил/построил, но испытать на Novell уже не успел (выходные)
|
|
|
|
| |
Пост N: 28
Зарегистрирован: 25.10.13
|
|
Отправлено: 04.11.13 18:27. Заголовок: Dima Спасибо за Ваши..
Dima Спасибо за Ваши ответы. Пока разобрался, но может еще будут вопросы.... На сегодня выводы такие: 1. AdsConnect использовать, наверно, не стоит т.к. она возвращает только T/F. Вместо неё есть AdsMgConnect. Она возвращает 0 или код ошибки. 2. Описание ошибки есть в ADSERROR.HLP для старых ACE или в advantage.chm для 9. Так я узнал что моя проблема была в том, что версия клиента была старше версии сервера (ошибка 6316) 3. Если есть вопросы по подключению к ADS сначала см. \contrib\rddads\tests\manage.prg
|
|
|
|
| |
Пост N: 3878
Зарегистрирован: 17.05.05
|
|
Отправлено: 03.04.14 14:43. Заголовок: Похоже фича dborderi..
Похоже фича dborderinfo(DBOI_SKIPWILD,,,cPattern) в ADS не работает... Печалька.
|
|
|
|
| |
Пост N: 158
Зарегистрирован: 20.02.11
|
|
Отправлено: 03.04.14 20:28. Заголовок: вроде уже писали зде..
|
|
|
|
| |
Пост N: 3879
Зарегистрирован: 17.05.05
|
|
Отправлено: 03.04.14 21:01. Заголовок: Haz пишет: мож чере..
Haz пишет: цитата: | мож через sql запрос можно вывернуться ? |
| может но не знаком с ними
|
|
|
|
| |
Пост N: 159
Зарегистрирован: 20.02.11
|
|
Отправлено: 04.04.14 07:24. Заголовок: Dima пишет: не знак..
Dima пишет: Рекомендую, многое становиться очень просто, и к тому же с авто оптимизацией ( по возможности ) на сервере. создаешь словарь, добавляешь в него таблицы и выполняешь запрос , результатом которого будет открытая рабочая область с нужными записями из одной или нескольких таблиц сведенных в одну автоматом. PS для твоего случая в синтаксисе есть оператор LIKE cPattern
|
|
|
|
| |
Пост N: 3880
Зарегистрирован: 17.05.05
|
|
Отправлено: 04.04.14 10:06. Заголовок: Haz пишет: PS для т..
Haz пишет: цитата: | PS для твоего случая в синтаксисе есть оператор LIKE cPattern |
| Можешь примерчик показать ?
|
|
|
|
| |
Пост N: 3881
Зарегистрирован: 17.05.05
|
|
Отправлено: 04.04.14 11:19. Заголовок: Haz Нашел инфу на ф..
Haz Нашел инфу на форуме. Сделал вот так , но AdsCreateSQLStatement(,2) выдает .F. proc main #include "ads.ch" 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) AdsRightsCheck(.F.) use volvo exclusive new index on indeks to ttt ? AdsConnect( ".\" ) // .T. ? AdsCreateSQLStatement(,2) // .F. sQlStr:='SELECT * FROM volvo WHERE indeks Like "%44%"' ? AdsPrepareSQL(sQlStr) // .F. ? AdsExecuteSQL(sQlStr) // .F. wait return
|
|
|
|
| |
Пост N: 3882
Зарегистрирован: 17.05.05
|
|
Отправлено: 04.04.14 15:24. Заголовок: Dima пишет: use vo..
Dima пишет: цитата: | use volvo exclusive new index on indeks to ttt ? AdsConnect( ".\" ) // .T. ? AdsCreateSQLStatement(,2) // .F. sQlStr:='SELECT * FROM volvo WHERE indeks Like "%44%"' ? AdsPrepareSQL(sQlStr) // .F. ? AdsExecuteSQL(sQlStr) // .F. |
| Не много переделал select 100 ? AdsConnect( ".\" ) // .T. ? AdsCreateSQLStatement(,2) // .T. sQlStr:='SELECT * FROM volvo WHERE indeks Like "%44%"' ? AdsPrepareSQL(sQlStr) // .T. ? AdsExecuteSQL(sQlStr) // по прежнему .F. , почему ? ? AdsGetLastError() // 7200
|
|
|
|
| |
Пост N: 160
Зарегистрирован: 20.02.11
|
|
Отправлено: 04.04.14 16:56. Заголовок: только дошел до комп..
только дошел до компа. делал примерно так IF AdsCreateSqlStatement( cAlias, 3 ) // использовал ADT а не CDX - думаю не принципиально IF ADSVERIFYSQL( cSql ) AdsExecuteSqlDirect( cSql ) ELSE END позже попробую примерчик подробнее
|
|
|
|
| |
Пост N: 3883
Зарегистрирован: 17.05.05
|
|
Отправлено: 04.04.14 17:03. Заголовок: Haz Ради теста чека..
Haz Ради теста чеканул sQlStr:="SELECT * FROM VOLVO WHERE FIRMA=7" ? ADSVERIFYSQL(sQlStr) // .F. що за на фик..........вроде ж нормальный запрос
|
|
|
|
| |
Пост 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 пишет: но как ..
|
|
|
|
| |
Пост N: 3894
Зарегистрирован: 17.05.05
|
|
Отправлено: 05.04.14 14:41. Заголовок: Haz пишет: а для ве..
Haz пишет: цитата: | а для версий ниже предлагается самописная |
| Спасибо. Но не понял как ее конвертнуть в Habrour
|
|
|
|
| |
Пост N: 171
Зарегистрирован: 20.02.11
|
|
Отправлено: 05.04.14 14:45. Заголовок: Dima пишет: Но не ..
Dima пишет: цитата: | Но не понял как ее конвертнуть в Habrour |
| аналогично хотя можно порыть тут the last 6 chars of a rowid is the physical recno in base64 code.
|
|
|
|
| |
Пост N: 3895
Зарегистрирован: 17.05.05
|
|
Отправлено: 05.04.14 15:01. Заголовок: Haz пишет: хотя мож..
Haz пишет: цитата: | хотя можно порыть тут the last 6 chars of a rowid is the physical recno in base64 code. |
| Писал выше что пробовал hb_base64Decode(right(rowid,6)) , но это не то так как на выходе получаем далеко не цифры
|
|
|
|
| |
Пост N: 172
Зарегистрирован: 20.02.11
|
|
Отправлено: 05.04.14 15:06. Заголовок: После Decode64 скоре..
После Decode64 скорее всего получим cBinary который нужно скормить еще какой нить BIN2I() ... будут цифры но опять не те ((((
|
|
|
|
| |
Пост N: 3896
Зарегистрирован: 17.05.05
|
|
Отправлено: 05.04.14 15:08. Заголовок: кормил всем BIN2* вс..
кормил всем BIN2* все мимо
|
|
|
|
| |
Пост N: 173
Зарегистрирован: 20.02.11
|
|
Отправлено: 05.04.14 15:16. Заголовок: Вот сюда корми F..
Вот сюда корми FUNCTION Decode64(cCode) **************************************************************************** STATIC cString := "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" LOCAL nStevec LOCAL nReturn := 0 LOCAL nLen := Len(cCode) IF Empty(cCode) .OR. Valtype(cCode)=='U' ; RETURN 0 ; ENDIF FOR nStevec := 1 TO nLen nReturn := nReturn*64 + (At(Substr(cCode, nStevec,1), cString)-1) NEXT RETURN nReturn Взято тут http://nntp-archive.sybase.com/nntp-archive/action/article/%3C4550525e@solutions.advantagedatabase.com%3E
|
|
|
|
| |
Пост N: 3897
Зарегистрирован: 17.05.05
|
|
Отправлено: 05.04.14 15:20. Заголовок: а вот это прям в дес..
а вот это прям в десятку
|
|
|
|
| |
Пост N: 3898
Зарегистрирован: 17.05.05
|
|
Отправлено: 05.04.14 16:50. Заголовок: красота и relation п..
красота и relation по recno() пашет set relation to Decode64(right(ADSSQL->rowid,6)) into volvo есть 2 вопроса 1. Если у меня база VOLVO все же открыта и в ней открыты индексы то SQL запрос будет выполнятся быстрее или ему индексы не нужны ? Серверный фильтр если находит подходящий индекс под условие фильтра то ставится мгновенно. 2. SQL запрос в зависимости от условия может ставится некоторое время. Можно ли какой то индикатор повесить что бы юзер видел что прога не висит. База 5 лимонов записей и SQL запрос может быть не простым.
|
|
|
|
| |
Пост N: 174
Зарегистрирован: 20.02.11
|
|
Отправлено: 05.04.14 17:12. Заголовок: Dima пишет: есть 2 ..
Dima пишет: 1 при построении SQL во всю используются индексы, ADS рекомендует их использовать для увеличения скорости. 2 на счет индикатора не в курсе , когдато давно вроде видел ... но не уверен Время зависти от наличия нужных индексов , 5 лимонов это максимум пара секунд если структура баз правильная. Вообще ADS в этом плане - очень шустрый
|
|
|
|
| |
Пост N: 3899
Зарегистрирован: 17.05.05
|
|
Отправлено: 05.04.14 17:15. Заголовок: Понял. Спасибо. Проб..
Понял. Спасибо. Пробнул юзануть вот так но ни че не кажет индикатор AdsRegCallback( {| nPercent |outputstuff( nPercent,xxyy) } ) AdsExecuteSqlDirect(sQlStr) AdsClrCallback() где xxyy lastrec() из VOLVO Придется вешать лейбу - выполняется SQL запрос
|
|
|
|
| |
Пост N: 3900
Зарегистрирован: 17.05.05
|
|
Отправлено: 05.04.14 17:28. Заголовок: Еще вопросец. Как из..
Еще вопросец. Как из SQL выборки удалить ряд записей ?
|
|
|
|
| |
Пост N: 175
Зарегистрирован: 20.02.11
|
|
Отправлено: 05.04.14 17:44. Заголовок: Dima пишет: Как из ..
Dima пишет: цитата: | Как из SQL выборки удалить ряд записей |
| или фильтром или физически и из таблицы тоже фильтром можно так добавить виртуальное поле , установить его в true и фильтровать по нему. в не нужных это поле скинуть в false и фильтр их скроет вот пример запроса - виртуальное поле s по умолчанию выставлено в true select true as s, adsdemoat.* from adsdemoat
|
|
|
|
| |
Пост N: 3901
Зарегистрирован: 17.05.05
|
|
Отправлено: 05.04.14 17:48. Заголовок: Haz :sm36: ..
Haz
|
|
|
|
| |
Пост N: 3902
Зарегистрирован: 17.05.05
|
|
Отправлено: 05.04.14 17:53. Заголовок: Последний вопрос на ..
Последний вопрос на сегодня ;) если ручками набирать запрос то он выглядит так SELECT ROWID,indeks FROM volvoAT WHERE indeks Like '%LM%' А если использовать переменную в операторе LIKE то как правильно написать ? Скажем CC:="LM" , как этот СС туда правильно вставить ? Что то не пашет у меня. Разобрался ! CC:="LM" SQLSTR:="SELECT ROWID,indeks FROM volvoAT WHERE indeks Like "+"'"+'%'+CC+'%'+"'"
|
|
|
|
| |
Пост N: 3903
Зарегистрирован: 17.05.05
|
|
Отправлено: 05.04.14 18:07. Заголовок: Haz пишет: фильтром..
Haz пишет: цитата: | фильтром можно так добавить виртуальное поле , установить его в true и фильтровать по нему. |
| имеется в виду какой фильтр , серверный , обычный или есть какой то SQL-ий ? Haz пишет: цитата: | в не нужных это поле скинуть в false и фильтр их скроет |
| ADS пишет что таблица только для чтения при попытке записи в поле S На DBdelete() та же реакция естественно. ЗЫ Извини что напрягаю ;)
|
|
|
|
| |
Пост N: 176
Зарегистрирован: 20.02.11
|
|
Отправлено: 05.04.14 19:16. Заголовок: Dima пишет: Извини ..
Dima пишет: да ерунда, пока дома сижу Dima пишет: точно не учел ((( в данном случае таблица только чтение можно использовать тот же RowID с перестроением SQL по типу select rowid, adsdemoat.* from adsdemoat where rowid not in ('B8vqUvAAAAAEAAAAAB', 'B8vqUvAAAAAEAAAAAC') где B8vqUvAAAAAEAAAAAB и B8vqUvAAAAAEAAAAAС rowId которые надо скрыть построив sql алиас ADSSQL можно пересоздать а Browse:RefreshAll по идее должно сработать не проверял (( или AdsSetAof по RowId делать PS т.к. добавили псевдостолбец - курсор будет опять ридонли еще вариант - создать массив из номеров Recno которые нужно спрятать и фильтровать по нему - тогда курсор будет редактируемый ЗЫ ушел гулять с ребенком )
|
|
|
|
| |
Пост N: 3904
Зарегистрирован: 17.05.05
|
|
Отправлено: 05.04.14 22:03. Заголовок: На ночь глядя вопрос..
На ночь глядя вопрос возник ;) Я смотрел твой пример и тот что есть в CONTRIB\RDDADS и какое то время проводил эксперименты. Пришел к выводу что перед тем как сделать SQL запрос нужно сделать вот так. use VOLVO shared new // можно не открывать но у меня в задаче эта база открыта hh:=nil if !hb_FileExists(cDictionary) // для каждого юзера создаем свой словарик ADSDDCREATE( cDictionary,, "Словарь данных ADSDEMO" ) AdsDDaddTable( "volvoAT", cpath+"volvo.dbf", "" ) AdsDDCreateUser(, "Guest", "" , "Пользователь Guest" ) *adsConnection() // похоже это не нужно *AdsDisconnect() // похоже это не нужно endif IF !adsConnect60( cDictionary, 0, "Guest", '', 7,@hh ) ? "Ошибка подключения к словарю данных " ENDIF Эта конструкция работает , или я в чем то не прав ?!
|
|
|
|
| |
Пост N: 177
Зарегистрирован: 20.02.11
|
|
Отправлено: 05.04.14 22:13. Заголовок: Dima пишет: *adsCo..
Dima пишет: цитата: | *adsConnection() // похоже это не нужно *AdsDisconnect() // похоже это не нужно |
| в данном случае не надо и все работает, это кусок из моего кода где сначала логинюсь к словарю с админскими, создаю базы и индексы , а потом дисконнект и далее коннест под простым юзером
|
|
|
|
| |
Пост N: 3905
Зарегистрирован: 17.05.05
|
|
Отправлено: 06.04.14 10:42. Заголовок: Haz пишет: PS т.к. ..
Haz пишет: цитата: | PS т.к. добавили псевдостолбец - курсор будет опять ридонли |
| даже без добавления оного она все равно READ ONLY. Все виды выборок у меня укладываются в одну строку , кроме одной. В которой нужно по коду товара выбрать остатки из другой базы и показывать только то что есть в остатке. То есть по сути убрать (отфильтровать) не нужные записи а оно во как READ ONLY и USER функцию мою я так понимаю SQL запрос не поймет. Идейка пришла. Я ведь могу сделать COPY TO с условием FOR во временную MEM: базу и уже по ней ходить. Ан нет в MEM: базу не получится , тормознул . Можно просто выбрать из запроса нужные записи и метнуть их в MEM: базу и по ней ходить.
|
|
|
|
| |
Пост N: 178
Зарегистрирован: 20.02.11
|
|
Отправлено: 06.04.14 11:43. Заголовок: может быть readonly ..
может быть readonly потому что таблица по которой делаешь запрос уже расшарена и открыть ? Dima пишет: лучше сразу в SQL прописать SELECT * INTO #TmpBase FROM ... WHERE ... создасться временная ( в памяти если указан знак # и на диске если напишем просто TempBase без # ) таблица TmpBase и по ней можно тоже выполнять запрос SELECT * FROM #TempBase ... Примерно так cSql := 'SELECT Client_Code INTO #CLIENTS FROM Orders GROUP BY Client_Code' SQL(, cSql ) // моя функция , если алиас не указан , используется "TMP" , а после выполнения TMP->(DbcloseArea()) cSql := 'SELECT Client_Code FROM #CLIENTS' SQL( 'SQL_CLIENTS', cSql ) Потом, когда база не нужна ее нужно убить cSql := "DROP TABLE #CLIENTS" SQL(,cSql)
|
|
|
|
| |
Пост 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.... ходя не проверял ( проверил - редактируется
|
|
|
|
| |
Пост N: 3916
Зарегистрирован: 17.05.05
|
|
Отправлено: 06.04.14 13:57. Заголовок: Haz пишет: ROWID ду..
Haz пишет: цитата: | ROWID думаю тоже можно поправить - определять его в образующем SELECT ROWID AS R, VaolvoAt.* INTO # тогда в темпбазу он должен перейти полем R.... ходя не проверял ( проверил - редактируется |
| Cамое то
|
|
|
|
| |
Пост N: 3917
Зарегистрирован: 17.05.05
|
|
Отправлено: 06.04.14 14:10. Заголовок: что то косяк вылазит..
что то косяк вылазит. все вроде норм проходит а ошибка есть sQlStr:="SELECT ROWID AS Recs , INDEKS INTO #TmpBase FROM volvoAT WHERE MARKA=1 and naim like '%B%'" ? dosql(sQlStr) //0 sele adssql set relation to Decode64(right(recs,6)) into volvo browse() sQlStr:="DROP TABLE #TmpBase" set relation to adssql->(dbclosearea()) ? AdsCreateSQLStatement(,2) // .t. ? ADSVERIFYSQL(sQlStr) // .t. ? AdsExecuteSqlDirect(sQlStr) //.t. ? AdsGetLastError() // 5018 к чему бы это и что я сделал не так ?
|
|
|
|
| |
Пост N: 189
Зарегистрирован: 20.02.11
|
|
Отправлено: 06.04.14 15:26. Заголовок: Dima пишет: 5018 ..
По MARKA надеюсь индекс есть для оптимизации))) эта и у меня постоянно вылазит , забил
|
|
|
|
| |
Пост N: 3918
Зарегистрирован: 17.05.05
|
|
Отправлено: 06.04.14 15:27. Заголовок: Haz пишет: забил ..
Haz пишет:
|
|
|
|
| |
Пост N: 190
Зарегистрирован: 20.02.11
|
|
Отправлено: 06.04.14 15:33. Заголовок: вижу все заработало ..
вижу все заработало , поздравляю
|
|
|
|
| |
Пост N: 3919
Зарегистрирован: 17.05.05
|
|
Отправлено: 06.04.14 15:35. Заголовок: Haz Спасибо без теб..
Haz Спасибо без тебя не разобрался бы !
|
|
|
|
| |
Пост N: 3920
Зарегистрирован: 17.05.05
|
|
Отправлено: 06.04.14 15:38. Заголовок: Планирую еще сложные..
Планирую еще сложные отчеты переделать , чую SQL тут должен помочь Точнее выборку для них.
|
|
|
|
| |
Пост N: 191
Зарегистрирован: 20.02.11
|
|
Отправлено: 06.04.14 15:45. Заголовок: Dima пишет: не разо..
Dima пишет: разобрался бы , если б захотел и не бросил )) цитата: | Планирую еще сложные отчеты переделать |
| установи Advantage Database Architect - помогает ошибки в запросах ловить
|
|
|
|
| |
Пост N: 3921
Зарегистрирован: 17.05.05
|
|
Отправлено: 06.04.14 15:47. Заголовок: Haz пишет: установи..
Haz пишет: цитата: | установи Advantage Database Architect |
| Стоит давно уже. Haz пишет: цитата: | разобрался бы , если б захотел и не бросил )) |
| на это ушло бы очень много времени
|
|
|
|
| |
Пост N: 3924
Зарегистрирован: 17.05.05
|
|
Отправлено: 07.04.14 10:24. Заголовок: Haz Есть вопросик. ..
Haz Есть вопросик. Собственно вот так я выбираю остатки товара на дату. Пример не самодостаточный но вполне понятен. А вот как такую же выборку в базу VREM сделать с помощью SQL запроса ? sele nomen do while !eof() f_nomer:=nomen->nomer sele karta ost:=0 if dbseek(f_nomer) karta->(dbOrderInfo(DBOI_SCOPEBOTTOM,,,f_nomer)) do while !eof() if karta->data_z>dth2 skip loop endif ost+=(karta->prixod-karta->rasxod) skip enddo karta->(dbOrderInfo(DBOI_SCOPEBOTTOMCLEAR)) VREM->(dbappend()) repl VREM->ostat with ost,; VREM->cod with nomen->cod,; VREM->naim with nomen->naim endif sele nomen skip enddo
|
|
|
|
| |
Пост N: 192
Зарегистрирован: 20.02.11
|
|
Отправлено: 07.04.14 10:47. Заголовок: Dima пишет: А вот к..
Dima пишет: примерно так do !nomen->(eof()) cSql := "select SUM( prixod - rasxod ) AS ost from karta where data_z <= dth2 and nomer = '" + nomen->nomer + "'" SQL( cAlias, cSql) If !(cAlias)->(Eof()) VREM->(dbappend()) VREM->ostat := cAlias->ost VREM->cod := nomen->cod VREM->naim := nomen->naim END cAlias->(DbCloseArea()) nomen->(DbSkip(1)) end где nomer - имя поля по которому SCOPE ( из примера на ясно как звать ) можно подумать как вообще обойтись одним запросом базы большие ? мож на мыло прислать ?
|
|
|
|
| |
Пост N: 3925
Зарегистрирован: 17.05.05
|
|
Отправлено: 07.04.14 10:50. Заголовок: Haz пишет: где nome..
Haz пишет: цитата: | где nomer - имя поля по которому SCOPE ( из примера на ясно как звать ) |
| Это уникальный номер складской карточки. Думаешь с таким запросом быстрее будет работать нежели по старинке ?
|
|
|
|
| |
Пост N: 193
Зарегистрирован: 20.02.11
|
|
Отправлено: 07.04.14 10:54. Заголовок: Dima пишет: базы бо..
Dima пишет: цитата: | базы большие ? мож на мыло прислать ? |
|
|
|
|
|
| |
Пост N: 3926
Зарегистрирован: 17.05.05
|
|
Отправлено: 07.04.14 10:58. Заголовок: Да вышлю чуть позже...
Да вышлю чуть позже.
|
|
|
|
| |
Пост N: 3927
Зарегистрирован: 17.05.05
|
|
Отправлено: 07.04.14 11:17. Заголовок: Отправил..
Отправил
|
|
|
|
| |
Пост N: 194
Зарегистрирован: 20.02.11
|
|
Отправлено: 07.04.14 11:28. Заголовок: Dima пишет: можно п..
Dima пишет: цитата: | можно подумать как вообще обойтись одним запросом |
| где то так SELECT N.NOMER, N.COD, N.NAIM, O.OST FROM NOMEN N LEFT JOIN ( SELECT SUM (K.PRIXOD -K.RASXOD) AS OST, K.NOMER FROM KARTA K WHERE K.DATA_Z <= KDTH2 GROUP BY K.NOMER ) O ON N.NOMER = O.NOMER сейчас по твоей базке погоняю
|
|
|
|
| |
Пост N: 195
Зарегистрирован: 20.02.11
|
|
Отправлено: 07.04.14 11:50. Заголовок: вот результат SELECT..
вот результат SELECT N.NOMER, N.COD, N.NAIM, O.OST FROM NOMEN N LEFT JOIN ( SELECT SUM (K.PRIXOD - K.RASXOD) AS OST, K.NOMER FROM KARTA K WHERE K.DATA_Z <= '01.01.2013' GROUP BY K.NOMER ) O ON N.NOMER = O.NOMER обязательны индексы по NOMER DATA_Z PS: если таблицы конвертнуть в родной для ADS формат .ADT - запрос выполняется почти в два раза быстрее
|
|
|
|
| |
Пост N: 3928
Зарегистрирован: 17.05.05
|
|
Отправлено: 07.04.14 14:18. Заголовок: Сколько примерно по ..
Сколько примерно по времени формировалась такая выборка на 01.01.2013 ?
|
|
|
|
| |
Пост N: 3929
Зарегистрирован: 17.05.05
|
|
Отправлено: 07.04.14 14:37. Заголовок: Dima пишет: sQlStr:..
Dima пишет: цитата: | sQlStr:="SELECT ROWID AS Recs , INDEKS INTO #TmpBase FROM volvoAT WHERE MARKA=1 and naim like '%B%'" |
| Haz А каким образом я могу устроить SEEK по этой базе #TmpBase. Как то можно создать такой же временный индекс в памяти ?
|
|
|
|
| |
Пост N: 196
Зарегистрирован: 20.02.11
|
|
Отправлено: 07.04.14 14:39. Заголовок: 10 сек на старом ком..
10 сек на старом компе с XP
|
|
|
|
| |
Пост N: 197
Зарегистрирован: 20.02.11
|
|
Отправлено: 07.04.14 14:43. Заголовок: Haz пишет: А каким ..
Haz пишет: цитата: | А каким образом я могу устроить SEEK по этой базе #TmpBase. Как то можно создать такой же временный индекс в памяти ? |
| временный не пользовал а постоянный как то так cSql := "EXECUTE PROCEDURE sp_CreateIndex90( '" + cBase + "','" + cBase + ".cdx','" + cField + "','" + cField + "', '', 2, 512, '' )" а что искать то в ней надо ?
|
|
|
|
| |
Пост N: 3930
Зарегистрирован: 17.05.05
|
|
Отправлено: 07.04.14 14:48. Заголовок: Haz пишет: а что ис..
Haz пишет: цитата: | а что искать то в ней надо ? |
| Нужно переходить к определенному ROWID в некоторых случаях Haz пишет: цитата: | EXECUTE PROCEDURE sp_CreateIndex90 |
| Спасибо ! Haz пишет: цитата: | 10 сек на старом компе с XP |
| Круто
|
|
|
|
| |
Пост N: 3931
Зарегистрирован: 17.05.05
|
|
Отправлено: 07.04.14 14:52. Заголовок: функции обратной DEC..
функции обратной DECODE64 не встречал ? Типа ENCODE64
|
|
|
|
| |
Пост N: 199
Зарегистрирован: 20.02.11
|
|
Отправлено: 07.04.14 14:56. Заголовок: Dima пишет: Нужно п..
Dima пишет: цитата: | Нужно переходить к определенному ROWID в некоторых случаях |
| мож AdsSetAof() использовать ? темпбаза же не большая
|
|
|
|
| |
Пост N: 3932
Зарегистрирован: 17.05.05
|
|
Отправлено: 07.04.14 14:57. Заголовок: Haz пишет: мож AdsS..
Haz пишет: цитата: | мож AdsSetAof() использовать ? |
| неа , это ж фильтр а надо именно перейти к записи.
|
|
|
|
| |
Пост N: 200
Зарегистрирован: 20.02.11
|
|
Отправлено: 07.04.14 14:58. Заголовок: Dima пишет: функции..
Dima пишет: цитата: | функции обратной DECODE64 не встречал ? Типа ENCODE64 |
| талько если самому писать , за основу взять харборную hb_Encode ...
|
|
|
|
| |
Пост N: 201
Зарегистрирован: 20.02.11
|
|
Отправлено: 07.04.14 15:02. Заголовок: Haz пишет: неа , эт..
Haz пишет: цитата: | неа , это ж фильтр а надо именно перейти к записи. |
| nRecSave := Recno() nRec := 0 AdsSetAOF() DbGotop() IF !Eof() nRec := RECNO() END AdsClearAof() DbGoto( IF( nRec <> 0. nRec, nRecSave ) или вообще по __DbLocate()
|
|
|
|
| |
Пост N: 3933
Зарегистрирован: 17.05.05
|
|
Отправлено: 07.04.14 15:10. Заголовок: Haz пишет: или вооб..
Haz пишет: цитата: | или вообще по __DbLocate() |
| а это возможно сделать SQL запросом ?
|
|
|
|
| |
Пост N: 202
Зарегистрирован: 20.02.11
|
|
Отправлено: 07.04.14 15:20. Заголовок: Dima пишет: а это в..
Dima пишет: цитата: | а это возможно сделать SQL запросом |
| конечно , только запрос - почти тот же фильтр самое простое - (cAlias)->( __dbLocate( bBlock,,,,.F.))
|
|
|
|
| |
Пост N: 3934
Зарегистрирован: 17.05.05
|
|
Отправлено: 07.04.14 15:22. Заголовок: Haz пишет: (cAlias..
Haz пишет: цитата: | (cAlias)->( __dbLocate( bBlock,,,,.F.)) |
| Буду тестить , спасибо !
|
|
|
|
| |
Пост N: 3935
Зарегистрирован: 17.05.05
|
|
Отправлено: 07.04.14 16:14. Заголовок: Добрался наконец и н..
Добрался наконец и начал переделывать живую задачу под REMOTE ADS И сразу попал на грабли cDictionary:=diskads+"sql\"+sys_name+"f12" словарь не создается почему то совсем ADSDDCREATE( cDictionary,, "Словарь данных ADSDEMO" ) cDictionary -> \\127.0.0.1\sklad$\sql\supervisorF12 лупит ошибку 6420
|
|
|
|
| |
Пост N: 203
Зарегистрирован: 20.02.11
|
|
Отправлено: 07.04.14 16:36. Заголовок: AdsConnect цепляетс..
AdsConnect цепляется к серверу ? путь к словарю правильный ? создай словарь руками при помощи ARC32 и им же базы в него подабавляй 127.0.0.1 - этож на локальной машине , пропиши обычный путь
|
|
|
|
| |
Пост N: 3936
Зарегистрирован: 17.05.05
|
|
Отправлено: 07.04.14 16:46. Заголовок: Haz пишет: AdsConne..
Haz пишет: цитата: | AdsConnect цепляется к серверу ? |
| Конечно. Рабочая задача. Haz пишет: цитата: | путь к словарю правильный ? |
| Да Haz пишет: цитата: | создай словарь руками при помощи ARC32 и им же базы в него подабавляй |
| Не вариант так как нужно делать это прям из проги. Haz пишет: цитата: | 127.0.0.1 - этож на локальной машине , пропиши обычный путь |
| Все верно так как работаю дома с REMOTE или LOCAL ADS именно через 127.0.0.1 (комп то один)
|
|
|
|
| |
Пост N: 3937
Зарегистрирован: 17.05.05
|
|
Отправлено: 07.04.14 16:53. Заголовок: сложил в папку diska..
сложил в папку diskads+"sql\" файлик test.prg и проверил HB_fileexists(diskads+"sql\test.prg") , все норм .T. путь к файлу получился таким \\127.0.0.1\sklad$\sql\test.prg ЗЫ Это у клиента мы уже меняем IP на сетевой что то типа 192.168.0.100 а дома всегда юзал 127.0.0.1 sklad$ - это имя расшаренного скрытого ресурса net share покажет sklad$ c:\works\alex\ads_sklad Dima пишет: цитата: | ADSDDCREATE( cDictionary,, "Словарь данных ADSDEMO" ) |
| Перед этой функцией вставил c:=fcreate(cDictionary+".test") fclose(c) файл нормально создался Такое впечатление что ADSDDCREATE не работает с полным путем UNC
|
|
|
|
| |
Пост N: 206
Зарегистрирован: 20.02.11
|
|
Отправлено: 07.04.14 18:43. Заголовок: Dima пишет: Такое в..
Dima пишет: цитата: | Такое впечатление что ADSDDCREATE не работает с полным путем UNC |
| вполне возможно что так , но при REMOTE попробуй через LOCAL ( замени 7 на 1 в строке конекта )
|
|
|
|
| |
Пост N: 3938
Зарегистрирован: 17.05.05
|
|
Отправлено: 07.04.14 18:52. Заголовок: Haz пишет: попробуй..
Haz пишет: до adsConnect60 я еще не дошел и создаю словарь до этого. C Local пробовал тот же эффект собственно код if !file(cDictionary) // для каждого юзера создаем свой словарик ADSDDCREATE( cDictionary,, "Словарь данных ADSDEMO") // вот тут получаю 6420 и ADSDDCREATE вернул .F. AdsDDaddTable( "volvoAT",PFL+"volvo.dbf", "" ) AdsDDCreateUser(, alltrim(sys_name), "" , "Пользователь "+alltrim(sys_name)) endif IF !adsConnect60( cDictionary, 0, alltrim(sys_name), '', 7,@tmphh ) Soob("Ошибка подключения к словарю данных","r/r","gr+/r") return nil ENDIF
|
|
|
|
| |
Пост N: 207
Зарегистрирован: 20.02.11
|
|
Отправлено: 07.04.14 19:20. Заголовок: может с $ пути не по..
может с $ пути не понимает ???? надо эксперементировать выведи путь в INI дома руками обычный впиши а у клиента UNC
|
|
|
|
| |
Пост N: 208
Зарегистрирован: 20.02.11
|
|
Отправлено: 07.04.14 19:46. Заголовок: вроде не понимает IP..
вроде не понимает IP в строке пути , если заменить на имя компа - работает
|
|
|
|
| |
Пост N: 3939
Зарегистрирован: 17.05.05
|
|
Отправлено: 07.04.14 19:59. Заголовок: да UNC не понимает з..
да UNC путь не понимает зараза. положил чистую ADD и пробнул подрубится через adsConnect60 , не фига. если путь обычный типа c:\бла бла то работает странно все это
|
|
|
|
| |
Пост N: 209
Зарегистрирован: 20.02.11
|
|
Отправлено: 07.04.14 20:19. Заголовок: Dima пишет: да UNC ..
Dima пишет: понимает путь вида \\сервер\шара
|
|
|
|
| |
Пост N: 3940
Зарегистрирован: 17.05.05
|
|
Отправлено: 07.04.14 20:41. Заголовок: странно у меня не по..
странно у меня не понял cDictionary:="\\dima-21a4fe250e\sklad$\"+"sql\"+"temp.add" tmphh:=nil ? adsConnect60( cDictionary, 0, "ADSSYS", '', 7,@tmphh ) //.f. хотя в проводнике дав путь \\dima-21a4fe250e\sklad$\sql , туда попадаю
|
|
|
|
| |
Пост N: 210
Зарегистрирован: 20.02.11
|
|
Отправлено: 07.04.14 20:43. Заголовок: Dima пишет: sklad$ ..
Dima пишет: может он скрытую шару не понимает , простой путь без $ видит
|
|
|
|
| |
Пост N: 3941
Зарегистрирован: 17.05.05
|
|
Отправлено: 07.04.14 21:19. Заголовок: local cDictionary:=&..
local cDictionary:="\\dima-21a4fe250e\sklad\"+"sql\"+"temp.add" // убрал $ @ 0,0 say adsConnect60( cDictionary, 0, "ADSSYS", '', 7,@tmphh ) // .f. @ 1,1 say file(cDictionary) // .t. Пипец засада..........или прощайте SQL запросы Можно сделать через Ж... но не хочется. Расшарить можно в данном случае папку SQL на серваке и прицепить ей букву , тогда заработает ясен пень.
|
|
|
|
| |
Пост N: 211
Зарегистрирован: 20.02.11
|
|
Отправлено: 07.04.14 21:23. Заголовок: не пойму ток что со..
не пойму ток что создал шару выдал права прописал unc путь \\Mycomp\myshare\dict.add и все работает
|
|
|
|
| |
Пост N: 3942
Зарегистрирован: 17.05.05
|
|
Отправлено: 07.04.14 21:26. Заголовок: Haz Спасибо что пом..
Haz Спасибо что помогаешь. На сегодня хватит видимо. Утро вечера мудренее ;) Мож мысль во сне придет кто знает ;)
|
|
|
|
| |
Пост N: 3943
Зарегистрирован: 17.05.05
|
|
Отправлено: 07.04.14 21:38. Заголовок: на сон грядущий тест..
на сон грядущий тест сделал. таки да имя компа надо указывать и словарь создается а вот добавить в него базу что то пока не выходит. и скрытую шару понимает а как по IP узнать имя компа ?
|
|
|
|
| |
Пост N: 3944
Зарегистрирован: 17.05.05
|
|
Отправлено: 07.04.14 22:23. Заголовок: ADSDDCREATE не работ..
ADSDDCREATE не работал с UNC в котором указан IP по причине что стоял вот такой вызов AdsLocking( .f. ) убрал , попустило , кроме того нужно указывать порт но базу пока добавить в словарь не получается это работает уже (жесть) local cDictionary:=ip_port+"\sklad$\"+"sql\"+"temp.add" ADSDDCREATE( cDictionary,, "Словарь данных ADSDEMO") Dima пишет: цитата: | но базу пока добавить в словарь не получается |
| там та же фигня и указывать нужно IP , PORT + шара ЗЫ Еще немного поседел , пока понял ;)
|
|
|
|
| |
Пост N: 3945
Зарегистрирован: 17.05.05
|
|
Отправлено: 08.04.14 09:47. Заголовок: Haz Вот такой запро..
Haz Вот такой запрос у меня не работает и видать по тому что слово GROUP зарезервированное. "SELECT ROWID AS Recs , INDEKS INTO #TmpBase FROM volvoAT WHERE GROUP=1" Как это обойти ? Пробовал так и тож не катит "SELECT ROWID AS Recs , M.INDEKS INTO #TmpBase FROM volvoAT M WHERE M.GROUP=1"
|
|
|
|
| |
Пост N: 212
Зарегистрирован: 20.02.11
|
|
Отправлено: 08.04.14 10:27. Заголовок: SELECT ROWID AS Recs..
SELECT ROWID AS Recs , INDEKS INTO #TmpBase FROM volvoAT WHERE [GROUP]=1
|
|
|
|
| |
Пост N: 3946
Зарегистрирован: 17.05.05
|
|
Отправлено: 08.04.14 10:46. Заголовок: Haz Работает :sm36..
Haz Работает
|
|
|
|
| |
Пост N: 3947
Зарегистрирован: 17.05.05
|
|
Отправлено: 08.04.14 12:14. Заголовок: Что то LIKE с кирилл..
Что то LIKE с кириллицей не пашет .......... sQlStr:="SELECT ROWID AS Recs , INDEKS INTO #TmpBase FROM volvoAT WHERE indeks like '%ПРОВ%'" а если искать в ANSI кодировке то работает , хотя база у меня OEM
|
|
|
|
| |
Пост N: 213
Зарегистрирован: 20.02.11
|
|
Отправлено: 08.04.14 12:17. Заголовок: Dima пишет: Что то ..
Dima пишет: цитата: | Что то LIKE с кириллицей не пашет |
| пашет, что то с кодировкой скорее, протестируй в ARC32 или что то типа ANSI2OEM( 'ПРОВ' ) попробуй
|
|
|
|
| |
Пост N: 3948
Зарегистрирован: 17.05.05
|
|
Отправлено: 08.04.14 12:31. Заголовок: как бы сказать AdsD..
как бы сказать AdsDDaddTable что бы таблица добавлялась в OEM ?
|
|
|
|
| |
Пост N: 214
Зарегистрирован: 20.02.11
|
|
Отправлено: 08.04.14 12:41. Заголовок: Dima пишет: как бы ..
Dima пишет: цитата: | как бы сказать AdsDDaddTable что бы таблица добавлялась в OEM ? |
| в вызове есть один из параметров CHARSET, не пробовал , но уверен есть . Надо в исходник заглянуть
|
|
|
|
| |
Пост N: 3949
Зарегистрирован: 17.05.05
|
|
Отправлено: 08.04.14 12:46. Заголовок: я пробовал но не выш..
я пробовал но не вышло. ладно решил вопрос перекодировкой
|
|
|
|
| |
Пост N: 215
Зарегистрирован: 20.02.11
|
|
Отправлено: 08.04.14 12:48. Заголовок: Dima пишет: я пробо..
Dima пишет: по этой схеме пробовал ? HB_FUNC( ADSDDADDTABLE ) { hb_retl( AdsDDAddTable( HB_ADS_PARCONNECTION( 4 ) /* hConnect */, ( UNSIGNED8 * ) hb_parcx( 1 ) /* pTableName */, ( UNSIGNED8 * ) hb_parcx( 2 ) /* pTableFileName */, ( UNSIGNED16 ) hb_ads_iFileType, ( UNSIGNED16 ) hb_ads_iCharType, ( UNSIGNED8 * ) hb_parcx( 3 ) /* pTableIndexFileName */, NULL ) == AE_SUCCESS );
|
|
|
|
| |
Пост N: 3950
Зарегистрирован: 17.05.05
|
|
Отправлено: 08.04.14 12:51. Заголовок: да я 5-м параметром ..
да я 5-м параметром ставил 2
|
|
|
|
| |
Пост N: 3951
Зарегистрирован: 17.05.05
|
|
Отправлено: 08.04.14 13:01. Заголовок: тут по ходу можно ещ..
тут по ходу можно еще поиграть с AdsSetCharType(2, .t.)
|
|
|
|
| |
Пост N: 3952
Зарегистрирован: 17.05.05
|
|
Отправлено: 08.04.14 13:26. Заголовок: Еще понял что если р..
Еще понял что если работать по старинке то есть базы открывать через USE (условно говоря) то в в самом начале проги у нас есть подключение к ADS , AdsConnect(ip_port) Так вот если в каком месте проги делать выборку через SQL запрос и подключаться к словарю вот так adsConnect60. То в дальнейшем после выхода из выборки и закрытия базы ADSSQL , основная база может отвалиться. Поэтому перед выходом я делаю переподключение , примерно так AdsConnect(ip_port) adshandle:=AdsConnection() ЗЫ Вдруг кому и пригодится.
|
|
|
|
| |
Пост N: 216
Зарегистрирован: 20.02.11
|
|
Отправлено: 08.04.14 13:37. Заголовок: Dima пишет: открыва..
Dima пишет: замени все USE cTable ALIAS cAlias на DOSQL( cAlias, "SELECT * FROM " + cTable ) и все решиться само ))) PS вроде ж убедился что по скорости не проигрываешь, а по функционалу - просто улет
|
|
|
|
| |
Пост N: 3953
Зарегистрирован: 17.05.05
|
|
Отправлено: 08.04.14 13:39. Заголовок: а если с индексами ?..
а если с индексами ? при чем у меня IDX
|
|
|
|
| |
Пост N: 217
Зарегистрирован: 20.02.11
|
|
Отправлено: 08.04.14 13:43. Заголовок: Dima пишет: а если ..
Dima пишет: цитата: | а если с индексами ? при чем у меня IDX |
| не важно CDX IDX - сервер цепляет автоматом попробуй в одном месте ( вместо одного USe )
|
|
|
|
| |
Пост N: 3954
Зарегистрирован: 17.05.05
|
|
Отправлено: 08.04.14 13:43. Заголовок: Haz пишет: замени в..
Haz пишет: цитата: | замени все USE cTable ALIAS cAlias на DOSQL( cAlias, "SELECT * FROM " + cTable ) и все решиться само ))) |
| что то слишком уж ты упростил ситуацию. Надо же еще и словари создать и базы туда сунуть , перед DOSQL
|
|
|
|
| |
Пост N: 3955
Зарегистрирован: 17.05.05
|
|
Отправлено: 08.04.14 13:45. Заголовок: Haz пишет: не важно..
Haz пишет: цитата: | не важно CDX IDX - сервер цепляет автоматом |
| откуда ему знать какие индексы IDX я юзаю с той или иной базой ? )))
|
|
|
|
| |
Пост N: 218
Зарегистрирован: 20.02.11
|
|
Отправлено: 08.04.14 13:45. Заголовок: Dima пишет: Надо же..
Dima пишет: цитата: | Надо же еще и словари создать и базы туда сунуть |
| в arc32 делов на 1 минуту ровно - создать один словарь и одним кликом добавить все dbf
|
|
|
|
| |
Пост N: 3956
Зарегистрирован: 17.05.05
|
|
Отправлено: 08.04.14 13:48. Заголовок: Haz пишет: попробуй..
Haz пишет: цитата: | попробуй в одном месте ( вместо одного USe ) |
| Допустим было USE Volvo index Volvo1,Volvo2,Volvo,test55 shared new откуда DOSQL поймет что надо прицепить еще и все эти индексы ?
|
|
|
|
| |
Пост N: 219
Зарегистрирован: 20.02.11
|
|
Отправлено: 08.04.14 13:50. Заголовок: Dima пишет: откуда ..
Dima пишет: цитата: | откуда ему знать какие индексы IDX я юзаю с той или иной базой ? ))) |
| можно указать при добавлении таблицы в словарь IDX - поддерживается точно, но в тут удобнее CDX а еще удобнее ADI кстати скорее всего SET INDEX TO будет работать тоже
|
|
|
|
| |
Пост N: 3957
Зарегистрирован: 17.05.05
|
|
Отправлено: 08.04.14 13:54. Заголовок: я понял. но не все с..
я понял. но не все сразу и возможно приду к этому ;) у тебя ADS 10.1 ?
|
|
|
|
| |
Пост N: 220
Зарегистрирован: 20.02.11
|
|
Отправлено: 08.04.14 14:00. Заголовок: Dima пишет: у тебя ..
|
|
|
|
| |
Пост N: 3958
Зарегистрирован: 17.05.05
|
|
Отправлено: 08.04.14 14:08. Заголовок: Haz пишет: 10.10.0...
Haz пишет: Ну в смысле да. А на 11.1 нет "гены" ?
|
|
|
|
| |
Пост N: 221
Зарегистрирован: 20.02.11
|
|
Отправлено: 08.04.14 14:11. Заголовок: Dima пишет: нет ..
Dima пишет: поискал , не нашел , да вроде и 10 всем пока устраивает
|
|
|
|
| |
Пост N: 3962
Зарегистрирован: 17.05.05
|
|
Отправлено: 09.04.14 09:34. Заголовок: Haz Попробую описат..
Haz Попробую описать ситуацию на пальцах Так как я не держу все время базы открытыми а открываю и потом закрываю по мере необходимости то у меня получаются не закрытые коннекты на сервере. При чем при каждом adsConnect60 появлется новый. базы уже открыты for i=1 to 10 adsConnect60 DOSQL browse() close adssql ......... AdsDisconnect(tmphh) // по идее отрубаюсь от adsConnect60 AdsConnect(ip_port) adshandle:=AdsConnection() next
|
|
|
|
| |
Пост N: 222
Зарегистрирован: 20.02.11
|
|
Отправлено: 09.04.14 10:20. Заголовок: Dima пишет: AdsDisc..
Dima пишет: цитата: | AdsDisconnect(tmphh) // по идее отрубаюсь от adsConnect60 |
| У меня при старте AdsConnect а при выходе Disconnect и все работает. Делай так же а базы закрывай и открывай когда угодно.
|
|
|
|
| |
Пост N: 3964
Зарегистрирован: 17.05.05
|
|
Отправлено: 09.04.14 10:22. Заголовок: а у меня выходит 2 a..
а у меня выходит 2 ads конекта один обычный AdsConnect а другой AdsConnect60
|
|
|
|
| |
Пост N: 223
Зарегистрирован: 20.02.11
|
|
Отправлено: 09.04.14 10:28. Заголовок: Dima пишет: а у мен..
Dima пишет: цитата: | а у меня выходит 2 ads конекта один обычный AdsConnect а другой AdsConnect60 |
| так и оставь их при входе, на выход - дисконнест а между ними любое число USE или DOSQL.
|
|
|
|
| |
Пост N: 3965
Зарегистрирован: 17.05.05
|
|
Отправлено: 09.04.14 10:34. Заголовок: примерно так и сдела..
примерно так и сделал но при каждом вызове adsConnect60 растет и не уменьшается в ADS configuration utility число connections как сказать adsConnect60 что бы он использовал уже текущее подключение (хендл)
|
|
|
|
| |
Пост N: 224
Зарегистрирован: 20.02.11
|
|
Отправлено: 09.04.14 10:39. Заголовок: Dima пишет: при каж..
Dima пишет: цитата: | при каждом вызове adsConnect60 |
| делай всего один вызов, не пойму зачем туда сюда дергать базы уже открыты adsConnect60 for i=1 to 10 DOSQL browse() close adssql ......... next AdsDisconnect(tmphh) // по идее отрубаюсь от adsConnect60
|
|
|
|
| |
Пост N: 3966
Зарегистрирован: 17.05.05
|
|
Отправлено: 09.04.14 10:46. Заголовок: с одним вызовом adsC..
с одним вызовом adsConnect60 не получается. Захожу в проге в меню и выбираю Каталог запчастей и его смотрю , конект к базам уже есть через adsConnect и объявлен в самом начале программы. Затем мне понадобилось установить SQL фильтр и тогда я подключаюсь к словарю через adsConnect60 и так каждый раз когда нужно установить тот или иной фильтр
|
|
|
|
| |
Пост N: 225
Зарегистрирован: 20.02.11
|
|
Отправлено: 09.04.14 10:50. Заголовок: Dima пишет: с одним..
Dima пишет: цитата: | с одним вызовом adsConnect60 не получается |
| 1 Запихни все dbf в словарь при помощи arc32 2 в начале программы только AdsConnect60 ( без простого AdsConnect ) 3 USE будет нормально открывать базы через словарь так обойдешься всего одним хендлом
|
|
|
|
| |
Пост N: 3967
Зарегистрирован: 17.05.05
|
|
Отправлено: 09.04.14 10:58. Заголовок: Haz пишет: 1 Запихн..
Haz пишет: цитата: | 1 Запихни все dbf в словарь при помощи arc32 2 в начале программы только AdsConnect60 ( без простого AdsConnect ) 3 USE будет нормально открывать базы через словарь так обойдешься всего одним хендлом |
| В будущем так и сделаю. А выход кажется придумал что бы по 100 не дергать AdsConnect60. Заведу статик переменную да и всех делов и код будет выполнятся только раз
|
|
|
|
| |
Пост N: 226
Зарегистрирован: 20.02.11
|
|
Отправлено: 09.04.14 11:06. Заголовок: Dima пишет: А выход..
Dima пишет: мне кажется даже два коннекта из одной проги к одному серверу не оч правильно ))) мож еще чего полезет ... кто знает, или коллизии по блокировке пойдут. попробуй все ж через словарь, а то одна нога в лыже а другая в коньке получается
|
|
|
|
| |
Пост N: 3968
Зарегистрирован: 17.05.05
|
|
Отправлено: 09.04.14 11:08. Заголовок: Haz пишет: а то одн..
Haz пишет: цитата: | а то одна нога в лыже а другая в коньке получается |
| пока так и есть
|
|
|
|
| |
Пост N: 227
Зарегистрирован: 20.02.11
|
|
Отправлено: 09.04.14 11:17. Заголовок: Dima пишет: пока та..
Dima пишет: главное что работает, хуже не бывает что то улучшать - обычно заканчивается полной переделкой всего
|
|
|
|
| |
Пост N: 3971
Зарегистрирован: 17.05.05
|
|
Отправлено: 09.04.14 14:21. Заголовок: Вообще странно что н..
Вообще странно что нельзя организовать SQL запрос из под простого AdsConnect , не AdsConnect60 То ли не доработка то ли фича такая.
|
|
|
|
| |
Пост N: 230
Зарегистрирован: 20.02.11
|
|
Отправлено: 09.04.14 15:03. Заголовок: Dima пишет: То ли н..
Dima пишет: цитата: | То ли не доработка то ли фича такая. |
| наверное это фича ADS чтоб использовать словарь. Вместо AdsConnect можно использовать AdsConnect60, а наоборот нельзя
|
|
|
|
| |
Пост N: 3972
Зарегистрирован: 17.05.05
|
|
Отправлено: 09.04.14 15:32. Заголовок: да это я понял уже ..
да это я понял уже к сожалению от SQL запросов пришлось отказаться так как при старой схеме подключения через AdsConnect плюс к этому еще нормально юзать AdsConnect60 не получится. Нужно как ты и говорил базы в словарь и юзать AdsConnect60 только. Вот если бы работала AX_SetConnectionHandle тогда бы я решил проблему и смог бы вернуться на основной хэндл без переподключения (если я конечно верно понял как она работает) , но во время сборки получаю что функции такой нет.
|
|
|
|
| |
Пост N: 231
Зарегистрирован: 20.02.11
|
|
Отправлено: 09.04.14 16:29. Заголовок: Dima пишет: Вот есл..
Dima пишет: цитата: | Вот если бы работала AX_SetConnectionHandle |
| она живет в DBFAXS.LIB это что то для FiveWin , не уверен что спасет. Дима, а что мешает все dbf в словарь то пихнуть ? Просканировать папаку с базами из проги ( даже можно отдельный запихиватель/выпмхиратель написать ) и добавить автоматом. цитата: | к сожалению от SQL запросов пришлось отказаться |
| зато опыт приобрел
|
|
|
|
| |
Пост N: 3973
Зарегистрирован: 17.05.05
|
|
Отправлено: 09.04.14 16:48. Заголовок: Ну не хочу я пока со..
Ну не хочу я пока совать базы в словарь так как чую что это где то вылезет Все же жутко хочется что бы и adsConnect и adsConnect60 жили вместе. Казалось бы сложного нет ничего. В начале проги подключаемся через adsConnect и получаем MAINHANDLE Далее если нужно сделать SQL запрос то используем adsConnect60 и получаем TEMPHANDLE Поюзав оный делаем так (предварительно закрыв базу ADSSQL) AdsDisconnect(TEMPHANDLE) И вот тут нужная некая функция XYZ которая вернет меня к предыдущему и еще активному подключению XYZ(MAINHANDLE). По ходу это должно сработать ! Но что то не вижу такого в доке.
|
|
|
|
| |
Пост N: 3974
Зарегистрирован: 17.05.05
|
|
Отправлено: 09.04.14 16:59. Заголовок: Haz До кучи и вопро..
Haz До кучи и вопрос на засыпку В одной и той же проге ты подключаешься через adsConnect60 к одному серверу и через adsConnect60 к другому серверу. Хэндлы у подключений будут разные. Как ты будешь между ними переключаться ?
|
|
|
|
| |
Пост N: 232
Зарегистрирован: 20.02.11
|
|
Отправлено: 09.04.14 19:33. Заголовок: Dima пишет: Хэндлы ..
Dima пишет: цитата: | Хэндлы у подключений будут разные. Как ты будешь между ними переключаться ? |
| подключка идет к словарю, в SELECT можно явно указать из какого словаря брать таблицу а значит и переключаться не придется сталкивался пару лет назад , но честно не помню как именно выкрутился . Надо будет посмотреть )) помню через что то типа Create Link ... потом забыл как страшный сон , не требовалось больше.
|
|
|
|
| |
Пост N: 3975
Зарегистрирован: 17.05.05
|
|
Отправлено: 09.04.14 21:06. Заголовок: Haz пишет: помню че..
Haz пишет: цитата: | помню через что то типа Create Link |
| завтра снова буду ковырять так как не хочется отказываться от SQL запросов
|
|
|
|
| |
Пост N: 3976
Зарегистрирован: 17.05.05
|
|
Отправлено: 10.04.14 10:20. Заголовок: По ходу проблему реш..
По ходу проблему решил В самом начале программы 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-м параметре
|
|
|
|
| |
Пост N: 233
Зарегистрирован: 20.02.11
|
|
Отправлено: 10.04.14 11:08. Заголовок: Dima пишет: Кстати ..
Dima пишет: цитата: | Кстати не подозревал о 2-м параметре |
| до сих пор тоже не подозревал, как нашел ?
|
|
|
|
| |
Пост N: 3980
Зарегистрирован: 17.05.05
|
|
Отправлено: 10.04.14 11:11. Заголовок: Haz пишет: до сих п..
Haz пишет: цитата: | до сих пор тоже не подозревал, как нашел ? |
| смотрел пример svn\harbour-trunk\harbour\contrib\rddads\tests\datad.prg в нем в комментах есть // 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 Ну и на удачу решил попробовать и получилось !
|
|
|
|
| |
Пост N: 234
Зарегистрирован: 20.02.11
|
|
Отправлено: 10.04.14 11:42. Заголовок: Dima пишет: у и на ..
Dima пишет: цитата: | у и на удачу решил попробовать и получилось ! |
| может там еще какие чудеса есть а мы то не знаем
|
|
|
|
| |
Пост N: 3981
Зарегистрирован: 17.05.05
|
|
Отправлено: 10.04.14 13:32. Заголовок: Haz пишет: может та..
Haz пишет: цитата: | может там еще какие чудеса есть а мы то не знаем |
| хорошо бы еще такое чудо найти (надо мне) но пока не вижу Dima пишет: цитата: | Dima пишет: цитата: При чем если делать AdsDisconnect(tmphh) то в лог пишется ошибка 10054 говорящая лишь о принудительном отключении , по сему AdsDisconnect(tmphh) Оно как бы и понятно почему возникает , так как словарь открыт. А как ему корректно сделать CLOSE ? |
|
|
|
|
|
| |
Пост N: 235
Зарегистрирован: 20.02.11
|
|
Отправлено: 10.04.14 14:19. Заголовок: Dima пишет: Оно как..
Dima пишет: цитата: | Оно как бы и понятно почему возникает , так как словарь открыт. |
| может это алиас открыт ? и на что влияет эта 10054 ( не нгашел ее в хелпе )
|
|
|
|
| |
Пост N: 3982
Зарегистрирован: 17.05.05
|
|
Отправлено: 10.04.14 14:22. Заголовок: Haz пишет: может эт..
Haz пишет: ну у меня так 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 То есть мне бы хотелось закрывать временный коннект через AdsDisconnect(tmphh) но так как словарь открыт то получаю ошибку (не смертельную) 10054 и ее видно только в логе ADS. Вот и требуется каким то образом словарь в начале закрыть , но чем ? Haz пишет: цитата: | и на что влияет эта 10054 ( не нгашел ее в хелпе ) |
| В Help ее нет http://devzone.advantagedatabase.com/dz/Content.aspx?Key=17&RefNo=081204-2102
|
|
|
|
| |
Пост N: 3983
Зарегистрирован: 17.05.05
|
|
Отправлено: 10.04.14 15:26. Заголовок: Dima пишет: Dima пи..
Dima пишет: цитата: | Dima пишет: цитата: AdsConnection(adshandle,.T.) Кстати не подозревал о 2-м параметре |
| По ходу я тупанул и нет 2-ого параметра Вот такой вызов AdsConnection() вернет текуший хендл подключения А вот так AdsConnection(adshandle) переключится на него HB_FUNC( ADSCONNECTION ) /* Get/Set func to switch between connections. */ { HB_ADS_RETCONNECTION( hb_ads_getConnection() ); hb_ads_setConnection( HB_ADS_PARCONNECTION( 1 ) ); }
|
|
|
|
| |
Пост N: 236
Зарегистрирован: 20.02.11
|
|
Отправлено: 10.04.14 17:55. Заголовок: Dima пишет: А вот т..
Dima пишет: цитата: | А вот так AdsConnection(adshandle) переключится |
| похоже на правду и нет ни одного вызова dosql ? ADS кеширует запрjсы , может перед дисконнектом кеш слить сначала ?
|
|
|
|
| |
Пост N: 3984
Зарегистрирован: 17.05.05
|
|
Отправлено: 10.04.14 18:06. Заголовок: Haz пишет: может пе..
Haz пишет: цитата: | может перед дисконнектом кеш слить сначала ? |
| Это как ? Не пойму как у этих ребят работают SQL запросы без словарей Попробовал не получилось. http://forums.fivetechsupport.com/viewtopic.php?f=6&t=2869 Обнаружил вот такую штуку. Если после того как поработав с SQL выборкой , хочу закрыть сам словарь вот такой последовательностью AdsConnection() AdsDisconnect() AdsConnection() AdsConnection(adshandle) То при первом таком срабатывании все отлично и словарь точно закрывается и это видно по кол-ву коннектов на мониторе ADS и ошибок нет. Но стоит повторно снова подключится к словарю и поработав с SQL выборкой снова дать такую же последовательность команд то выпадает выше описанная ошибка 10054 Вроде ж не должно ее быть а она есть.
|
|
|
|
| |
Пост N: 3985
Зарегистрирован: 17.05.05
|
|
Отправлено: 10.04.14 21:01. Заголовок: Dima пишет: Не пойм..
Dima пишет: Поспешил я с выводами. Все работает и без создания словаря базы данных. С одним ограничением. Саму базу нельзя открывать через USE (Dbusearea) если она присутствует в SQL запросе.
|
|
|
|
| |
Пост N: 237
Зарегистрирован: 20.02.11
|
|
Отправлено: 11.04.14 10:44. Заголовок: Dima пишет: USE (Db..
Dima пишет: цитата: | USE (Dbusearea) если она присутствует в SQL запросе. |
| думаю это неспроста , у меня помню были странные глюки если использовал и USE и словари
|
|
|
|
| |
Пост N: 3988
Зарегистрирован: 17.05.05
|
|
Отправлено: 12.04.14 15:24. Заголовок: Haz пишет: думаю эт..
Haz пишет: цитата: | думаю это неспроста , у меня помню были странные глюки если использовал и USE и словари |
| Я не об этом писал. Речь шла о том что словарь совсем не используется а базу открываем через SQL запрос и это работает. Чуть выше ты писал что SQL запрос возможен только если используется словарь. Оказалось что это не так. Пример. Если стандартно открывать базу USE TEST SHARED NEW Browse() Если через запрос ( без словаря данных) AdsCreateSqlStatement(,2) AdsExecuteSqlDirect("SELECT * FROM TEST") Browse() Правда это в разы медленнее нежели через словарь или обычным способом. Оно и понятно почему.
|
|
|
|
| |
Пост N: 3989
Зарегистрирован: 17.05.05
|
|
Отправлено: 12.04.14 20:57. Заголовок: Haz Вопрос. Загнал ..
Haz Вопрос. Загнал я базы в словарь и затем открываю их скажем через обычный USE. Это работает , проверил. Если пытаюсь открыть любую базу вне словаря то не получается , понятно почему. Каким образом мне создать и открыть временную базу под управлением ADSCDX ?
|
|
|
|
| |
Пост N: 238
Зарегистрирован: 20.02.11
|
|
Отправлено: 13.04.14 09:12. Заголовок: Dima пишет: Каким о..
Dima пишет: цитата: | Каким образом мне создать и открыть временную базу под управлением ADSCDX ? |
| так обычный DbCreate() работает вроде и создает базу не в словаре или так cBaseName := "Payment" cSql := "CREATE TABLE Data\" + cBaseName + "(" + ; "ID Autoinc," + ; "Date Date," + ; // "ID_OR Integer," + ; // "ID_CS Integer," + ; // "Summa Numeric( 14, 2 )," + ; // Сумма платежа "Note CIChar( 100)" + ; // прнимечание ")" IF ! FILE( cBasePath + "\Data\" + cBaseName + ".adt" ) SQL(, cSql ) AdsDDaddTable( cBaseName , "Data\" + cBaseName + ".adt", "" ) END или уже опробованным способом SELECT ... INTO #
|
|
|
|
| |
Пост N: 239
Зарегистрирован: 20.02.11
|
|
Отправлено: 13.04.14 09:26. Заголовок: как вариант может бы..
как вариант может быть еще и то что при добавлении таблицы в словарь ADS метит ее в заголовке символом CHR(1) и таблица становится not free у ADS где то есть даже утилита для освобождения таблиц. Таблица также освобождается при удалении ее из словаря.
|
|
|
|
| |
Пост N: 3990
Зарегистрирован: 17.05.05
|
|
Отправлено: 13.04.14 11:39. Заголовок: Haz ok..
Haz ok
|
|
|
|
| |
Пост N: 3997
Зарегистрирован: 17.05.05
|
|
Отправлено: 23.04.14 10:34. Заголовок: А как заставить прог..
А как заставить прогу подключаться к ADS если нет сетевой платы (или в нее не вставлен кабель) Прога и ADS лежат на одном компе ? adsConnect("\\127.0.0.1:6262") // .F. ? AdsConnection() // 0 Microsoft loopback адаптер я установил , правда на нем желтый знак восклицания. Куда копать ? ЗЫ Разобрался. В качестве IP нужно давать что то типа 169.254.x.x
|
|
|
|
| постоянный участник
|
Пост N: 429
Зарегистрирован: 13.10.05
|
|
Отправлено: 23.04.14 12:59. Заголовок: ? adsConnect("&..
цитата: | ? adsConnect("\\127.0.0.1:6262") // .F. ? AdsConnection() // 0 |
| Я для локальной базы и локального сервера пишу так AdsConnect('C:\') ... AdsdISConnect('C:\') Иногда указываю и реальный путь, если все таблицы находятся в одном месте , или наибольшее их количество в одном месте (тогда грамматика запроса упрощается): AdsConnect('C:\Progi\dsf\') ... AdsdISConnect('C:\Progi\dsf\')
|
|
|
|
| |
Пост N: 3998
Зарегистрирован: 17.05.05
|
|
Отправлено: 23.04.14 13:07. Заголовок: Vlad04 Да можно и т..
Vlad04 Да можно и так. Просто я привык использовать IP адрес.
|
|
|
|
| |
Пост N: 4804
Зарегистрирован: 17.05.05
|
|
Отправлено: 15.05.15 17:47. Заголовок: Пересел на семерку ..
Пересел на семерку Ранее в XP вот это работало AdsConnect("\\127.0.0.1:6262") В семерке не хочет зараза. Файер от DRWEB отключал (встроенный выключил) Если прописать прямой путь то работает. Куда копать ?
|
|
|
|
| |
Пост N: 4805
Зарегистрирован: 17.05.05
|
|
Отправлено: 16.05.15 13:28. Заголовок: смотрю я не один ht..
|
|
|
|
| постоянный участник
|
Пост N: 1064
Зарегистрирован: 27.01.07
|
|
Отправлено: 16.05.15 14:36. Заголовок: Попробуй отключить I..
Попробуй отключить IPv6 в свойствах сетевого адаптера.
|
|
|
|
| |
Пост N: 4806
Зарегистрирован: 17.05.05
|
|
Отправлено: 16.05.15 14:57. Заголовок: PSP пишет: Попробуй..
PSP пишет: цитата: | Попробуй отключить IPv6 в свойствах сетевого адаптера. |
| Отключено
|
|
|
|
| |
Пост N: 4807
Зарегистрирован: 17.05.05
|
|
Отправлено: 16.05.15 16:54. Заголовок: Фуф ;) Нагуглилось ,..
Фуф ;) Нагуглилось , работает ADS.INI в [SETTINGS] добавляем строку USE_TCP_IP=1
|
|
|
|
| постоянный участник
|
Пост N: 1065
Зарегистрирован: 27.01.07
|
|
Отправлено: 16.05.15 19:27. Заголовок: Dima пишет: Фуф ;) ..
Dima пишет: Всё гениальное - просто )))
|
|
|
Ответов - 257
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
All
[только новые]
|
|