2015-08-06 7 views
0

Я предоставляю поддержку приложений для устаревшего приложения VisualFoxPro. У пользователей приложения, похоже, проблема с запуском отчета. В отчете выполняется сравнение данных из базы данных (MS SQL SERVER) и локального файла (xxPAY.dbf) и отображается отчет. Пользовательский интерфейс для запуска отчета требует, чтобы пользователь вводил месяц и год, и соответственно изменился путь для xxPAY.DBF. Например,Ошибка сетевого диска или путь UNC для пути к файлу

Если пользователь вводит 201501, путь будет P: /xx/2015/01/xxPAY.dbf. Если пользователь войдет в 201402, путь станет P: /xx/2014/02/xxPAY.dbf

Привод P: это сетевой диск, а также приложение запускается как администратор. При отладке программы путь кажется прекрасным всегда, но я получаю сообщение об ошибке «P: /xx/2015/01/xxPAY.dbf» не найден. Однако, если я предоставляю путь UNC «\ ServerName \ xx \ 2015 \ 01 \ xxPAY.dbf», отчет генерирует штраф. Любые мысли, что может быть причиной такого поведения. Я не уверен, если требуется код, но я отправлю его здесь в любом случае: -

IF !FILE('P:\IMPORT\Wei-cosmts\'+ ; 
     LEFT(ALLT(STR(thisform.yyyymm,6,0)),4)+'\'+ ; 
     RIGHT(ALLT(STR(thisform.yyyymm,6,0)),2)+'\'+ ; 
     lsPeriod+'pay.dbf') 
    =MESSAGEBOX('Can not find '+'P:\IMPORT\Wei-cosmts\'+ ; 
     LEFT(ALLT(STR(thisform.yyyymm,6,0)),4)+'\'+ ; 
     RIGHT(ALLT(STR(thisform.yyyymm,6,0)),2)+'\'+ ; 
     lsPeriod+'pay.dbf'+'. '+CHR(13)+CHR(13)+'Comparison report can not run.',16) 
    RETURN .F. 
ENDIF 

ответ

0

Если путь UNC работает, я предложил бы использовать его.

FWIW, старая функция «отображенных дисков» в любом случае бесполезна, просто представление конечного пользователя «реального» (UNC) сетевого адреса. В вашем конкретном случае я бы предположил, что текущий пользователь Windows может иметь его во время отладки в среде IDE, тогда как пользователь времени выполнения, то есть «запустить как» учетную запись администратора, возможно, нет.

В вашем коде вам не нужно будет последовательно связывать вычисленную строку пути, например.

Local lcFile 
lcFile = "\\ServerNameOrIP\sharedFolder\" + ; 
    LEFT(ALLT(STR(thisform.yyyymm,6,0)),4)+'\'+ ; 
    RIGHT(ALLT(STR(thisform.yyyymm,6,0)),2)+'\'+ ; 
    lsPeriod+'pay.dbf' 
If Not File(m.lcFile, 1) 
    MessageBox(m.lcFile + " not found") 
... 
+0

Одна из проблем, которые я вижу с последующим подходом UNC-пути, заключается в том, что при каждом перемещении сервера потребуется изменение кода. Кажется, что запуск командной строки в качестве администратора и сопоставление диска с помощью команды «net use P: \\ servername \ folder» может решить проблему. Но это то, что мне нужно будет попробовать. –

+0

На практике большинство людей будут избегать жестко закодированных строк пути в своем коде в любом случае, т. Е. Сохранить их в файле конфигурации «config» где-то в папке «Профиль пользователя% AppData%», например. В VFP вы действительно можете использовать внешний файл 'config.fpw' или более масштабируемое место, такое как XML, INI и т. Д. Или даже TXT-файл. Создание динамически отображаемого диска во время выполнения вряд ли вызовет проблемы, поскольку это функция конечного пользователя, доступно только несколько писем, и вы не можете знать, существует ли «P» на определенном клиенте –