Какой лучший способ реализовать простую программу выбора / обновления базы данных в vb6? - PullRequest
3 голосов
/ 05 июня 2009

хорошо, вот ревень - я работаю над приложением, написанным на VB6 (с опытом работы менее 1 месяца), и суть приложения в том, что это простое приложение для выбора / обновления базы данных. .

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

Что ж, способ, которым это делается в кодовой базе, которую я унаследовал, заключается в безбожном количестве нечестиво больших строк SQL-запросов. Вот не совсем придуманный, но измененный, чтобы защитить невинных пример того, о чем я говорю:

'Post Transaction to Database
If actionToDo = "Change" Then
    Set coffeeTableRS = jawsTheSQL.Execute("Update coffeeTable set Name = '" & txtName.text & "', OriginalName = '" & MOriginalName & "', Prefix = '" & txtPrefix.text & "', FName = '" & txtFName.text & "', MName = '" & txtMName.text & "', LName = '" & txtLName.text & "', Suffix = '" & txtSuffix.text & "', Relationship = '" & txtRelationship.text & "', " & _
      "Addr1 = '" & txtAddr1.text & "', Addr2 = '" & txtAddr2.text & "', StreetNumber = '" & txtStreetNumber.text & "', StreetName = '" & txtStreetName.text & "', City = '" & cboCity.text & "', State = '" & ChkNull(cboState.text) & "', ZipCode = '" & ChkNull(txtZipCode.text) & "', ZipCode2 = '" & ChkNull(txtZipCode2.text) & "', " & _
      "Birthdate = " & MBirthdate & ", SSN = '" & Trim(txtSSN1.text & txtSSN2.text & txtSSN3.text) & "', OccuCode = '" & currentOccupationCode & "', OccuValue = " & currentOccupationValue & ", ChangeDate = '" & Format(MDate, "yyyy/mm/dd hh:mm:ss") & "', Active = '" & IIf(chkActive.Value = vbChecked, "", "I") & "'" & _          
      " where IDnumber = '" & txtIDNumber.text & "'")   

И есть одно из них для каждого действия, которое мы можем предпринять (добавить, изменить, удалить и т. Д.)

Другими словами, когда меня попросили добавить простой элемент управления флажком в основную форму, которая обрабатывает все это, мне пришлось добавить его примерно в 15 разных местах. Мне пришлось добавить его ко всем этим запросам, чтобы убедиться, что он извлекается при извлечении записи и устанавливается в наборе записей, а также устанавливать флаг для сравнения данных со значением «истина», когда состояние флажка не соответствует состоянию записи .

Итак, я смотрю на все это, думая, что «1012 * ПОЛУЧИЛ , чтобы быть лучшим / более легким / более обслуживаемым способом сделать это».

Я практически ничего не знаю о VB6, но есть ли способ сделать простое приложение для выбора / обновления базы данных с красивым графическим интерфейсом (то есть мы не можем просто передать клиенту редактируемую сетку данных и сказать: имеет все, что вам нужно "), где элементы управления автоматически связаны с базой данных (я полагаю, через поля с тем же именем), и обновление может быть легко обработано (так как это просто" заполнить имя элемента управления foo значением поле базы данных с именем 'foo')?

Какой VB6 лучший способ сделать что-то подобное? Разве это гораздо проще сделать на таком языке, как C #?

Заранее спасибо

Редактировать: обновлены спецификации на основе ответов

  • должен быть автономным .exe

Ответы [ 7 ]

3 голосов
/ 05 июня 2009

Я бы перешел на новый стек технологий; но эй, если это невозможно ... так как похоже, что вы уже используете ADO, вы хотите использовать отключенные наборы записей.

В общем, что вы хотите сделать, это открыть набор записей с подключением, установить подключение наборов записей на ноль. Отредактируйте набор записей (он может зависать в течение любого промежутка времени), затем установите новое подключение и установите для него подключение наборов записей. Затем вы обновляете пакет.

Это хорошая отправная точка: http://www.devguru.com/features/tutorials/DisconnectedRecordsets/tutDisconnRS.asp

Редактировать: Я уверен, что вы можете связать этот набор записей с сеткой данных, но эй, это было какое-то время

2 голосов
/ 05 июня 2009

