powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Перевод кода на MS SQL Server
53 сообщений из 53, показаны все 3 страниц
Перевод кода на MS SQL Server
    #34176838
Valentin_tima
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемые! У меня такой вопрос.
Имеется приложение на фоксе, его нужно перевести на MS SQL Server. Т.е. данные поместить на SQL Server. Предполагается использовать ADODB и VFP CursorAdapter. В коде имеется выделенный слой для работы с базой данных, в котором куча Select'ов, Insert'ов, Delete'ов напрямую обращающихся к физическим данным. Посоветуйте какую технологию переработки кода лучше всего избрать, чтобы обойтись как можно меньшей кровью?
...
Рейтинг: 0 / 0
Перевод кода на MS SQL Server
    #34176941
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'у?
...
Рейтинг: 0 / 0
Перевод кода на MS SQL Server
    #34177039
Valentin_tima
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть на форуме кто-нибудь, кто переводил фоксовское приложение на SQL сервер?
...
Рейтинг: 0 / 0
Перевод кода на MS SQL Server
    #34177054
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valentin_timaЕсть на форуме кто-нибудь, кто переводил фоксовское приложение на SQL сервер?
Ох.. тяжело это... Вот так в лоб переводить из файл-сервер в клиент-сервер. А главное, мало смысла такого перевода. Да, работать будет, но не лучше, чем у вас работало в файл-сервер. Другая идеология. Граната не той системы :).
Проще, по моему мнению, для клиент-сервер все начать с нуля.
С уважением, Алексей.
...
Рейтинг: 0 / 0
Перевод кода на MS SQL Server
    #34177084
Valentin_tima
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тут такая ситуация. Заказчик требует сделать перевод. Делать это всеравно придется. А переработать код всетаки легче, чем написать заново. Но не в этом суть.
Хотелось бы все-таки услышать реальные предложения! Возможно и другим это пригодится...
...
Рейтинг: 0 / 0
Перевод кода на MS SQL Server
    #34177089
Valentin_tima
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хотелось бы узнать, что вы имели в виду - Другая идеология. Граната не той системы :).
...
Рейтинг: 0 / 0
Перевод кода на MS SQL Server
    #34177143
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valentin_timaХотелось бы все-таки услышать реальные предложения! Возможно и другим это пригодится...
К тому что сказал Алексей - добавлю, что прийдется переписывать все, включая интерфейс, иначе все будет работать оооччччень меееедленно...

В настоящий момент имею очень большую проблему с промышленной ERP программой, быстро переведенной на MS SQL Server (наверное в Индии ) Так одна форма в ней открывается за 30-35 секунд... Это что-то

But anyway, good luck!
...
Рейтинг: 0 / 0
Перевод кода на MS SQL Server
    #34177151
Фотография Vladimir M Sklyar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valentin_timaХотелось бы узнать, что вы имели в виду - Другая идеология. Граната не той системы :).

Что-то типа этого. Если переделывать - то с нуля и наче это будет тот-же файл-сервер, только способ хранения другой
...
Рейтинг: 0 / 0
Перевод кода на MS SQL Server
    #34177176
Valentin_tima
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В нашей системе есть выделенный слой данных, в виде Dll компоненты, который обменивается с интерфейсом через XML пакеты. Вот только в этой компаненте и нужно сделать преобразования. А она в свою очередь содержит только методы доступа к данным через SQL команды, естественно в фоксовском формате. Вот эти методы требуется переработать. Как это лучше сделать? У кого есть опыт, тот может, я думаю дать реальные советы. Может использовать хранимые процедуры на сервере подобных методам компоненты? Или все же переработка кода. А может кто-то использовал другие пути?
...
Рейтинг: 0 / 0
Перевод кода на MS SQL Server
    #34177444
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valentin_timaВ нашей системе есть выделенный слой данных, в виде Dll компоненты, который обменивается с интерфейсом через XML пакеты. Вот только в этой компаненте и нужно сделать преобразования. А она в свою очередь содержит только методы доступа к данным через SQL команды, естественно в фоксовском формате. Вот эти методы требуется переработать. Как это лучше сделать? У кого есть опыт, тот может, я думаю дать реальные советы. Может использовать хранимые процедуры на сервере подобных методам компоненты? Или все же переработка кода. А может кто-то использовал другие пути?
Язык у Вас какой-то странный... Вы вообще, на чем пишете программы, если не секрет и как долго?
...
Рейтинг: 0 / 0
Перевод кода на MS SQL Server
    #34177457
Valentin_tima
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вообще то на фоксе, а что странного?
...
Рейтинг: 0 / 0
Перевод кода на MS SQL Server
    #34177580
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А клиент для вашей Dll тоже на VFP написан? Иначе зачем тут XML ?
С уважением, Алексей
...
Рейтинг: 0 / 0
Перевод кода на MS SQL Server
    #34177612
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valentin_timaВообще то на фоксе, а что странного?
Просто мы хотм понять, в чем у Вас проблема и какие Ваши возможности как программиста, чтобы показать правильный путь... Потому как правильно заметил Алексей - фраза "Dll компоненты, который обменивается с интерфейсом через XML пакеты" говорит о том, что тут пахнет "Delphi"... и очень мало от FoxPro...
...
Рейтинг: 0 / 0
Перевод кода на MS SQL Server
    #34177715
Valentin_tima
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Клиент тоже на фоксе написан, а компанента используется как COM+, преимущества те же, что и в многослойной архитектуре.
...
Рейтинг: 0 / 0
Перевод кода на MS SQL Server
    #34177735
Valentin_tima
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergey Ch Valentin_timaВообще то на фоксе, а что странного?
Просто мы хотм понять, в чем у Вас проблема и какие Ваши возможности как программиста, чтобы показать правильный путь... Потому как правильно заметил Алексей - фраза "Dll компоненты, который обменивается с интерфейсом через XML пакеты" говорит о том, что тут пахнет "Delphi"... и очень мало от FoxPro...
Нет! "Delphi" тут и не пахнет. все на фоксе до последней команды. А что не понятного в этой фразе? Компонента обменивается с клиентом данными через XML.
...
Рейтинг: 0 / 0
Перевод кода на MS SQL Server
    #34177777
Valentin_tima
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Меня интересует то, что касается кода работы с данными через фоксовский SQL, вот что с этим кодом делать? Можно его каким то образом переработать на месте? И если можно, то как это лучше сделать?
...
Рейтинг: 0 / 0
Перевод кода на MS SQL Server
    #34177793
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valentin_timaХотелось бы узнать, что вы имели в виду - Другая идеология. Граната не той системы :).
Есть такая прога, может слышал, 1С 7.7 называется. Вот ее разработчики в лоб на MS-SQL с файл-серверного варианта перевели. Идеология работы с базой как была файловая, так и осталась. Тормоз жуткий.
При программировании клиент-сервера, идеология другая, абсолютно другой подход к получению данных, если с файл-сервером быстрее работа с записями, при этом к источнику данных можно постоянно быстро обращаться, то в клиент-сервере главное получить результат минимальным количеством обращений к базе.
Valentin_timaВ нашей системе есть выделенный слой данных, в виде Dll компоненты, который обменивается с интерфейсом через XML пакеты. Вот только в этой компаненте и нужно сделать преобразования. А она в свою очередь содержит только методы доступа к данным через SQL команды, естественно в фоксовском формате. Вот эти методы требуется переработать. Как это лучше сделать? У кого есть опыт, тот может, я думаю дать реальные советы. Может использовать хранимые процедуры на сервере подобных методам компоненты? Или все же переработка кода. А может кто-то использовал другие пути?
Простой заменой одного синтаксиса на другой не отделаться, даже если получится, то тормоз будет страшный. Совета типа "Сделай так и будет тебе счастье" никто не даст. Если задашь конкретный вопрос, получишь конкретный ответ.
А разработчиков этой DLL спросить можешь? Может ТЗ или описаловка какая есть? Тебе надо четко представлять как эта DLL работает. В фоксе только один вид DLL бывает - COM-объекты, которые используются клиентским софтом, поэтому надо понять что делает каждый класс, и исходя из этого переписывать, можеть с нуля быстрей написать будет. Вероятно структура базы изменится.
Valentin_timaЕсть на форуме кто-нибудь, кто переводил фоксовское приложение на SQL сервер?
Переводил - писал с нуля
...
Рейтинг: 0 / 0
Перевод кода на MS SQL Server
    #34177803
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valentin_tima Компонента обменивается с клиентом данными через XML.
Уже теплее... А что клиент потом делает с этим XML, после приема его от Вашей "компоненты"?
...
Рейтинг: 0 / 0
Перевод кода на MS SQL Server
    #34177829
Valentin_tima
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergey Ch Valentin_tima Компонента обменивается с клиентом данными через XML.
Уже теплее... А что клиент потом делает с этим XML, после приема его от Вашей "компоненты"?
Преобразует в VFP курсоры, т.е. происходит двусторонний обмен XML пакетами между клиентом и компанентой. А что это так важно? Вопрос то не совсем об этом, а точнее совсем не об этом... Как заставить компоненту работать с SQL Server'ом. Вот на этот вопрос хотелось бы получить ответы....
...
Рейтинг: 0 / 0
Перевод кода на MS SQL Server
    #34177869
Valentin_tima
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T Valentin_tima
А разработчиков этой DLL спросить можешь? Может ТЗ или описаловка какая есть? Тебе надо четко представлять как эта DLL работает. В фоксе только один вид DLL бывает - COM-объекты, которые используются клиентским софтом, поэтому надо понять что делает каждый класс, и исходя из этого переписывать, можеть с нуля быстрей написать будет. Вероятно структура базы изменится.
[quot Valentin_tima]Есть на форуме кто-нибудь, кто переводил фоксовское приложение на SQL сервер?
Переводил - писал с нуля
Dll'ки эти знаю, так как являюсь сопроводителем как раз этого добра.
Тогда конкретный вопрос.
Есть ли разница при работе с SQL Server'ом в СOM и COM+ технологии?
Какие реальные преимущества дает CurcorAdapter и ADODB против использования SQLConnect, SQLExec.
Какие преимущества при использовании CurcorAdapter против ADODB.
...
Рейтинг: 0 / 0
Перевод кода на MS SQL Server
    #34178070
andrew_Pr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valentin_timaВот например мне не понятно, как бороться с таким кодом -

Код: plaintext
1.
2.
3.
4.
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'у?

Сначала объясните, откуда Fox знает о существовании "некий курсор CurTO" ?
Очевидно, клиент предварительно отправляет, а компонента выполняет нечто вроде "Select * from тра-та-та INTO Cursor CurTO"
Что Вам мешает аналогично поступить с MSSQL ?

***
Valentin_tima
Вот только в этой компаненте и нужно сделать преобразования. А она в свою очередь содержит только методы доступа к данным через SQL команды, естественно в фоксовском формате.

Насколько я себе представляю взаимодействие с компонентой происходит примерно так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
оКомпанент.МетодПолученияДанных(Текст_SQL_запроса,Имя_XML_файла)

****
Define CLASS  Компанент OLEPUBLIC
Function МетодПолученияДанных
param Текст_SQL_запроса, Имя_XML_файла

&Текст_SQL_запроса into tmpCursor
=CURSORTOXML('tmpCursor',Имя_XML_файла)

ENDDEFINE

