Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Задачка не для слабонервных
|
|||
|---|---|---|---|
|
#18+
Есть клиентское приложение, которое генерит на клиентской машине Paradox'овскую таблицу. В базе MS SQL имеется таблица, по своей структуре полностью совпадающая с Paradox'овской таблицей у юзера. Одно из полей серверной таблицы Identity. Такой механизм может быть задействован для любой таблицы серверной базы (а их там порядка полутора тысяч), соответственно структура Paradox'овской таблицы динамически изменяется. Задача - вставить записи из Paradox'а в серверную таблицу с автоматической генерацией identity. Рассматривались варианты: 1. Вставка данных по-записям клиентским приложением (типа insert into tablename (f1, f2, f3) values ('111', '222', '333') ). Минус в том, что для формирования текста запроса нужно, во-первых, проанализировать структуру таблицы и определить какое там поле identity, во-вторых, формировать строку значений values для каждой вставляемой записи с учетом типа поля. 2. Скопировать таблицу на сервер, и вставить записи с помощью чего-то типа insert into tablename select f1, f2, f3 from OpenDataSource('Microsoft.Jet.OLEDB.4.0', 'Data Source="d:\shared\"; Extended properties=Paradox 5.X')...userID_data Минусы - копировать файлы по сетке?!- маразм какой-то - и перечень полей для select'а получить тоже не слишком просто. Может что посоветуете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2001, 12:32 |
|
||
|
Задачка не для слабонервных
|
|||
|---|---|---|---|
|
#18+
Советую попробовать использовать DTS. Стоит один раз настроить и потом сделать расписание для запуска..А сложного ничего в этой задачке невижу... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2001, 15:38 |
|
||
|
Задачка не для слабонервных
|
|||
|---|---|---|---|
|
#18+
>Минусы - копировать файлы по сетке?!- маразм какой-то А зачем копировать ? Указать в Data Source расшаренный ресурс - и все. >и перечень полей для select'а получить тоже не слишком просто. А если использовать linked server, то при помощи sp_tables_ex и sp_columns_ex можно получить всю информацию о таблицах и столбцах и сгенироровать динамический запрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2001, 16:19 |
|
||
|
Задачка не для слабонервных
|
|||
|---|---|---|---|
|
#18+
DTS использовать не удастся - неизвестно когда и куда нужно закачивать данные. В OpenDataSource не получается использовать расшареный ресурс. При попытке выполнить что-то типа SELECT * FROM OpenDataSource('Microsoft.Jet.OLEDB.4.0', 'Data Source="\Ваня\db\"; Extended properties=Paradox 5.X')...buff машина думает секунд 40 после чего получаю OLE DB provider 'Microsoft.Jet.OLEDB.4.0' reported an error. [OLE/DB provider returned message: Недопустимое имя ''. Проверьте, что оно не содержит недопустимые символы или знаки препинания, а также не является слишком длинным.] Скорее всего что-то неправильно делаю, а что именно не могу понять. Не подскажете в чем ошибка? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2001, 07:01 |
|
||
|
Задачка не для слабонервных
|
|||
|---|---|---|---|
|
#18+
Может быть надо так ? 'Data Source=" \ \ Ваня\db\" (и db должен быть share, а не каталог) и еще учетная запись, под которой стартует SQL Server, должна иметь права на данный сетевой ресурс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2001, 07:20 |
|
||
|
Задачка не для слабонервных
|
|||
|---|---|---|---|
|
#18+
2 Anton: для DTS можно задавать перед запуском параметры (вроде пути или имени сервера) перед запуском пакета. См. описание объекта DTS Package в BOL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2001, 10:15 |
|
||
|
Задачка не для слабонервных
|
|||
|---|---|---|---|
|
#18+
Мне кажется, что обсуждение данного вопроса сползло в кювет, а главное осталось за кадром. Пусть меня поправит автор вопроса, если я не прав, но IMHO у него стоит задача буферизации любых данных, закачиваемых с сервера с последующей синхронизацией с сервером после внесения в них изменений. Эта тема весьма обширная и решаться эта задача может многими способами. У каждого из этих способов есть свои плюсы и минусы. Идеального решения на все случаи жизни нет. Хотя после появления ADO.NET стало понятно, что развитие технологий продвигается как раз в сторону разрешения данных проблем. Есл же речь идет о просто ADO, то имеется возможность: 1) использовать отключенные Recordset-ы 2) использовать пакетное обновление с помощью ButchUpdate 3) сохранять Recordset в специальном датаграмном файле на клиенте, править его, а потом отправлять обратно на сервер 4) хранить данные в виртуальной памяти приложения в виде большого количества незакрытых Recordset-ов (наверняка оперативной памяти без виртуальной не хватит) 5) использовать Merge-репликацию с клиентом файл-серверной СУБД, которая выполняет роль буфера на клиенте (например, MS Access) 6) использовать технологии MIDAS (правда, автор, как я понял, не Delphi-шник) Использовать dbf-файлы для буферизации далеко не самая лучшая идея. IMHO. Самая лучшая идея - использовать ADO.Net. Только область эта наполовину в тумане и пока не известно, сколько нервов придется попортить багами. Кроме того, использовать сегодня эту технологию по-человечески можно только из VB.NET и C#. FOX там не просматривается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2001, 19:11 |
|
||
|
|

start [/forum/topic.php?fid=46&fpage=3527&tid=1824803]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
54ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
35ms |
get tp. blocked users: |
1ms |
| others: | 258ms |
| total: | 390ms |

| 0 / 0 |
