Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / слияние баз по сети / 16 сообщений из 16, страница 1 из 1
15.10.2004, 10:01
    #32739765
m_a_r_i_n_a
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
слияние баз по сети
есть база FPD которая стоит на 4 ПК (в локальнй сети)
как рационально (программно) слить ее в одну базу, используя сеть ?
процедуру слияния будет выполнять пользователь, поэтому нужно автоматизировать весь процесс, включая процедуру подключения/отключения сетевых дисков
благодарю за ответы
...
Рейтинг: 0 / 0
15.10.2004, 10:15
    #32739798
AlikWishin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
слияние баз по сети
Я правильно понял, то речь идет о одной и той же базе только на 4 машинах.
Т.е. прога одна и таже, но на каждой машине своя информация?
...
Рейтинг: 0 / 0
15.10.2004, 12:15
    #32740135
Станислав C.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
слияние баз по сети
m_a_r_i_n_aесть база FPD которая стоит на 4 ПК (в локальнй сети)
как рационально (программно) слить ее в одну базу, используя сеть ?
процедуру слияния будет выполнять пользователь, поэтому нужно автоматизировать весь процесс, включая процедуру подключения/отключения сетевых дисков
благодарю за ответы

Да, можно все, что ты хочешь, сделать программно.
Правда, придется немного (или много...) поработать...
Необходимо:
1. Иметь файл, в котором указаны сетевые пути для подключения/слияния данных
2. командой run net use... назначаем сетевой диск по пути, прписанному в файле
3. при помощи Select-SQL проверяем наличие в общей базе данных пользователя. Если введены все данные, то не делаем ничего. Если данные не введены/введены не полностью, то пытаемся ввести недостающие данные (опять же через Select-SQL и Insert-SQL).
3а. Если кто-то уже вводит данные, то не мешаем ему, а ждем окончания процесса или предоставляем выбор действий (ждать/вернуться позже) пользователю...
4. Поступаем так для каждой таблицы локальной базы данных...

Примечание:
1. Естественно, что сетевые пути к общей базе данных лучше указывать программисту...
2. При больших объемах данных/количестве файлов в базе данных процедура закачки будет занимать значительное время...
3. И не лучше ли работать непосредственно с сетевого диска...
...
Рейтинг: 0 / 0
15.10.2004, 14:58
    #32740612
m_a_r_i_n_a
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
слияние баз по сети
не надо всего этого ... задача проста ....
- база стоит одна и та же на 4 машинах (одна структура), просто содержимое записей разное
- при процедуре слияния на всех 4 машинах корректировка данных не проводится
- нужно одним махом слить ее программно на любую из 4 машин по сети
...
Рейтинг: 0 / 0
15.10.2004, 16:56
    #32740942
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
слияние баз по сети
APPEND FROM тебе поможет!
...
Рейтинг: 0 / 0
16.10.2004, 00:05
    #32741325
-Ноль-
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
слияние баз по сети
Присоеденили каталоги всех машин с которых нужно собрать информацию в 1 таблицу:
Допустим диск X: каталог первой машины;
Y: каталог второй машины;
Z: каталог третьей машины.

Открывает таблицы:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
cPathTable =  "X:\nametable.dbf"
cAliasName = "nametable_X"
Use (cPathTable) In  0  Again  Shared Alias (cAliasName)

cPathTable =  "Y:\nametable.dbf"
cAliasName = "nametable_Y"
Use (cPathTable) In  0  Again  Shared Alias (cAliasName)

cPathTable =  "Z:\nametable.dbf"
cAliasName = "nametable_Z"
Use (cPathTable) In  0  Again  Shared Alias (cAliasName)

SELECT * from nametable_Y;
UNION ALL (select * from nametable_Y);
union all(select * from nametable_Z) into cursor my_rez;
Browse

Так допустим на вскидку.
...
Рейтинг: 0 / 0
18.10.2004, 07:00
    #32741954