Что именно Вам мешает заменить < &Текст_SQL_запроса into tmpCursor >
на < =SQLEXEC(КоннектДескриптор,Текст_SQL_запроса ,'tmpCursor' >
...
Рейтинг: 0 / 0
Перевод кода на MS SQL Server
    #34178143
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valentin_tima Преобразует в VFP курсоры, т.е. происходит двусторонний обмен XML пакетами между клиентом и компанентой. А что это так важно? ....
Вот это очень важно... Получается, что Ваше приложение уже написано под клиент-серверную идеологию...

Осталось только переписать как указано Выше запросы на прием данных от сервера и все...

У меня работает аналогичный подход внутри Web Service - там идет внутри соединиение где надо с dbf или MS SQL Server... (на SQL Server я все сделал через хранимые процедуры - так проще по причине более развитого синтаксиса SQL)...

Good luck!

P.S. Как работать в FoxPro с MS SQL Server есть хорошие статьи на сайте Алексея или в VFP Help...
...
Рейтинг: 0 / 0
Перевод кода на MS SQL Server
    #34178151
Valentin_tima
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
По первому вопросу, данный курсор создается в коде из XML строки во входном параметре и далее используется, как видите, в запросе к источнику данных. Дело в том, что если послать на прямую этот запрос на сервер, то естественно сервер его не переварит, потому что просто не поймет. Как можно обйти подобные места в коде, а их как раз очень много?
...
Рейтинг: 0 / 0
Перевод кода на MS SQL Server
    #34178189
Valentin_tima
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergey Ch Valentin_tima Преобразует в VFP курсоры, т.е. происходит двусторонний обмен XML пакетами между клиентом и компанентой. А что это так важно? ....
Вот это очень важно... Получается, что Ваше приложение уже написано под клиент-серверную идеологию...

Осталось только переписать как указано Выше запросы на прием данных от сервера и все...

У меня работает аналогичный подход внутри Web Service - там идет внутри соединиение где надо с dbf или MS SQL Server... (на SQL Server я все сделал через хранимые процедуры - так проще по причине более развитого синтаксиса SQL)...

Good luck!

P.S. Как работать в FoxPro с MS SQL Server есть хорошие статьи на сайте Алексея или в VFP Help...
Вы очень правильно поняли мою проблему, сразу видно, что Вы имеете в этом вопросе опыт.
Да, действительно приложение создавалось под идеалогию клиент-сервер.
Вопрос: Каким способом Вы подключаетесь в серверу, и какие средства используете при работе с сервером через фокс (RV, ADO, CA, SPT) ?
...
Рейтинг: 0 / 0
Перевод кода на MS SQL Server
    #34178203
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valentin_timaПо первому вопросу, данный курсор создается в коде из XML строки во входном параметре и далее используется, как видите, в запросе к источнику данных. Дело в том, что если послать на прямую этот запрос на сервер, то естественно сервер его не переварит, потому что просто не поймет. Как можно обйти подобные места в коде, а их как раз очень много?
1. перед запросом создать временную таблицу на сервере, заполнить и указать ее в запросе
2. перечислить список вместо подзапроса
Код: plaintext
select ... idexp in ( 1 , 2 , 3 , 4 , 5 ,...)
Что быстрее работает надо пробовать. Зависит от размеров таблиц. И во втором варианте могут быть проблемы если запрос окажется очень длинный. В VFP6 ограничение около 4000 знаков.
...
Рейтинг: 0 / 0
Перевод кода на MS SQL Server
    #34178247
Valentin_tima
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T Valentin_timaПо первому вопросу, данный курсор создается в коде из XML строки во входном параметре и далее используется, как видите, в запросе к источнику данных. Дело в том, что если послать на прямую этот запрос на сервер, то естественно сервер его не переварит, потому что просто не поймет. Как можно обйти подобные места в коде, а их как раз очень много?
1. перед запросом создать временную таблицу на сервере, заполнить и указать ее в запросе
2. перечислить список вместо подзапроса
Код: plaintext
select ... idexp in ( 1 , 2 , 3 , 4 , 5 ,...)
Что быстрее работает надо пробовать. Зависит от размеров таблиц. И во втором варианте могут быть проблемы если запрос окажется очень длинный. В VFP6 ограничение около 4000 знаков.
По первому пункту я понял, т.е. предполагется сначала создать ХП по формированию нужного курсора, а затем ее выполнить, а в фоксе в команде запроса указать имя таблицы. А вот второй пункт не совсем понял, что имеется в виду? Что это за список, если можно подробнее..
...
Рейтинг: 0 / 0
Перевод кода на MS SQL Server
    #34178558
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valentin_tima1. перед запросом создать временную таблицу на сервере, заполнить и указать ее в запросе
2. перечислить список вместо подзапроса
Код: plaintext
select ... idexp in ( 1 , 2 , 3 , 4 , 5 ,...)
Что быстрее работает надо пробовать. Зависит от размеров таблиц. И во втором варианте могут быть проблемы если запрос окажется очень длинный. В VFP6 ограничение около 4000 знаков.
По первому пункту я понял, т.е. предполагется сначала создать ХП по формированию нужного курсора, а затем ее выполнить, а в фоксе в команде запроса указать имя таблицы. А вот второй пункт не совсем понял, что имеется в виду? Что это за список, если можно подробнее..[/quot]
Например тебе пришло на вход:
TempTableId324364755и запрос
Код: plaintext
select * from BigTable where nSomeId in (select Id from TempTable)
сейчас ты сохраняешь TempTable в курсор и выполняешь запрос

по п.1 надо
Код: plaintext
1.
2.
3.
4.
5.
sqlexec(nHandle, "create table #temp (Id i)")
sqlexec(nHandle, "INSERT INTO #temp (id) VALUES (3) ")
sqlexec(nHandle, "INSERT INTO #temp (id) VALUES (24) ")
...
sqlexec(nHandle, "select * from BigTable where nSomeId in (select Id from #Temp)", "MyRes")
sqlexec(nHandle, "DROP table #Temp")
по п.2
Код: plaintext
sqlexec(nHandle, "select * from BigTable where nSomeId in (3,24,36,47,55)", "MyRes")
затем полученный курсор "MyRes" - возращаешь клиенту.
чем больше TempTable, тем длинее строка запроса получится.
...
Рейтинг: 0 / 0
Перевод кода на MS SQL Server
    #34178601
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'у?

А получить в результате надо одну строку или несколько ???
...
Рейтинг: 0 / 0
Перевод кода на MS SQL Server
    #34178617
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
sqlexec(nHandle, "create table #temp (Id i)")
sele CurTO
scan
sqlexec(nHandle, "INSERT INTO #temp (id) VALUES (" + alltrim(str(CurTO.Id)) + ") ")
endscan
...
Понятно?
...
Рейтинг: 0 / 0
Перевод кода на MS SQL Server
    #34178628
Valentin_tima
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T Valentin_tima1. перед запросом создать временную таблицу на сервере, заполнить и указать ее в запросе
2. перечислить список вместо подзапроса
Код: plaintext
select ... idexp in ( 1 , 2 , 3 , 4 , 5 ,...)
Что быстрее работает надо пробовать. Зависит от размеров таблиц. И во втором варианте могут быть проблемы если запрос окажется очень длинный. В VFP6 ограничение около 4000 знаков.
По первому пункту я понял, т.е. предполагется сначала создать ХП по формированию нужного курсора, а затем ее выполнить, а в фоксе в команде запроса указать имя таблицы. А вот второй пункт не совсем понял, что имеется в виду? Что это за список, если можно подробнее..
Например тебе пришло на вход:
TempTableId324364755и запрос
Код: plaintext
select * from BigTable where nSomeId in (select Id from TempTable)
сейчас ты сохраняешь TempTable в курсор и выполняешь запрос

по п.1 надо
Код: plaintext
1.
2.
3.
4.
5.
sqlexec(nHandle, "create table #temp (Id i)")
sqlexec(nHandle, "INSERT INTO #temp (id) VALUES (3) ")
sqlexec(nHandle, "INSERT INTO #temp (id) VALUES (24) ")
...
sqlexec(nHandle, "select * from BigTable where nSomeId in (select Id from #Temp)", "MyRes")
sqlexec(nHandle, "DROP table #Temp")
по п.2
Код: plaintext
sqlexec(nHandle, "select * from BigTable where nSomeId in (3,24,36,47,55)", "MyRes")
затем полученный курсор "MyRes" - возращаешь клиенту.
чем больше TempTable, тем длинее строка запроса получится.[/quot]

Спасибо ... В общем то это реальный выход, по аналогии можно и с дугим кодом бооться.
...
Рейтинг: 0 / 0
Перевод кода на MS SQL Server
    #34178661
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valentin_tima Вы очень правильно поняли мою проблему, сразу видно, что Вы имеете в этом вопросе опыт.
Да, действительно приложение создавалось под идеалогию клиент-сервер.
Вопрос: Каким способом Вы подключаетесь в серверу, и какие средства используете при работе с сервером через фокс (RV, ADO, CA, SPT) ?

Работаю с сервером SQL через SPT (закачиваю, что надо на "компонент" и затем передаю на клиента)...

Насчет временных таблиц (курсоров) - в 95% случаев можно без них обойтись, так как синтаксис у MS SQL Server намного шире, чем синтаксис FoxPro. Я бы на Вашем месте переписал бы все на Хранимые процедуры серевра, а Ваш "компонент" бы просто передавал данные между приложением и сервером через параметры...

К меня много работет таких приложений, только вместо "компонента" использую Web Service (так как по требованию заказчиков приложения должны работать через Интерент)...

Good luck!
...
Рейтинг: 0 / 0
Перевод кода на MS SQL Server
    #34178689
Valentin_tima
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergey Ch Valentin_tima Вы очень правильно поняли мою проблему, сразу видно, что Вы имеете в этом вопросе опыт.
Да, действительно приложение создавалось под идеалогию клиент-сервер.
Вопрос: Каким способом Вы подключаетесь в серверу, и какие средства используете при работе с сервером через фокс (RV, ADO, CA, SPT) ?

Работаю с сервером SQL через SPT (закачиваю, что надо на "компонент" и затем передаю на клиента)...

Насчет временных таблиц (курсоров) - в 95% случаев можно без них обойтись, так как синтаксис у MS SQL Server намного шире, чем синтаксис FoxPro. Я бы на Вашем месте переписал бы все на Хранимые процедуры серевра, а Ваш "компонент" бы просто передавал данные между приложением и сервером через параметры...

К меня много работет таких приложений, только вместо "компонента" использую Web Service (так как по требованию заказчиков приложения должны работать через Интерент)...

Good luck!

Т.е. как я понял, перенести методы компоненты на сервер, выполнив разумеется их адаптацию? В общем это конечно выход, тем более что Вы на практике используете такой метод. Значит от прямых запросов на сервер из кода следует лучше всего избавиться, я правильно понял?
...
Рейтинг: 0 / 0
Перевод кода на MS SQL Server
    #34178812
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valentin_tima Т.е. как я понял, перенести методы компоненты на сервер, выполнив разумеется их адаптацию? В общем это конечно выход, тем более что Вы на практике используете такой метод. Значит от прямых запросов на сервер из кода следует лучше всего избавиться, я правильно понял?
Да, я не делаю прямых запросов на сервер - передаю параметрами и возвращаю курсоры с необходимыми данными... С обнолением и вставкой данных немного сложнее, но если данных немного, то можно через параметры. В FoxPro это сделать проще, так как курсор можно легко преобразовать в XML текст и передать как параметр, потом в Вашем "компоненте" снова получить курсор и уже его "залить" в таблицу dbf... C MS SQL Server такой "фокус" я не пробовал, так как 2000 работал отвартительно плохо с XML, после чего я стал делать все через параметры к Хранимым процедурам...

P.S. Но новые приложения я разрабатываю уже для работы непосредственно с SQL Server из самого приложения, так как этот серавер прекрасно работает по TCP/IP (то есть через Интернет, а использование Web Services замеляет процесс обмена данных официально на 30% , а по моей правтике в 2-3 раза). Таким образом с SQL Server проблемы обновления нет - для простых вариантов использую курсор-адаптер, для более ответсвенных - вызов хранимых процедур с параметрами...
...
Рейтинг: 0 / 0
Перевод кода на MS SQL Server
    #34179370
Valentin_tima
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Большое спасибо за помощь! Но думаю, что будет еще масса вопросов
...
Рейтинг: 0 / 0
Перевод кода на MS SQL Server
    #34179466
Valentin_tima
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хотелось бы узнать насчет соединения с сервером, какая технология предпочтительнее, для каждого обращения отдельное соединение или одно глобальное соединение для всего сеанса работы?
...
Рейтинг: 0 / 0
Перевод кода на MS SQL Server
    #34179509
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valentin_timaХотелось бы узнать насчет соединения с сервером, какая технология предпочтительнее, для каждого обращения отдельное соединение или одно глобальное соединение для всего сеанса работы?
Думаю для одного клиента - одно соединение, т.е. для сеанса. На установку соединения время тоже тратится.
...
Рейтинг: 0 / 0
Перевод кода на MS SQL Server
    #34179594
Valentin_tima
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В общем я с Вами согласен. Логичное представление.
...
Рейтинг: 0 / 0
Перевод кода на MS SQL Server
    #34179654
Valentin_tima
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Меня волнует вопрос переноса данных на сервер, думаю что не только меня. Вот хотелось бы услышать, какими способаи это лучше делать? Я пробовал пользоваться фоксовским мастером и выявил такие проблемы:
- В SQL Server'е отсутствуют некоторые типы данных имеющихся в фоксе и наоброт.
- Мемо поля вообще не переносятся, в перенесенной таблице название поля есть а самих данных нет.
- При переносе полей типа (С), на сервере они отображаются не верной кодовой страницей.
- Некоторые таблицы мастер вообще отказывается переносить по непонятным мне причинам.
У кого есть опыт - поделитесь..
...
Рейтинг: 0 / 0
Перевод кода на MS SQL Server
    #34179969
Valentin_tima
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще такой вопрос:
- Как подключить СОМ+ компоненту к серверу?
...
Рейтинг: 0 / 0
Перевод кода на MS SQL Server
    #34179993
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сколько таблиц? Если меньше 100, то делал все вручную...

Для большего количества есть утилиты, правда хороших бесплатных не видел - можете написать свою, это делается очень просто...

Соединение я использую ODBC для MS SQL Server 2005 (Native client)...

Если будете использовать Ваш "компонент" то соединение вначале сессии, закрытие в конце... Надеюсь, что DLL скомпилирована как multithreaded...
...
Рейтинг: 0 / 0
Перевод кода на MS SQL Server
    #34180014
Valentin_tima
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergey ChСколько таблиц? Если меньше 100, то делал все вручную...

Для большего количества есть утилиты, правда хороших бесплатных не видел - можете написать свою, это делается очень просто...

Соединение я использую ODBC для MS SQL Server 2005 (Native client)...

Если будете использовать Ваш "компонент" то соединение вначале сессии, закрытие в конце... Надеюсь, что DLL скомпилирована как multithreaded...

Что значит соединение в начале сессии, не совсем понял, и еще что означает multithreaded, single-threaded?
...
Рейтинг: 0 / 0
Перевод кода на MS SQL Server
    #34180024
Valentin_tima
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И еще какой принцип написания своей утлилиты, через RV или еще както по другому?
...
Рейтинг: 0 / 0
Перевод кода на MS SQL Server
    #34180144
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valentin_timaИ еще какой принцип написания своей утлилиты, через RV или еще както по другому?
Я бы самому поиграться с этим посоветовал. Заодно все способы взаимодействия с SQL сервером поизучаешь.
Я бы sqlexec() попользовал.
Если база большая, то почитай про команду bulk insert у MS SQL, иначе все очень медленно будет любым способом.
...
Рейтинг: 0 / 0
Перевод кода на MS SQL Server
    #34180177
Valentin_tima
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T Valentin_timaИ еще какой принцип написания своей утлилиты, через RV или еще както по другому?
Я бы самому поиграться с этим посоветовал. Заодно все способы взаимодействия с SQL сервером поизучаешь.
Я бы sqlexec() попользовал.
Если база большая, то почитай про команду bulk insert у MS SQL, иначе все очень медленно будет любым способом.
А почему не CursorAdapter?
...
Рейтинг: 0 / 0
Перевод кода на MS SQL Server
    #34180299
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторА почему не CursorAdapter?

изв. за флуд

любят мазохизм
вначале подолбятся с екзеком + темповыми таблицами,
потом еще строк на 50 повыпендриваются как на локале курсор обновить

идеи КС в массы!
...
Рейтинг: 0 / 0
Перевод кода на MS SQL Server
    #34180315
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
пишу "большую красную кнопку"
для VFP9-CAD-ODBC

если чего-то получится, покажу
...
Рейтинг: 0 / 0
Перевод кода на MS SQL Server
    #34180327
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valentin_timaА почему не CursorAdapter?
Потому что VFP6, я на 9 еще не перебрался.
CursorAdapter соответственно сам не юзал и ничего про него не скажу.

Я бы решал задачу переброса так:
на вход имя таблицы
1. Разбираем структуру и создаем аналогичную таблицу в SQL сервере (в приаттаченном файлике пример разбора DBC контейнера)
2. Генерим файл с содержимым таблицы
3. sqlexec("bulk insert ...")
4. создаем индексы на SQL
...
Рейтинг: 0 / 0
Перевод кода на MS SQL Server
    #34180484
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex11100 авторА почему не CursorAdapter?

изв. за флуд

любят мазохизм
вначале подолбятся с екзеком + темповыми таблицами,
потом еще строк на 50 повыпендриваются как на локале курсор обновить

идеи КС в массы!
Господи.. alex11100, да не надоело вам всех крестить этим CA ?!
Ну вы то должны понимать, что CD это просто красивая обретка над не любымым вами "екзеком " (кстати, не понял, причем тут "временные таблицы"). Ничего больше, что может SPT, CA не может.
Что-то типа ADO, но не над OLE DB, а над SQLEXEC.
С уважением, Алексей.
...
Рейтинг: 0 / 0
Перевод кода на MS SQL Server
    #34180496
Valentin_tima
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Aleksey-K alex11100 авторА почему не CursorAdapter?

изв. за флуд

любят мазохизм
вначале подолбятся с екзеком + темповыми таблицами,
потом еще строк на 50 повыпендриваются как на локале курсор обновить

идеи КС в массы!
Господи.. alex11100, да не надоело вам всех крестить этим CA ?!
Ну вы то должны понимать, что CD это просто красивая обретка над не любымым вами "екзеком " (кстати, не понял, причем тут "временные таблицы"). Ничего больше, что может SPT, CA не может.
Что-то типа ADO, но не над OLE DB, а над SQLEXEC.
С уважением, Алексей.

В общем то Вы правы, кроме того, что SQLEXEC возвращает не изменяемый сурсор, а СА буферизированный изменяемый.
...
Рейтинг: 0 / 0
Перевод кода на MS SQL Server
    #34180627
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valentin_timaВ общем то Вы правы, кроме того, что SQLEXEC возвращает не изменяемый сурсор, а СА буферизированный изменяемый.
1) SQLExec() возвращает изменяемый и буферизированный курсор. Его вполне можно редактировать, при этом не забывая, что он буферрезирован. Отменить буферизацию такого курсора невозможно в принципе. Как и в CursorAdapter

