Одновременно база данных доступа с Excel как frontend - выполнимый?

Предположим, что у Вас есть база данных с самыми большими таблицами, содержащими приблизительно 200 000 строк, и часто изменяемый. Клиент хочет, чтобы Excel соединился через ODBC с базой данных и работу как frontend для управления данными. Данные должны быть модифицируемыми до 25 пользователей одновременно.

Мой первый инстинкт должен был бы рекомендовать что-то еще, например, сеть frontend. Но предположите, что клиент настаивает на решении Excel, Вы рассматривали бы его как выполнимое, и какие ловушки Вы будете видеть в нем?

Мои сомнения были бы о:

  1. целостность данных (как управлять пользователями, изменяющими те же данные одновременно),
  2. большие объемы данных переместились излишне (при открытии рабочей книги Excel, я предполагаю, что целая база данных должна быть передана),
  3. безопасность (показывая только части данных соответствующим пользователям безопасным способом было бы сложно - видит предыдущую точку),
  4. использование инструмента (Excel) для чего-то, в котором это не выделяется (прощают игру слов),
7
задан simon 19 February 2010 в 10:24
поделиться

2 ответа

Я делаю это постоянно. Нет, вам не нужно вводить всю базу данных или даже всю таблицу. Я использую ADO и VBA и отправляю инструкции SQL через объект Command. Например, у меня есть база данных роялти с фронтэндом Excel.

Пользователь вводит номер счета и инструкцию SELECT, извлекая эту запись и заполняя некоторые пользовательские классы. Пользователь вводит/изменяет некоторые данные и нажимает кнопку 'Сохранить'. Затем класс имеет метод, который записывает запись обратно в базу данных с и UPDATE или INSERT в зависимости от ситуации.

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

Используйте транзакцию, чтобы выполнить откат, если возникли проблемы с блокировкой записей, но с 25 пользователями, вероятно, этого не произойдет.

5
ответ дан 7 December 2019 в 07:44
поделиться

Это действительно должен быть комментарий, но он слишком длинный для поля комментариев, так что вот он.

Если вы хотите проиллюстрировать разницу между unshift и push , достаточно:

#!/usr/bin/perl

use strict; use warnings;

my @x;

push @x, $_ for 1 .. 3;

my @y;

unshift @y, $_ for 1 .. 3;

print "\@x = @x\n\@y = @y\n";

Output:

@x = 1 2 3
@y = 3 2 1

Note use strict; защищает от многих ошибок программистов и use warnings; предупреждает при использовании конструкций сомнительной ценности. На вашем уровне ни то, ни другое не является необязательным.

-121--4086761-

Ну, все они делают разные вещи.

Однако все остальные факторы равны,

push @list, 'foo' if $foo;

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

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

my @list = (
    $foo ? 'foo' : (),
    $bar ? 'bar' : (),
);

может быть в порядке, если это часть какой-то колоссальной инициализации, которая выполняется в другом месте.

Я думаю, что использование

my @list = (
    ('foo') x!! $foo,
    ('bar') x!! $bar,
); 

указывает на то, что программист имеет - как я могу поставить это? - проблемы .

Кстати, нет такой вещи, называемой x!! композитный оператор. !! - двойное логическое отрицание . Он преобразует произвольное ложное значение в определенное, но ложное значение (пустой ряд), которое дает 0 при использовании, где perl ожидает число. Истинное значение преобразуется в 1 . Вот, !! оперирует на $ foo и $ bar и написание его x!! $ foo излишне запутывает смысл кода.

x - оператор повторения . Так,

 ('foo') x !!$foo;

означает повторить ('foo') один раз или нет, в зависимости от того, является ли $ foo истинным или ложным, соответственно .

PS: Конечно, оказывается, что была статья PerlMonks , вводящая так называемый логический оператор squash . Я прочитал статью и считаю ее неубедительной.

-121--3823316-

На первый взгляд я бы предложил рассматривать Excel как веб-страницу, то есть извлекать только необходимые данные и использовать конкретную форму для редактирования, которая обновляет одну запись за раз через ADO. Необходимо заблокировать только одну запись и эту запись в течение части времени, необходимого для обновления. Можно проверить, изменилась ли запись с момента ее открытия для редактирования, и пользователям можно сообщить, что они не могут открыть запись для редактирования, а затем оставить ее в форме редактирования или потерять изменения.

Как правило, такая небольшая группа вряд ли должна одновременно менять одну и ту же запись.

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

2
ответ дан 7 December 2019 в 07:44
поделиться
Другие вопросы по тегам:

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