Станислав C.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
слияние баз по сети
m_a_r_i_n_aне надо всего этого ... задача проста ....
- база стоит одна и та же на 4 машинах (одна структура), просто содержимое записей разное
- при процедуре слияния на всех 4 машинах корректировка данных не проводится
- нужно одним махом слить ее программно на любую из 4 машин по сети

Уж не расчет ли это зарплаты? Когда я работал на заводе у нас было то же самое: четыре машины у расчетчиков и головная боль со слиянием...

-Ноль- предложил, по-моему, оптимальный вариант. Но, все-таки, лучше определиться на какой из этих четырех машин (или на какой-то пятой машине) будет находиться "слитая" база, чтобы не перебирать все варианты (минимум 4 варианта путей для слияния на каждой машине)...
...
Рейтинг: 0 / 0
18.10.2004, 10:15
    #32742087
m_a_r_i_n_a
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
слияние баз по сети
-Ноль-Присоеденили каталоги всех машин с которых нужно собрать информацию в 1 таблицу:

спасибо за ответ, а нельзя ли программно присоединить/отсоединить каталоги машин, с кот нужно собрать информацию?
...
Рейтинг: 0 / 0
18.10.2004, 10:34
    #32742134
Станислав C.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
слияние баз по сети
m_a_r_i_n_a -Ноль-Присоеденили каталоги всех машин с которых нужно собрать информацию в 1 таблицу:

спасибо за ответ, а нельзя ли программно присоединить/отсоединить каталоги машин, с кот нужно собрать информацию?

Это можно сделать, если :
- знать имена компьютеров в сети;
- знать имена "расшаренных" дисков;
- на какой машине производится слияние (чтобы не обращаться к самому себе через сеть).

После этого пишешь:

Вариант 1 (с Bat-файлом):
В Bat-файле пишешь (до запуска твоей программы):
Net use X: \\ComputerName1\DiskName\
Net use Y: \\ComputerName2\DiskName\
Net use Z: \\ComputerName3\DiskName\

в программе пишешь:
use x:\filename1 in 0
use y:\filename1 in 0
use z:\filename1 in 0 и т.д.

Вариант 2 (без Bat-файла):

в программе заводишь переменные:
user1="\\ComputerName1\DiskName\"
user2="\\ComputerName2\DiskName\"
user3="\\ComputerName3\DiskName\"

а затем:
use (user1+"\filename1") in 0
use (user2+"\filename1") in 0
use (user3+"\filename1") in 0 и т.д.

Вариант 3 (без Bat-файла):
скаладывашь значение переменных user1, user2, user3 из Варианта 2 в поле таблицы my_path:
UseID Path
user1 \\ComputerName1\DiskName\
user2 \\ComputerName2\DiskName\
user3 \\ComputerName3\DiskName\

а затем в программе:
use my_path
go top
do while !eof()
use (my_path.path+"\filename1") in 0 alias (my_path.UseID)
select my_path
skip 1
enddo

Примерно так. Все ограничено лишь фантазией и опытом работы...
...
Рейтинг: 0 / 0
18.10.2004, 10:43
    #32742151
Станислав C.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
слияние баз по сети
m_a_r_i_n_a
спасибо за ответ, а нельзя ли программно присоединить/отсоединить каталоги машин, с кот нужно собрать информацию?

Ага. Знакомое желание. Так было на моей прежней работе. "Хочу, чтобы я только подумал, а в программе уже был бы сформирован отчет" - таково было желание большинства пользователей.
Только: "программа выполняет то, что ей приказали делать, а не то, что бы Вы хотели". Как бы Вам не хотелось обратного...
...
Рейтинг: 0 / 0
18.10.2004, 12:00
    #32742318
m_a_r_i_n_a
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
слияние баз по сети
спасибо за ответ, идею - попробую реализовать ...
А на счет
Станислав C.[quot m_a_r_i_n_a]
Ага. Знакомое желание. Так было на моей прежней работе. "Хочу, чтобы я только подумал, а в программе уже был бы сформирован отчет" - таково было желание большинства пользователей.
думаю, любое желание пользователя - оправдано, если это возможно сделать - почему бы и нет ?
Они же не просят заставить компьютер танцевать :) ?
...
Рейтинг: 0 / 0
18.10.2004, 12:06
    #32742333
=Ноль=
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
слияние баз по сети
m_a_r_i_n_a А OC у Вас какая ?
...
Рейтинг: 0 / 0
18.10.2004, 13:12
    #32742477
*Ноль*
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
слияние баз по сети
Программно подключить так :
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
#define ERROR_ACCESS_DENIED                       5 
#define ERROR_ALREADY_ASSIGNED                  85 
#define ERROR_BAD_DEV_TYPE                        66 
#define ERROR_BAD_DEVICE                            1200 
#define ERROR_BAD_NET_NAME                        67 
#define ERROR_BAD_PROFILE                           1206 
#define ERROR_CANNOT_OPEN_PROFILE             1205 
#define ERROR_DEVICE_ALREADY_REMEMBERED   1202 
#define ERROR_EXTENDED_ERROR                     1208 
#define ERROR_INVALID_PASSWORD                  86 
#define ERROR_NO_NET_OR_BAD_PATH              1203 
#define ERROR_NO_NETWORK                           1222 

Declare integer WNetAddConnection IN WIN32API string @, string @, string @

Local lc_resource, lc_localdisk, lc_password, ln_err
lc_resource  = "\\at-re9cbkvqn8vx\tmp"+CHR( 0 )  
&&Имя присоеденяемого ресурса: at-re9cbkvqn8vx  -  имя компьтера,tmp - имя &&каталога, доступ к каталогу должен быть открыт либо полностью, либо  под паролем:
lc_localdisk ="G:" && Имя диска на вашей машине ассоциируемого с подлюченным ресурсом
lc_password ="" && пароль

 1 . Если полный доступ:
 ln_err =  WNetAddConnection(@lc_resource,NULL,@lc_localdisk)
 2 . Если под паролем:
ln_err =  WNetAddConnection(@lc_resource,@lc_password,@lc_localdisk)
&& ln_err -  ошибки описаны в начале ответа.
...
Рейтинг: 0 / 0
18.10.2004, 14:34
    #32742689
m_a_r_i_n_a
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
слияние баз по сети
ОС - WIN 2000
огромное спасибо за помощь и поддержку, буду пробовать :)
...
Рейтинг: 0 / 0
19.10.2004, 00:07
    #32743535
Igor Korolyov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
слияние баз по сети
Я вообще не понимаю, а зачем что-то "подключать", что через UNC пути никак
не получается? IMHO так и проще и понятнее.
Код: plaintext
USE \\Comp1\ThisProgramShare\table1.dbf IN  0  SHARED ALIAS table1
Если путь и имя находится в переменной, то можно так:
Код: plaintext
1.
lcPath = "\\Comp1\ThisProgramShare\table1.dbf"
USE (m.lcPath) IN  0  SHARED ALIAS table1
Единственно когда реально нужно "подключать диск" - это если ресурс требует
ввода своего имени/пользователя пароля (отличающегося от того, под чем в
данный момент работает пользователь) - но это будет уже совсем другой
вопрос.

Posted via ActualForum NNTP Server 1.0
...
Рейтинг: 0 / 0
19.10.2004, 07:12
    #32743594
*Ноль*
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
слияние баз по сети
Прямой путь может быть больше 255 байт, в таком случае фокс будет глючить. К тому же подключение возвращает код ошибки если с удаленным ресурсом траблы. А при прямом обращении ощибка проявляется на этапе использования таблицы. Хотя, тут уже на любителя.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / слияние баз по сети / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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