2) При желании, используя ряд настроек CursorSetProp(), полученный через SQLExec() курсор можно сделать обновляемым. Т.е. самому написать класс CursorAdapter.

Как уже сказал Aleksey-K CursorAdapter - это просто некий класс-надстройка над SQLExec(). Все основные функции в SQLExec() уже заложены. CursorAdapter - это просто удобный интерфейс.
...
Рейтинг: 0 / 0
Перевод кода на MS SQL Server
    #34180716
Valentin_tima
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМ Valentin_timaВ общем то Вы правы, кроме того, что SQLEXEC возвращает не изменяемый сурсор, а СА буферизированный изменяемый.
1) SQLExec() возвращает изменяемый и буферизированный курсор. Его вполне можно редактировать, при этом не забывая, что он буферрезирован. Отменить буферизацию такого курсора невозможно в принципе. Как и в CursorAdapter

2) При желании, используя ряд настроек CursorSetProp(), полученный через SQLExec() курсор можно сделать обновляемым. Т.е. самому написать класс CursorAdapter.

Как уже сказал Aleksey-K CursorAdapter - это просто некий класс-надстройка над SQLExec(). Все основные функции в SQLExec() уже заложены. CursorAdapter - это просто удобный интерфейс.

Ну тогда SQLExec() должен уметь коннектиться через АDO, а он это умеет? Иначе это принципиальное отличие от СА.
...
Рейтинг: 0 / 0
Перевод кода на MS SQL Server
    #34180906
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Valentin_tima, используй КАД
он позволяет абстрагироваться от сервера, курсоров ...,
позволяет правильно моделировать процессы получения и обновления данных

