Доступ к VBA - Отдельные идентичные формы с разными источниками записи?

Библиотека классов Java представляет собой внешние процессы с использованием класса java.lang.Process . Процессы могут быть созданы с помощью java.lang.ProcessBuilder :

Process process = new ProcessBuilder("processname").start();

или более старого интерфейса, выставленного перегруженными exec методами на java.lang.Runtime class:

Process process = Runtime.getRuntime().exec("processname");

Оба эти фрагмента кода будут порождать новый процесс, который обычно выполняется асинхронно и может взаимодействовать через результирующий объект Process . Если вам нужно проверить завершение процесса (или дождаться его завершения), не забудьте проверить, что значение выхода (код выхода), возвращаемое process.exitValue() или process.waitFor() как ожидалось (0 для большинства программ), поскольку исключение не возникает, если процесс выходит из строя.

Также обратите внимание, что для правильной обработки ввода-вывода процесса часто требуется дополнительный код , как описано в документации для класса Process (выделено мной):

По умолчанию у созданного подпроцесса нет собственного терминала или консоли. Все его стандартные операции ввода-вывода (т. Е. Stdin, stdout, stderr) будут перенаправлены на родительский процесс, где к ним можно получить доступ через потоки, полученные с помощью методов getOutputStream (), getInputStream () и getErrorStream (). Родительский процесс использует эти потоки для подачи ввода и получения вывода из подпроцесса. Поскольку некоторые собственные платформы обеспечивают ограниченный размер буфера для стандартных потоков ввода и вывода, неспособность быстро записать поток ввода или прочитать выходной поток подпроцесса, может привести к блокировке подпроцесса или даже к взаимоблокировке.

Один из способов убедиться в правильности обработки ввода-вывода и о том, что значение выхода указывает, что успех заключается в использовании библиотеки, такой как jproc , которая связана с сложностями захвата stdout и stderr и предлагает простой синхронный интерфейс для запуска внешних процессов:

ProcResult result = new ProcBuilder("processname").run();

jproc доступен через maven central:


      org.buildobjects
      jproc
      2.2.0

0
задан Darren Bartrup-Cook 13 July 2018 в 12:44
поделиться

1 ответ

Это не так, как вы используете аргумент OpenArgs. OpenArgs предназначен только для передачи строки в форму.

Вместо этого вы можете использовать коллекцию Forms для установки источника записи:

DoCmd.OpenForm "FormX"
Forms!FormX.Recordsource = "tblA"
0
ответ дан Erik von Asmuth 17 August 2018 в 13:05
поделиться
  • 1
    Спасибо за ваш ответ, пробовал это, но после выбора FormX в combox он просто закрывает форму без сообщения об ошибке ... – Beme MD 13 July 2018 в 13:50
  • 2
    Это не воспроизводится с помощью общего кода. Почему FormX в этом комбинированном поле все равно, в вашем примере это просто A и B? – Erik von Asmuth 13 July 2018 в 13:51
  • 3
    Перекресток, размещенный с ответами здесь access-programmers.co.uk/forums/showthread.php?t=300516 – Minty 13 July 2018 в 14:02
Другие вопросы по тегам:

Похожие вопросы: