|
|
|
Перевод кода на MS SQL Server
|
|||
|---|---|---|---|
|
#18+
Dima T Valentin_timaПо первому вопросу, данный курсор создается в коде из XML строки во входном параметре и далее используется, как видите, в запросе к источнику данных. Дело в том, что если послать на прямую этот запрос на сервер, то естественно сервер его не переварит, потому что просто не поймет. Как можно обйти подобные места в коде, а их как раз очень много? 1. перед запросом создать временную таблицу на сервере, заполнить и указать ее в запросе 2. перечислить список вместо подзапроса Код: plaintext По первому пункту я понял, т.е. предполагется сначала создать ХП по формированию нужного курсора, а затем ее выполнить, а в фоксе в команде запроса указать имя таблицы. А вот второй пункт не совсем понял, что имеется в виду? Что это за список, если можно подробнее.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2006, 16:44 |
|
||
|
Перевод кода на MS SQL Server
|
|||
|---|---|---|---|
|
#18+
Valentin_tima1. перед запросом создать временную таблицу на сервере, заполнить и указать ее в запросе 2. перечислить список вместо подзапроса Код: plaintext По первому пункту я понял, т.е. предполагется сначала создать ХП по формированию нужного курсора, а затем ее выполнить, а в фоксе в команде запроса указать имя таблицы. А вот второй пункт не совсем понял, что имеется в виду? Что это за список, если можно подробнее..[/quot] Например тебе пришло на вход: TempTableId324364755и запрос Код: plaintext по п.1 надо Код: plaintext 1. 2. 3. 4. 5. Код: plaintext чем больше TempTable, тем длинее строка запроса получится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2006, 18:11 |
|
||
|
Перевод кода на MS SQL Server
|
|||
|---|---|---|---|
|
#18+
Valentin_timaПоясню: Вот например мне не понятно, как бороться с таким кодом - SELECT IdExp ; FROM KsPrd ; WHERE Period IN ( lcTagPeriod, tcPeriod) ; AND idexp IN (SELECT Id FROM CurTO) AND EMPTY(ddelete); INTO CURSOR IdExpCursor строка AND idexp IN (SELECT Id FROM CurTO) предполагает, что есть некий курсор CurTO, как это объяснить SQL Server'у? А получить в результате надо одну строку или несколько ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2006, 18:24 |
|
||
|
Перевод кода на MS SQL Server
|
|||
|---|---|---|---|
|
#18+
Igor86 Valentin_timaПоясню: Вот например мне не понятно, как бороться с таким кодом - SELECT IdExp ; FROM KsPrd ; WHERE Period IN ( lcTagPeriod, tcPeriod) ; AND idexp IN (SELECT Id FROM CurTO) AND EMPTY(ddelete); INTO CURSOR IdExpCursor строка AND idexp IN (SELECT Id FROM CurTO) предполагает, что есть некий курсор CurTO, как это объяснить SQL Server'у? А получить в результате надо одну строку или несколько ??? CurTO - это TempTable в моем примере Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2006, 18:30 |
|
||
|
Перевод кода на MS SQL Server
|
|||
|---|---|---|---|
|
#18+
Dima T Valentin_tima1. перед запросом создать временную таблицу на сервере, заполнить и указать ее в запросе 2. перечислить список вместо подзапроса Код: plaintext По первому пункту я понял, т.е. предполагется сначала создать ХП по формированию нужного курсора, а затем ее выполнить, а в фоксе в команде запроса указать имя таблицы. А вот второй пункт не совсем понял, что имеется в виду? Что это за список, если можно подробнее.. Например тебе пришло на вход: TempTableId324364755и запрос Код: plaintext по п.1 надо Код: plaintext 1. 2. 3. 4. 5. Код: plaintext чем больше TempTable, тем длинее строка запроса получится.[/quot] Спасибо ... В общем то это реальный выход, по аналогии можно и с дугим кодом бооться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2006, 18:32 |
|
||
|
Перевод кода на MS SQL Server
|
|||
|---|---|---|---|
|
#18+
Valentin_tima Вы очень правильно поняли мою проблему, сразу видно, что Вы имеете в этом вопросе опыт. Да, действительно приложение создавалось под идеалогию клиент-сервер. Вопрос: Каким способом Вы подключаетесь в серверу, и какие средства используете при работе с сервером через фокс (RV, ADO, CA, SPT) ? Работаю с сервером SQL через SPT (закачиваю, что надо на "компонент" и затем передаю на клиента)... Насчет временных таблиц (курсоров) - в 95% случаев можно без них обойтись, так как синтаксис у MS SQL Server намного шире, чем синтаксис FoxPro. Я бы на Вашем месте переписал бы все на Хранимые процедуры серевра, а Ваш "компонент" бы просто передавал данные между приложением и сервером через параметры... К меня много работет таких приложений, только вместо "компонента" использую Web Service (так как по требованию заказчиков приложения должны работать через Интерент)... Good luck! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2006, 18:45 |
|
||
|
Перевод кода на MS SQL Server
|
|||
|---|---|---|---|
|
#18+
Sergey Ch Valentin_tima Вы очень правильно поняли мою проблему, сразу видно, что Вы имеете в этом вопросе опыт. Да, действительно приложение создавалось под идеалогию клиент-сервер. Вопрос: Каким способом Вы подключаетесь в серверу, и какие средства используете при работе с сервером через фокс (RV, ADO, CA, SPT) ? Работаю с сервером SQL через SPT (закачиваю, что надо на "компонент" и затем передаю на клиента)... Насчет временных таблиц (курсоров) - в 95% случаев можно без них обойтись, так как синтаксис у MS SQL Server намного шире, чем синтаксис FoxPro. Я бы на Вашем месте переписал бы все на Хранимые процедуры серевра, а Ваш "компонент" бы просто передавал данные между приложением и сервером через параметры... К меня много работет таких приложений, только вместо "компонента" использую Web Service (так как по требованию заказчиков приложения должны работать через Интерент)... Good luck! Т.е. как я понял, перенести методы компоненты на сервер, выполнив разумеется их адаптацию? В общем это конечно выход, тем более что Вы на практике используете такой метод. Значит от прямых запросов на сервер из кода следует лучше всего избавиться, я правильно понял? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2006, 18:53 |
|
||
|
Перевод кода на MS SQL Server
|
|||
|---|---|---|---|
|
#18+
Valentin_tima Т.е. как я понял, перенести методы компоненты на сервер, выполнив разумеется их адаптацию? В общем это конечно выход, тем более что Вы на практике используете такой метод. Значит от прямых запросов на сервер из кода следует лучше всего избавиться, я правильно понял? Да, я не делаю прямых запросов на сервер - передаю параметрами и возвращаю курсоры с необходимыми данными... С обнолением и вставкой данных немного сложнее, но если данных немного, то можно через параметры. В FoxPro это сделать проще, так как курсор можно легко преобразовать в XML текст и передать как параметр, потом в Вашем "компоненте" снова получить курсор и уже его "залить" в таблицу dbf... C MS SQL Server такой "фокус" я не пробовал, так как 2000 работал отвартительно плохо с XML, после чего я стал делать все через параметры к Хранимым процедурам... P.S. Но новые приложения я разрабатываю уже для работы непосредственно с SQL Server из самого приложения, так как этот серавер прекрасно работает по TCP/IP (то есть через Интернет, а использование Web Services замеляет процесс обмена данных официально на 30% , а по моей правтике в 2-3 раза). Таким образом с SQL Server проблемы обновления нет - для простых вариантов использую курсор-адаптер, для более ответсвенных - вызов хранимых процедур с параметрами... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2006, 20:03 |
|
||
|
Перевод кода на MS SQL Server
|
|||
|---|---|---|---|
|
#18+
Большое спасибо за помощь! Но думаю, что будет еще масса вопросов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2006, 09:24 |
|
||
|
Перевод кода на MS SQL Server
|
|||
|---|---|---|---|
|
#18+
Хотелось бы узнать насчет соединения с сервером, какая технология предпочтительнее, для каждого обращения отдельное соединение или одно глобальное соединение для всего сеанса работы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2006, 10:03 |
|
||
|
Перевод кода на MS SQL Server
|
|||
|---|---|---|---|
|
#18+
Valentin_timaХотелось бы узнать насчет соединения с сервером, какая технология предпочтительнее, для каждого обращения отдельное соединение или одно глобальное соединение для всего сеанса работы? Думаю для одного клиента - одно соединение, т.е. для сеанса. На установку соединения время тоже тратится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2006, 10:17 |
|
||
|
Перевод кода на MS SQL Server
|
|||
|---|---|---|---|
|
#18+
В общем я с Вами согласен. Логичное представление. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2006, 10:43 |
|
||
|
Перевод кода на MS SQL Server
|
|||
|---|---|---|---|
|
#18+
Меня волнует вопрос переноса данных на сервер, думаю что не только меня. Вот хотелось бы услышать, какими способаи это лучше делать? Я пробовал пользоваться фоксовским мастером и выявил такие проблемы: - В SQL Server'е отсутствуют некоторые типы данных имеющихся в фоксе и наоброт. - Мемо поля вообще не переносятся, в перенесенной таблице название поля есть а самих данных нет. - При переносе полей типа (С), на сервере они отображаются не верной кодовой страницей. - Некоторые таблицы мастер вообще отказывается переносить по непонятным мне причинам. У кого есть опыт - поделитесь.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2006, 11:01 |
|
||
|
Перевод кода на MS SQL Server
|
|||
|---|---|---|---|
|
#18+
Еще такой вопрос: - Как подключить СОМ+ компоненту к серверу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2006, 12:11 |
|
||
|
Перевод кода на MS SQL Server
|
|||
|---|---|---|---|
|
#18+
Сколько таблиц? Если меньше 100, то делал все вручную... Для большего количества есть утилиты, правда хороших бесплатных не видел - можете написать свою, это делается очень просто... Соединение я использую ODBC для MS SQL Server 2005 (Native client)... Если будете использовать Ваш "компонент" то соединение вначале сессии, закрытие в конце... Надеюсь, что DLL скомпилирована как multithreaded... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2006, 12:16 |
|
||
|
Перевод кода на MS SQL Server
|
|||
|---|---|---|---|
|
#18+
Sergey ChСколько таблиц? Если меньше 100, то делал все вручную... Для большего количества есть утилиты, правда хороших бесплатных не видел - можете написать свою, это делается очень просто... Соединение я использую ODBC для MS SQL Server 2005 (Native client)... Если будете использовать Ваш "компонент" то соединение вначале сессии, закрытие в конце... Надеюсь, что DLL скомпилирована как multithreaded... Что значит соединение в начале сессии, не совсем понял, и еще что означает multithreaded, single-threaded? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2006, 12:22 |
|
||
|
Перевод кода на MS SQL Server
|
|||
|---|---|---|---|
|
#18+
И еще какой принцип написания своей утлилиты, через RV или еще както по другому? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2006, 12:23 |
|
||
|
Перевод кода на MS SQL Server
|
|||
|---|---|---|---|
|
#18+
Valentin_timaИ еще какой принцип написания своей утлилиты, через RV или еще както по другому? Я бы самому поиграться с этим посоветовал. Заодно все способы взаимодействия с SQL сервером поизучаешь. Я бы sqlexec() попользовал. Если база большая, то почитай про команду bulk insert у MS SQL, иначе все очень медленно будет любым способом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2006, 12:47 |
|
||
|
Перевод кода на MS SQL Server
|
|||
|---|---|---|---|
|
#18+
Dima T Valentin_timaИ еще какой принцип написания своей утлилиты, через RV или еще както по другому? Я бы самому поиграться с этим посоветовал. Заодно все способы взаимодействия с SQL сервером поизучаешь. Я бы sqlexec() попользовал. Если база большая, то почитай про команду bulk insert у MS SQL, иначе все очень медленно будет любым способом. А почему не CursorAdapter? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2006, 12:53 |
|
||
|
Перевод кода на MS SQL Server
|
|||
|---|---|---|---|
|
#18+
авторА почему не CursorAdapter? изв. за флуд любят мазохизм вначале подолбятся с екзеком + темповыми таблицами, потом еще строк на 50 повыпендриваются как на локале курсор обновить идеи КС в массы! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2006, 13:27 |
|
||
|
Перевод кода на MS SQL Server
|
|||
|---|---|---|---|
|
#18+
пишу "большую красную кнопку" для VFP9-CAD-ODBC если чего-то получится, покажу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2006, 13:30 |
|
||
|
Перевод кода на MS SQL Server
|
|||
|---|---|---|---|
|
#18+
Valentin_timaА почему не CursorAdapter? Потому что VFP6, я на 9 еще не перебрался. CursorAdapter соответственно сам не юзал и ничего про него не скажу. Я бы решал задачу переброса так: на вход имя таблицы 1. Разбираем структуру и создаем аналогичную таблицу в SQL сервере (в приаттаченном файлике пример разбора DBC контейнера) 2. Генерим файл с содержимым таблицы 3. sqlexec("bulk insert ...") 4. создаем индексы на SQL ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2006, 13:33 |
|
||
|
Перевод кода на MS SQL Server
|
|||
|---|---|---|---|
|
#18+
alex11100 авторА почему не CursorAdapter? изв. за флуд любят мазохизм вначале подолбятся с екзеком + темповыми таблицами, потом еще строк на 50 повыпендриваются как на локале курсор обновить идеи КС в массы! Господи.. alex11100, да не надоело вам всех крестить этим CA ?! Ну вы то должны понимать, что CD это просто красивая обретка над не любымым вами "екзеком " (кстати, не понял, причем тут "временные таблицы"). Ничего больше, что может SPT, CA не может. Что-то типа ADO, но не над OLE DB, а над SQLEXEC. С уважением, Алексей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2006, 14:03 |
|
||
|
Перевод кода на MS SQL Server
|
|||
|---|---|---|---|
|
#18+
Aleksey-K alex11100 авторА почему не CursorAdapter? изв. за флуд любят мазохизм вначале подолбятся с екзеком + темповыми таблицами, потом еще строк на 50 повыпендриваются как на локале курсор обновить идеи КС в массы! Господи.. alex11100, да не надоело вам всех крестить этим CA ?! Ну вы то должны понимать, что CD это просто красивая обретка над не любымым вами "екзеком " (кстати, не понял, причем тут "временные таблицы"). Ничего больше, что может SPT, CA не может. Что-то типа ADO, но не над OLE DB, а над SQLEXEC. С уважением, Алексей. В общем то Вы правы, кроме того, что SQLEXEC возвращает не изменяемый сурсор, а СА буферизированный изменяемый. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2006, 14:09 |
|
||
|
Перевод кода на MS SQL Server
|
|||
|---|---|---|---|
|
#18+
Valentin_timaВ общем то Вы правы, кроме того, что SQLEXEC возвращает не изменяемый сурсор, а СА буферизированный изменяемый. 1) SQLExec() возвращает изменяемый и буферизированный курсор. Его вполне можно редактировать, при этом не забывая, что он буферрезирован. Отменить буферизацию такого курсора невозможно в принципе. Как и в CursorAdapter 2) При желании, используя ряд настроек CursorSetProp(), полученный через SQLExec() курсор можно сделать обновляемым. Т.е. самому написать класс CursorAdapter. Как уже сказал Aleksey-K CursorAdapter - это просто некий класс-надстройка над SQLExec(). Все основные функции в SQLExec() уже заложены. CursorAdapter - это просто удобный интерфейс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2006, 14:39 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=34179594&tid=1590237]: |
0ms |
get settings: |
7ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
147ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
64ms |
get tp. blocked users: |
1ms |
| others: | 214ms |
| total: | 460ms |

| 0 / 0 |