но только 9-ю версию лисы нужно использовать

sqlexec - это трудоемкий ручной способ работы с сервером
...
Рейтинг: 0 / 0
Перевод кода на MS SQL Server
    #34180925
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valentin_tima
Valentin_tima
В общем то Вы правы, кроме того, что SQLEXEC возвращает не изменяемый сурсор, а СА буферизированный изменяемый.
Ну тогда SQLExec() должен уметь коннектиться через АDO, а он это умеет? Иначе это принципиальное отличие от СА.
Интересно, какое отношение технология ADO имеет к типу возвращаемого курсора

Cursor Adapter - это объединение 4 принципиально разных технологий доступа к данным в одном интерфейсе

Native - прямой доступ к DBF средствами FoxPro
ODBC
ADO
XML

Т.е. внешне, вроде бы все однаково, но "начинка" принципиально разная

SQLExec() - это одна из 4 технологий. В данном случае ODBC.

Для работы через ADO используют другие механизмы. НЕ SQLExec(). В свою очередь CursorAdapter является оберткой и над этими другими механизмами.

КАЖДУЮ из этих 4 технологий можно реализовать без CursorAdapter. В одних случаях это будет просто, в других - сложно.

Технология ADO - это "не естесственный" механизм доступа к данным с точки зрения FoxPro. Поэтому реализовать такой механизм вне CursorAdapter можно, но потребует значительных усилий.
...
Рейтинг: 0 / 0
53 сообщений из 53, показаны все 3 страниц
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Перевод кода на MS SQL Server
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]