Если честно, нужно сделать 2 вещи.

  1. Сообщите владельцам, что это приложение полностью не поддерживается. Вносите любые необходимые изменения настолько осторожно, насколько это возможно. Не пытайтесь реорганизовать его для лучшего подхода.

  2. Сообщите тем, у кого есть право собственности, что им необходимо совершить переписывание (в этом случае вам следует отойти от VB6).

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

1 голос
/ 05 июня 2009

MS Access идеально подходит для такого рода приложений, если число одновременно работающих пользователей будет относительно небольшим.

0 голосов
/ 06 июня 2009

Даже Jet MDB будет поддерживать параметризованные хранимые процедуры из ADO. За исключением того, что вы часто можете использовать подготовленные запросы. Оба эти метода позволяют вам отделить SQL от процедурной активности в логике вашей программы, а также уменьшить головную боль внедрения SQL (преднамеренного или случайного).

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

Подход MVC имеет свои плюсы, но может быть излишним и часто приводит к большой, запутанной и сложной в обслуживании объектной модели. Часто это нужно делать нечистым образом, когда вызовы методов имеют побочные эффекты в других объектах через свойства или методы Friend. Обычно это происходит потому, что, будучи брошенным в камень, его трудно изменить, поскольку пользователи со временем совершенствуют бизнес-правила, а объектная модель больше не моделирует бизнес должным образом. Однако для приложений с коротким жизненным циклом это может быть путь.

Он также может хорошо работать, когда нет единого пользовательского интерфейса, то есть, возможно, веб-интерфейса пользователя, пользовательского интерфейса рабочего стола и интерфейсов «альтернативной доставки услуг» (IVR, общедоступные веб-приложения и т. Д.). У меня есть приложение, в котором я бы хотел использовать MVC прямо сейчас по этой причине: программу с графическим интерфейсом, которая теперь должна также работать в пакетном режиме или режиме командной строки.

0 голосов
/ 06 июня 2009

Вкратце, примените MVC, и в этом случае: разделите представление от данных.

Я бы сделал класс Employee, содержащий все эти поля таблицы, а также метод обновления, вставки и удаления (что-то вроде Entity в Hibernate / JPA). Тогда в форме у вас будет 2 функции для загрузки и сохранения полей GUI из / в поля / свойства класса (по вашему желанию). Каждое пользовательское действие (добавление, редактирование, удаление, ...) затем изменяет этот объект Employee с помощью функции сохранения графического интерфейса и вызывает обновление, вставку или удаление. Может быть, вам понадобятся другие специальные функции обновления, я не знаю.

Я бы сказал, что такой рефакторинг части сотрудника не займет более 1 дня, и вы получите четкое разделение GUI и данных. Вы также будете свободны от зависимостей элементов GUI в вашем SQL и, возможно, от какой-то другой логики.

Я тоже использую этот подход, и он достаточно гибок и стабилен.

0 голосов
/ 05 июня 2009

Есть много разных подходов, однако, откуда вы сейчас находитесь, вот что я бы сделал:

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

2) Сделайте то же самое для действий формы, чтобы создать новые записи (вставки) и удалить записи.

3) Сделайте то же самое для Обновлений, за исключением того, что может быть более одного вида обновлений, поэтому вам может потребоваться более одного для каждой Формы / Таблицы. Теперь они представляют собой ваши процедуры доступа к данным для формы / таблицы: загрузить (выбрать), добавить (вставить), удалить (удалить) и изменить X (обновить (x)). Соберите все это в свой собственный модуль или класс: {form} _DBAccess. На этом этапе не должно быть встроенного SQL ни в одном из форм или модулей бизнес-логики.

4) Одновременно с этим измените процедуры доступа к данным, чтобы использовать вместо них хранимые процедуры или встроенный SQL. Просто создайте соответствующую хранимую процедуру (QueryDef for Access DB) и скопируйте вход для встроенного SQL. Затем измените код vb6, чтобы вместо этого вызывать хранимую процедуру.

0 голосов
/ 05 июня 2009

Полагаю, вы не хотите переписывать приложение? Запрос как написано написан плохо. Не уверен, почему разработчик написал это так. Следует использовать параметры. Но любой «хороший» разработчик может написать плохой код на любом языке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...